使用Prometheus和Grafana構建叢集監控系統(一): 配置與搭建
1, 基礎知識
目前在伺服器監控領域, 除了老牌的Zabbix和nagios外, Prometheus和Grafana也是目前較為流行的監控方案, 本文介紹Prometheus和Grafana的配置方法.
什麼是Grafana?
Grafana是一個圖形化工具, 它可以從很多種資料來源(例如Prometheus)中讀取資料資訊, 使用很漂亮的圖表來展示資料, 並且有很多開源的dashborad可以使用, 製作自己的dashboard也很簡單, 總之, 可以快速地搭建起一個高逼格的監控平臺
什麼是TSDB?
TSDB(Time Series Database)時間序列資料庫, 簡單來說就是儲存隨時間變化的資料的資料庫. 什麼是隨時間變化的資料呢?舉個簡單的例子, 比如, CPU使用率, 典型的隨時間變化的量, 這一秒是50%, 下一秒也許就是80%了. 或者是溫度, 今天是20度, 明天可能就是18度了.
常見的TSDB(時間序列資料庫): influxDB, RRDtool, Graphite, OpenTSDB, Kdb+, Druid, KairosDB, Prometheus等.
什麼是Prometheus?
Prometheus(中文名:普羅米修斯)是由SoundCloud開發的開源監控報警系統和時序列資料庫(TSDB). Prometheus使用Go語言開發, 是Google BorgMon監控系統的開源版本. 2016年由Google發起Linux基金會旗下的原生雲基金會(Cloud Native Computing Foundation), 將Prometheus納入其下第二大開源專案.
Prometheus的基本原理是通過HTTP協議週期性抓取被監控元件的狀態, 任意元件只要提供對應的HTTP介面就可以接入監控. 不需要任何SDK或者其他的整合過程. 這樣做非常適合做虛擬化環境監控系統, 比如VM、Docker、Kubernetes等. 輸出被監控元件資訊的HTTP介面被叫做exporter. 目前網際網路公司常用的元件大部分都有exporter可以直接使用, 比如Varnish、Haproxy、Nginx、SQL/">MySQL、Linux系統資訊(包括磁碟、記憶體、CPU、網路等等).
Prometheus獲取資料的策略是Pull而不是Push, 也就是說, 它會自己去抓取, 而不用你來推送. 抓取使用的是HTTP協議, 在配置檔案中指定目標程式的埠, 路徑及間隔時間即可. 這也就意味著任何程式想要使用Prometheus儲存資料都很簡單, 定義一個HTTP介面即可.
什麼是exporter?
prometheus可以理解為一個數據庫+資料抓取工具, 工具從各處抓來統一的資料, 放入prometheus這一個時間序列資料庫中. 那如何保證各處的資料格式是統一的呢?就是通過這個exporter. Exporter是一類資料採集元件的總稱. Exporter負責從目標處蒐集資料, 並將其轉化為Prometheus支援的格式, 它開放了一個http介面(以便Prometheus來抓取資料). 與傳統的資料採集元件不同的是, Exporter並不向中央伺服器傳送資料, 而是等待中央伺服器(如Prometheus等)主動前來抓取.
Prometheus提供多種型別的Exporter用於採集各種不同服務的執行狀態. 目前支援的有資料庫、硬體、訊息中介軟體、儲存系統、HTTP伺服器、JMX等. https://github.com/prometheus這裡有很多寫好的exporter, 我們可以直接使用. 本文使用的node-exporter是用來收集節點上的metrics監控資料的 .
2, 環境準備
本文準備了3臺機器, 分別是
192.168.33.10, 安裝prometheus及Grafana
192.168.33.11, 安裝node_exporter(監聽TCP 9100 埠)
192.168.33.12, 安裝node_exporter(監聽TCP 9100 埠)
3, 安裝node_exporter
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz $ tar zxvf node_exporter-0.16.0.linux-amd64.tar.gz $ cd node_exporter-0.16.0.linux-amd64 $ nohup ./node_exporter-0.16.0.linux-amd64/node_exporter &
這裡我們也可以把node_exporter寫成systemd服務
$ sudo mv node_exporter-0.16.0.linux-amd64 /usr/local/node_exporter $ sudo groupadd node_exporter $ sudo useradd -g node_exporter -m -d /usr/local/node_exporter -s /sbin/nologin node_exporter $ sudo chown -R node_exporter:node_exporter /usr/local/node_exporter $ sudo vim /etc/systemd/system/node_exporter.service [Unit] Description=Node_exporter DefaultDependencies=no [Service] Type=simple User=node_exporter RemainAfterExit=yes ExecStart=/usr/local/node_exporter/node_exporter --collector.textfile.directory=/usr/local/node_exporter/ --web.listen-address=:9100 Restart=on-failure [Install] WantedBy=multi-user.target $ sudo systemctl start node_exporter.service $ sudo systemctl enable node_exporter.service
4, 安裝prometheus
$ wget https://github.com/prometheus/prometheus/releases/download/v2.4.3/prometheus-2.4.3.linux-amd64.tar.gz $ tar zxvf prometheus-2.4.3.linux-amd64.tar.gz $ cd prometheus-2.4.3.linux-amd64 $ vim prometheus.yml#新增2個新的job
global: scrape_interval:15s evaluation_interval: 15s # scrape_timeout is set to the global default (10s). alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: scrape_configs: - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'linux1' static_configs: - targets: ['192.168.33.11:9100'] labels: instance: server1 - job_name: 'linux2' static_configs: - targets: ['192.168.33.12:9100'] labels: instance: server2
$ nohup ./prometheus &#執行Prometheus
這裡我們可以寫成systemd服務
$ cd .. $ sudo mv prometheus-2.4.3.linux-amd64 /usr/local/prometheus $ sudo groupadd prometheus $ sudo useradd -g prometheus -m -d /usr/local/prometheus -s /sbin/nologin prometheus $ sudo chown -R prometheus:prometheus /usr/local/prometheus $ sudo vim /etc/systemd/system/prometheus.service#寫入如下內容 [Unit] Description=prometheus After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/usr/local/prometheus Restart=on-failure [Install] WantedBy=multi-user.target
Prometheus自帶一個比較簡單的Web, 可以查看錶達式搜尋結果、報警配置、prometheus配置,exporter狀態等. 自帶Web預設在http://ip:9090.
5, 安裝配置Grafana
http://docs.grafana.org/installation/這裡提供了在不同系統上安裝Grafana的方法, 此處提供ubuntu/debian 64bit的安裝方法(官方安裝文件在此https://grafana.com/grafana/download?platform=linux).
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.3.0_amd64.deb $ sudo dpkg -i grafana_5.3.0_amd64.deb $ sudo systemctl status grafana-server#應該是預設進入了執行的狀態 $ sudo systemctl enable grafana-server
Grafana預設監聽在3000埠上, 所以我們可以開啟http://ip:3000來訪問Grafana頁面, 初始登陸使用者名稱和密碼為admin/admin, 第一次登陸時, 可能會要求你設定一個新密碼.
訪問http://ip:3000的介面如下圖
