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

你們必定要先看詳細的理論教程,再開始搭建,這樣報錯後才容易找到突破口
參考文檔html

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監控系統的開源版本。node

Prometheus的特色:

       多維度數據模型。
       靈活的查詢語言。
       不依賴分佈式存儲,單個服務器節點是自主的。
       經過基於HTTP的pull方式採集時序數據。
       能夠經過中間網關進行時序列數據推送。
       經過服務發現或者靜態配置來發現目標服務對象。
       支持多種多樣的圖表和界面展現,好比Grafana等。linux

相關組件:

     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體系中的告警處理中心。git

服務器

--------- ip --------------------------- 安裝軟件 ---------------------
192.168.20.135 | Prometheus、grafana 、alertmanager
192.168.20.137 | node_exporter
------------------------------------------------------------------------------github

安裝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

啓動prometheusweb

cd /usr/local/prometheus-2.1
./prometheus &
netstat -tunlp|grep 9090

prometheus server是能夠獲取到本機數據的,可用如下命令查看數據庫

curl localhost:9090/metrics

web頁面json

http://192.168.20.135:9090/targets

安裝node_exporter

node_exporter我安裝在192.168.20.137上,你也能夠安裝在server上,採集server數據。vim

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

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

解除報警後的恢復郵件

相關文章
相關標籤/搜索