在CentOS環境下安裝Prometheus 與 Grafana的詳細過程記錄
1.
Prometheus架構介紹
(1) Prometheus Server
• 收集與儲存時間序列資料
• 結合Alert 與time series database
• 多維度的數據模型
• 靈活的查詢語言(PromQL),可以簡單查詢到想要的數據
• 提供給Dashboard輸出圖形
Prometheus
服務端,用於存儲及收集資料,提供相關api對外查詢用。Prometheus 本體會將資料儲存在 local on-disk time series database 或是可以串接
remote storage systems
(2) Service Discovery
上面部分則透過 Service
discovery 的方式可以很好的蒐集 kubernetes 相關的資訊。
(3) Client
Library
提供語言開發來產生Metrics 讓PrometheusServer使用。當Prometheus Server 來Pull時,直接返回即時狀態的Metrics
(4) Pushgateway
用於網路不可直達而居於exporter與server端的中轉站。主要用於臨時性Job 推送。這類Job 存在期間較短,有可能Prometheus 來Pull 時就消失,因此透過一個閘道來推送。適合用於服務層面的Metrics。
有個 Prometheus server 本體,會去 Prometheus client pull 相關 metrics,若是短期的 job 如 cronjob 在還來不及
pull 資料回來就已經完成任務,清洗掉資料。所以會有個pushgateway 接收 job push 過來的相關資訊,Prometheus server 再從其中拉取資料。
(5) Exporter
類似傳統意義上的被監控端的agent,有區別的是,它不會主動推送監控資料到server端,而是等待server端定時來手機資料,即所謂的主動監控。
用來曝露已有第三方服務的Metrics 給Prometheus Server,即以Client Library 開發的HTTPserver。
(6) Metrics
Prometheus Client 函式庫支援了四種主要 Metric 的類型:
l
Counter:累加的資料,重設值為 0。常用於 HTTP request 錯誤的出現次數或是 error exception 出現次數
l
Gauge :屬於與時間無關的當下資料(可以增減),例如:CPU/Memory
使用量
l
Histogram :主要使用在表示一段時間範圍內的資料蒐集,以長條圖呈現
l
Summary:表示一段時間內的資料蒐集的總結
(7) AlertManager
報警組件,將報警的功能單獨剝離出來放在Alertmanager。
接收來至Prometheus Server 的Alert event,並依據定義的Notification 組態發送警報,ex: E-mail、Pagerduty、Slack, OpenGenie 與 Webhook 等等。
當抓取資料的值超過 Alert rule 所設定的閥值(threshold) 時,Alert manager 就會將訊息送出(可以透過 Email、Slack、pagerduty
等訊息通知),提醒相關人員注意。
(8) Grafana
Prometheus server 資料拉回來後可以提供本身自帶的 Web UI 或 Grafana 和其他 client 來呈現(透過使用 PromQL 進行查詢)
Grafana為Dashboard 工具,利用Prometheus收集來的timeseries data繪製圖形。
2.
實驗環境與版本
l
Linux系統版本:CentOS-7.5-x86_64bits
l
Prometheus版本:2.14.0 / 2019-11-11
l
Node_exporter版本:0.18.1 / 2019-06-04
l
Grafana版本:Version 6.5.1 /
2019-11-28
l
Alertmanager版本:0.20.0-rc.0 /
2019-11-27
l
官方載點
3.
安裝步驟
(1) 安裝Prometheus Server
A.
安裝Prometheus Server
Prometheus有很多種安裝方式,可以在官網看到,這裡只介紹下載安裝包解壓的方式,因為Prometheus是“開箱即用”的,也就是說解壓安裝包後就可以直接使用了,不需要再執行安裝程式,很方便。到Prometheus的官網下載頁面 獲取最新版本的資訊,比如現在的最新版本是2.14.0,那就下載相應系統的安裝包,然後解壓。
解壓
tar xvfz
prometheus-2.14.0.linux-amd64.tar.gz
|
解壓後當前目錄會出現一個相應資料夾,進入該資料夾就可以直接執行Prometheus server。
運行
$ cd
prometheus-2.14.0.linux-amd64/
// 檢視版本
$
./prometheus --version
// 執行server
$
./prometheus --config.file=prometheus.yml
|
B. 配置Prometheus
prometheus.yml是配置檔案,開啟可以看到不多的幾十行文字,如圖。
其大致分為四部分:
l
global:全域性配置,其中scrape_interval表示抓取一次資料的間隔時間,evaluation_interval表示進行告警規則檢測的間隔時間;
l
alerting:告警管理器(Alertmanager)的配置,目前還沒有安裝Alertmanager;
l
rule_files:告警規則有哪些;
l
scrape_configs:抓取監控資訊的目標。一個job_name就是一個目標,其targets就是採集資訊的IP和埠。這裡預設監控了Prometheus自己,可以通過修改這裡來修改Prometheus的監控埠。Prometheus的每個exporter都會是一個目標,它們可以上報不同的監控資訊,比如機器狀態,或者mysql效能等等,不同語言sdk也會是一個目標,它們會上報你自定義的業務監控資訊。
C.
Prometheus
介面
執行後,在瀏覽器訪問[機器IP:埠] (這邊為localhost:9090)就可以檢視Prometheus的介面了,這裡的機器IP是你執行Prometheus的機器,埠是上面配置檔案中配置的監控自己的埠。開啟後介面如下:
如果訪問不了,看看是不是埠沒有開啟或者允許外網訪問。
介面非常簡單(所以我們還需要Grafana),上面標籤欄中,Alerts是告警管理器,暫時還沒安裝。Graph是檢視監控項的圖表,也是訪問後的預設頁面,Status中可以檢視一些配置、監控目標、告警規則等。
在Graph頁面,由於我們預設已經監控了Prometheus自己,所以已經可以檢視一些監控圖表,比如在輸入框輸入“promhttp_metric_handler_requests_total”,執行Execute,下面的小標籤中切換到Graph就能看到“/metrics”訪問次數的折線圖。
但是光安裝Prometheus server意義不大,下面我們再安裝node_exporter以及grafana
(2) 安裝Node Exporter
我們嘗試新增第一個監控exporter——監控當前機器自身的狀態,包括硬碟、CPU、流量等。因為Prometheus已經有了很多現成的常用exporter,所以我們直接用其中的 node_exporter 。注意了,這裡名字雖然叫node_exporter,但跟nodejs沒有任何關係,在Prometheus看來,一臺機器或者說一個節點就是一個node,所以該exporter是在上報當前節點的狀態。
node_exporter本身也是一個http服務,可以供prometheus server呼叫(pull)來獲取監控的資訊,安裝方法同樣是下載安裝包後解壓直接執行:
下載、解壓、執行
// 下載最新版本,可以在github的release中對最新版本右鍵獲取下載連結
$ wget
https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.18.1.linux-amd64.tar.gz
// 解壓
$ tar xvfz
node_exporter-0.18.1.linux-amd64.tar.gz
// 進入解壓出的目錄
$ cd node_exporter-0.18.1.linux-amd64
// 執行監控採集服務
$
./node_exporter
|
執行後可以看到在監聽9100埠。這樣就可以採集了,
現在先訪問http://127.0.0.1:9090試試能不能有沒有成功執行:
訪問9100 port < http://127.0.0.1:9090>
//訪問9100 port
$ curl
127.0.0.1:9100
$ curl 127.0.0.1:9100/metrics
|
這裡也可以看出其實每個exporter本身都是一個http服務,server端會定時來訪問獲取監控資訊。
訪問成功的話,我們去prometheus的配置檔案(prometheus.yml)中,加上這個target:
scrape_configs:
-
job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
-
job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
|
可以看到,就是在scrape_configs模組中加一個job,命好名,配置好監聽的IP和埠即可,然後重新執行prometheus,在標籤欄的 Status --> Targets 中可以看到多了一個:
如果新加的target的status是“UP”的話,就說明監聽成功了。
此時去Graph中,輸入框輸入node可以發現有很多node開頭的監控項了,都是和機器狀態有關的,可以自己執行看一看。
(3) 安裝Grafana
因為Prometheus的介面看起來非常簡單,所以我們還需要Grafana這個非常強大也是最常用的監控展示框架。
我們還是用下載二進位制包的方式來進行安裝,這種方式不需要你當前的linux使用者擁有sudo許可權,也不需要你知道root密碼。如果你有這些許可權,那就使用yum等其他直接的安裝方式吧,安裝說明見 Grafana的官方安裝頁面。
我們直接下載並解壓:
解壓
$ wget
https://dl.grafana.com/oss/release/grafana-6.5.1-1.x86_64.rpm
$ sudo yum
localinstall grafana-6.5.1-1.x86_64.rpm
|
通過log資訊可以看到Grafana預設執行在3000埠,這個也可以通過配置檔案進行修改:建立名為 custom.ini 的配置檔案,新增到 conf 資料夾,複製 conf/defaults.ini 中定義的所有設定,然後修改自己想要修改的。
解壓完之後,啟動Grafana
啟動Grafana Server (init.d
service)
$ sudo
service grafana-server start
|
啟動Grafana Server (via
systemd)
$
systemctl daemon-reload
$
systemctl start grafana-server
$
systemctl status grafana-server
|
A.
在Grafana展示監控資訊
安裝並啟動Grafana後,瀏覽器輸入 IP:3000 來訪問Grafana,管理員賬號密碼預設是admin/admin。
在介面左邊是一豎排選項,選擇設定圖示中的Data
Source,新增Prometheus的資料來源,URL就填上面你給Prometheus Server設定的ip+埠號就行了,如果沒改過且在本機執行的話,那就是localhost:9090。
現在你需要創建一個資料來源(Data
Source),也就是 Prometheus:
l
點擊 Grafana Logo 打開側邊欄。
l
在側邊欄內,點擊「Data Sources」。
l
選擇「Add New」。
l
選擇「Prometheus」作為資料來源。
l
設置 Prometheus 服務的 URL(在本例中為:http://localhost:9090/)。
此時可以新增dashboard,也就是監控面板了,在剛配好的Prometheus Data Source的設定中有一個標籤就是dashboard,我們匯入Prometheus 2.0 Stats這個面板,就能看到我們Prometheus的一些基本監控情況了,這其實就是匯入了一個別人寫好的面板配置,並且連線我們自己Prometheus的監控資料做展示。
B.
在Grafana匯入監控面板
複製下他的編號,到新增import
dashboard裡面,將其複製的編號貼上,就會出現如下訊息,重新產出uid,選擇Prometheus Data Source,按下Import。
面板中的每個圖都是可以編輯的,也可以設定告警,Grafana告警支援多種方式,我們最常用的就是郵件和webhook了,所以其實不太需要用Prometheus的告警。
(4)安裝報緊Alertmanager
A.
安裝Alertmanager
我們直接下載並解壓:
解壓
$ tar xvfz
alertmanager-0.20.0-rc.0.linux-amd64.tar.gz
|
啟動alertmanager
$ ./alertmanager
--config.file=alertmanager.yml
|
B.
配置Alertmanager
規則配置
$ vim cat
/etc/prometheus/alert.rules
|
在規則裡面新增如下:
groups:
name: uptime
rules:
Alert for any instance that is
unreachable for >1 minutes.
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: page
annotations:
summary: "Instance {{
$labels.instance }} down"
description: "{{ $labels.instance }}
of job {{ $labels.job }} has been down for more than 5 minutes."
|
prometheus.yml增加以下內容
rule_files:
- "/etc/prometheus/alert.rules"
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- "localhost:9093"
|
沒有留言:
張貼留言