prometheus + grafana + node_exporter + alertmanager 的安裝部署與郵件報警 (一)


大家一定要先看詳細的理論教程,再開始搭建,這樣報錯后才容易找到突破口
參考文檔

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

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

解除報警后的恢復郵件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM