大家一定要先看詳細的理論教程,再開始搭建,這樣報錯后才容易找到突破口
參考文檔
https://www.cnblogs.com/afterdawn/p/9020129.html
https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practice/
https://www.hi-linux.com/posts/25047.html 參考grafana安裝
https://www.ctolib.com/docs/sfile/prometheus-book/
https://www.ctolib.com/docs/sfile/prometheus-book/quickstart/index.html 理論 詳解教程
https://codegreen.cn/2018/09/28/prometheus-install/#31%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE-alertmanager
背景介紹
Prometheus是由SoundCloud開發的開源監控報警系統和時序列數據庫(TSDB)。Prometheus使用Go語言開發,是Google BorgMon監控系統的開源版本。
Prometheus的特點:
多維度數據模型。
靈活的查詢語言。
不依賴分布式存儲,單個服務器節點是自主的。
通過基於HTTP的pull方式采集時序數據。
可以通過中間網關進行時序列數據推送。
通過服務發現或者靜態配置來發現目標服務對象。
支持多種多樣的圖表和界面展示,比如Grafana等。
相關組件:
Prometheus Server --- Prometheus組件中的核心部分,負責實現對監控數據的獲取,存儲以及查詢。
Push Gateway --- Prometheus數據采集基於Pull模型,當Prometheus Server不能直接與Exporter進行通信時,可利用PushGateway來進行中轉。即通過PushGateway將內部網絡的監控數據主動Push到Gateway當中,Prometheus Server再采用同樣Pull的方式從PushGateway中獲取監控數據。
Exporter --- 數據采集組件,它並不向中央服務器發送數據,而是等待中央服務器主動前來抓取。其將監控數據采集的端點通過HTTP服務的形式暴露給Prometheus Server,Prometheus Server通過訪問該Exporter提供的Endpoint端點,即可獲取到需要采集的監控數據。
alertmanager --- 若Promtheus Server中發現某監控項滿足PromQL中定義的告警規則,則會產生一條告警,並將其交於AlertManager進行管理。在AlertManager中可以配置各種通知方式,也可以定義Webhook自定義告警處理方式。AlertManager即Prometheus體系中的告警處理中心。
服務器
--------- ip --------------------------- 安裝軟件 ---------------------
192.168.20.135 | Prometheus、grafana 、alertmanager
192.168.20.137 | node_exporter
安裝Prometheus
wget https://github.com/prometheus/prometheus/releases/tag/v2.1.0/prometheus-2.1.0.linux-amd64.tar.gz
tar -xvf prometheus-2.1.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/prometheus-2.1.0.linux-amd64 /usr/local/prometheus-2.1
啟動prometheus
cd /usr/local/prometheus-2.1
./prometheus &
netstat -tunlp|grep 9090
prometheus server是可以獲取到本機數據的,可用以下命令查看
curl localhost:9090/metrics
web頁面
http://192.168.20.135:9090/targets
安裝node_exporter
node_exporter我安裝在192.168.20.137上,你也可以安裝在server上,采集server數據。
wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0-rc.3/node_exporter-0.16.0-rc.3.linux-amd64.tar.gz
tar -xvf node_exporter-0.16.0-rc.3.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/node_exporter-0.16.0-rc.3.linux-amd64/ /usr/local/node_exporter-0.16
啟動node_exporter
cd /usr/local/node_exporter-0.16
./node_exporter &
netstat -tunlp|grep 9100
查看各項監控指標是否有數據了:
curl localhost:9100/metrics
在server端prometheus.yml末尾添加job:
vim /usr/local/prometheus-2.1/prometheus.yml
- job_name: 'export_test2'
static_configs:
- targets: ['192.168.20.137:9100']
labels:
instance: 'node2'
重啟prometheus:
killall prometheus
cd /usr/local/prometheus-2.1/
./prometheus
在prometheus的web界面查看:status --> targets

我們可以隨便查看一個監控項,看是否獲取到值,也可在Graph下進行數據的查找與曲線圖的展示

安裝grafana
grafana與prometheus進行對接,可以對數據進行更好的展示
wget https://dl.grafana.com/oss/release/grafana-5.4.3.linux-amd64.tar.gz
tar -xvf grafana-5.4.3.linux-amd64.tar.gz -C /usr/local/
啟動grafana
cd /usr/local/grafana-5.4.3/bin/
./grafana-server &
登錄grafana的web頁面
http://192.168.20.135:3000/
admin/admin
添加數據源與自帶模板
Add data source --> http://192.168.20.135:9090 --> Dashboards --> prometheus2.0 --> save&test



添加node-exporter-server-metrics 模板
下載方法:https://grafana.com/dashboards/405 --> Dashboards -->在如圖搜索框搜索node-exporter-server-metrics -->點擊第一個進去 --> version --> download


在grafana的Dashboard 中導入模板的json文件


同時存在多個job,可以勾選展示。

添加1 Node Exporter 0.16 0.17 for Prometheus 監控展示看板
此監控模板基於node_exporter 可以更好的展示多項基本監控項
模板url: https://grafana.com/dashboards/8919
在grafana所在server安裝餅圖插件,並重啟grafana
cd /usr/local/grafana/bin
./grafana-cli plugins install grafana-piechart-panel
killall grafana-server
./grafana-server restart &
圖形界面配置
grafana + --> import --> 將以上該模板的url 填到Grafana.com Dashboard中 -->

展示

alertmanager的告警配置
自定義prometheus告警規則
以下規則定義當job export_test2的node_exporter服務掛掉,即產生一個告警
vim /usr/local/prometheus-2.1/rule.yml
groups:
- name: alert-rules #告警的分組,后續告警優化時,可通過分組做優化配置
rules:
- alert: InstanceStatus #告警規則名稱
expr: up{job="export_test2"} == 0 #1是服務正常 ,0服務掛了
for: 10s #評估等待10s,等待期間報警狀態為pending
labels: #此標簽可用於match之后的通知操作
severity: 'critical'
annotations: #描述告警信息
description: 服務器 已宕機
summary: 服務器 運行狀態
在prometheus的配置文件中添加該規則
vim /usr/local/prometheus-2.1/prometheus.yml
rule_files:
- "/usr/local/prometheus-2.1/rule.yml"
安裝alertmanager
https://github.com/prometheus/alertmanager/releases/download/v0.15.2/alertmanager-0.15.2.linux-amd64.tar.gz
tar -xvf alertmanager-0.15.2.linux-amd64.tar.gz -C /usr/local
mv /usr/local/alertmanager-0.15.2.linux-amd64 /usr/local/alertmanager-0.15.2
啟動alertmanager
cd /usr/local/alertmanager-0.15.2
./alertmanager &
在prometheus的配置文件中配置alertmanager地址,讓其知曉alertmanager的地址,以傳送告警信息
vim /usr/local/prometheus-2.1/prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
重啟promethous
killall prometheus
cd /usr/local/prometheus-2.1/
./prometheus
測試:
此時關閉192.168.20.137的node_exporter服務
killall node_exporter
查看prometheus的web界面,已經產生告警:

再查看alertmanager已經接收到來自prometheus的告警:

配置告警處理策略
新建alertmanager.yml,由於要進行發郵件測試,將等待時間和間隔時間設置的很短
vim /usr/local/alertmanager-0.15.2/alertmanager.yml
global: #若所有的郵件配置使用相同的SMTP配置,則可以直接定義全局的SMTP配置
smtp_smarthost: 'smtp.126.com:25'
smtp_from: 'xxxx@126.com'
smtp_auth_username: 'xxxx@126.com'
smtp_auth_password: 'xxx121212' #這是授權碼,不是密碼,
smtp_require_tls: false
#templates: #默認Alertmanager使用系統自帶的默認通知模板 ,用戶也可在此自定義模板
# - '/alertmanager/template/*.tmpl'
route: #頂級路由必須匹配所有報警,因為他要接受所有報警,再分匹配到分支路由上
group_by: ['alertname'] #滿足group_by中定義標簽名稱,那么這些告警將會合並為一個通知發送給接收器。
group_wait: 1s #同一group的等待時間,在等待時間內當前group接收到了新的告警,這些告警將會合並為一個通知向receiver發送
group_interval: 5s #同一Gourp發送告警通知的時間間隔
repeat_interval: 20s #在連續告警觸發的情況下,重復發送告警的時間間隔
receiver: 'default-receiver'
routes: #分支路由,可設置不同的匹配規則
- receiver: 'default-receiver'
match: #匹配告警規則的key:value
severity: 'critical'
receivers:
- name: 'default-receiver'
email_configs:
- to: '1xxxx@qq.com'
send_resolved: true #告警解除發送恢復通知
重啟alertmanager
killall alertmanager
cd /usr/local/alertmanager-0.15.2
./alertmanager &
查看alertmanager的配置是否加載,點擊web頁面的status

查看接收到的郵件報警信息

解除報警后的恢復郵件

