1. 程式人生 > >Prometheus 和 Alertmanager實戰配置

Prometheus 和 Alertmanager實戰配置

Prometheus時序資料庫

一、Prometheus

1、Prometheus安裝

1)原始碼安裝

prometheus安裝包最新版本下載地址:https://prometheus.io/download/

wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz
tar txvf prometheus-2.3.2.linux-amd64.tar.gz
cd prometheus-2.3.2.linux-amd64.tar.gz
./prometheus --config.file=prometheus.yml

注:通過執行

./prometheus -h

可以檢視具體得執行引數,引數後面可以檢視預設得引數。如下圖所示。

2)docker 方式安裝(前提docker已經安裝完畢)

建立目錄和prometheus配置檔案

mkdir /prometheus
vim /prometheus/prometheus.yml

注:對於prometheus.yml檔案的配置,稍後詳細介紹。

拉取prometheus映象

docker pull prom/prometheus

啟動prometheus

docker run -d -p 9090:9090 --name prometheus -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml

注:引數的簡要說明

a、-d選項啟動獨立模式下的prometheus容器,這意味著容器將在後臺啟動,這種情況下只有stop docker才可以關閉prometheus,而不能執行ctrl+c

b、-p選擇指定埠號對映,通過訪問本機的9090埠,即可訪問prometheus容器的9090埠

c、--name指定容器的名稱

d、-v選項建立本機檔案和docker內檔案的對映

e、--config.file指定執行docker內prometheus的配置檔案

2、prometheus配置檔案的設定

prometheus的配置檔案採用的是yaml檔案,yaml檔案書寫的要求如下:

大小寫敏感
使用縮排表示層級關係
縮排時不允許使用Tab鍵,只允許使用空格。
縮排的空格數目不重要,只要相同層級的元素左側對齊即可

prometheus.yml的樣例

複製程式碼

# Prometheus全域性配置項
global:
  scrape_interval:     15s # 設定抓取資料的週期,預設為1min
  evaluation_interval: 15s # 設定更新rules檔案的週期,預設為1min
  scrape_timeout: 15s # 設定抓取資料的超時時間,預設為10s
  external_labels: # 額外的屬性,會新增到拉取得資料並存到資料庫中
   monitor: 'codelab_monitor'


# Alertmanager配置
alerting:
 alertmanagers:
 - static_configs:
   - targets: ["localhost:9093"] # 設定alertmanager和prometheus互動的介面,即alertmanager監聽的ip地址和埠
     
# rule配置,首次讀取預設載入,之後根據evaluation_interval設定的週期載入
rule_files:
 - "alertmanager_rules.yml"
 - "prometheus_rules.yml"

# scape配置
scrape_configs:
- job_name: 'prometheus' # job_name預設寫入timeseries的labels中,可以用於查詢使用
  scrape_interval: 15s # 抓取週期,預設採用global配置
  static_configs: # 靜態配置
  - targets: ['localdns:9090'] # prometheus所要抓取資料的地址,即instance例項項

- job_name: 'example-random'
  static_configs:
  - targets: ['localhost:8080']

複製程式碼

3、動態更新prometheus的配置項

 動態更新Prometheus的配置,即熱更新載入,一共有兩種方式:

1)向prometheus程序傳送SIGHUP訊號

2)curl -X POST http://localdns:9090/-/reload 

4、prometheus資料展示

此處介紹兩種Prometheus資料介面化顯示的方式。

1)表示式瀏覽器

在瀏覽器中,輸入部署prometheus資料庫的機器ip地址以及埠號

http://localdns:9090/graph

介面展示如下,就可以通過瀏覽器檢視Prometheus中的資料。

2)Grafana圖形介面

安裝啟動

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.3.linux-amd64.tar.gz
tar zxvf grafana-5.2.3.linux-amd64.tar.gz
cd grafana-5.2.3.linux-amd64.tar.gz
bin/grafana-server web

Grafana預設服務埠號為3000,通過瀏覽器對Grafana進行訪問。

http://localdns:3000

預設登入名密碼為"admin/admin"。

建立一個Prometheus資料來源Data source:

複製程式碼

1 在左側工具欄中,點選"Configuration"選單。
2 點選"Data Sources"。
3 點選"Add data source"。
4 資料來源Type選擇“Prometheus”。
5 設定Prometheus服務訪問地址(例如:http://localhost:9090)。
6 調整其他想要的設定(例如:關閉代理訪問)。
7 點選“Add”按鈕,儲存這個新資料來源。

複製程式碼

之後,通過新增儀表盤(dashboards)進行資料的展示。

二、Alertmanager(email報警)

1、Alertmanager安裝

原始碼安裝

mkdir -p $GOPATH/src/github.com/prometheus
cd $GOPATH/src/github.com/prometheus
git clone https://github.com/prometheus/alertmanager.git
cd alertmanager
make build

啟動

./alertmanager-config.file= alertmanager.yml #預設配置項為alertmanager.yml

注:alertmanager.yml配置檔案,預設是不存在的,需要新建。

2、alertmanager.yml的配置

複製程式碼

# 全域性配置項
global: 
  resolve_timeout: 5m #處理超時時間,預設為5min
  smtp_smarthost: 'smtp.sina.com:25' # 郵箱smtp伺服器代理
  smtp_from: '******@sina.com' # 傳送郵箱名稱
  smtp_auth_username: '******@sina.com' # 郵箱名稱
  smtp_auth_password: '******' # 郵箱密碼或授權碼
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企業微信地址


# 定義模板信心
templates:
  - 'template/*.tmpl'

# 定義路由樹資訊
route:
  group_by: ['alertname'] # 報警分組依據
  group_wait: 10s # 最初即第一次等待多久時間傳送一組警報的通知
  group_interval: 10s # 在傳送新警報前的等待時間
  repeat_interval: 1m # 傳送重複警報的週期 對於email配置中,此項不可以設定過低,否則將會由於郵件傳送太多頻繁,被smtp伺服器拒絕
  receiver: 'email' # 傳送警報的接收者的名稱,以下receivers name的名稱

# 定義警報接收者資訊
receivers:
  - name: 'email' # 警報
    email_configs: # 郵箱配置
    - to: '******@163.com'  # 接收警報的email配置
      html: '{{ template "test.html" . }}' # 設定郵箱的內容模板
      headers: { Subject: "[WARN] 報警郵件"} # 接收郵件的標題
    webhook_configs: # webhook配置
    - url: 'http://127.0.0.1:5001'
    send_resolved: true
    wechat_configs: # 企業微信報警配置
    - send_resolved: true
      to_party: '1' # 接收組的id
      agent_id: '1000002' # (企業微信-->自定應用-->AgentId)
      corp_id: '******' # 企業資訊(我的企業-->CorpId[在底部])
      api_secret: '******' # 企業微信(企業微信-->自定應用-->Secret)
      message: '{{ template "test_wechat.html" . }}' # 傳送訊息模板的設定
# 一個inhibition規則是在與另一組匹配器匹配的警報存在的條件下,使匹配一組匹配器的警報失效的規則。兩個警報必須具有一組相同的標籤。 
inhibit_rules: 
  - source_match: 
     severity: 'critical' 
    target_match: 
     severity: 'warning' 
    equal: ['alertname', 'dev', 'instance']

複製程式碼

注:

1)repeat_interval配置項,對於email來說,此項不可以設定過低,否則將會由於郵件傳送太多頻繁,被smtp伺服器拒絕

上述配置的email、webhook和wechat三種報警方式。目前Alertmanager所有的報警方式有以下幾個方面:

複製程式碼

email_config
hipchat_config
pagerduty_config
pushover_config
slack_config
opsgenie_config
victorops_config

複製程式碼

3、.tmpl模板的配置

1)test.tmpl

複製程式碼

{{ define "test.html" }}
<table border="1">
        <tr>
                <td>報警項</td>
                <td>例項</td>
                <td>報警閥值</td>
                <td>開始時間</td>
        </tr>
        {{ range $i, $alert := .Alerts }}
                <tr>
                        <td>{{ index $alert.Labels "alertname" }}</td>
                        <td>{{ index $alert.Labels "instance" }}</td>
                        <td>{{ index $alert.Annotations "value" }}</td>
                        <td>{{ $alert.StartsAt }}</td>
                </tr>
        {{ end }}
</table>
{{ end }}

複製程式碼

注:上述Labels項,表示prometheus裡面的可選label項。annotation項表示報警規則中定義的annotation項的內容。

2)test_wechat.tmpl

複製程式碼

{{ define "cdn_live_wechat.html" }}
  {{ range $i, $alert := .Alerts.Firing }}
    [報警項]:{{ index $alert.Labels "alertname" }}
    [例項]:{{ index $alert.Labels "instance" }}
    [報警閥值]:{{ index $alert.Annotations "value" }}
    [開始時間]:{{ $alert.StartsAt }}
  {{ end }}
{{ end }}

複製程式碼

注:此處range遍歷項與email模板中略有不同,只遍歷當前沒有處理的報警(Firing)。此項如果不設定,則在Alert中已經Resolved的報警項,也會被髮送到企業微信。

4、在Prometheus模組定義告警規則

alertmanager_rules.yml樣例配置檔案(與prometheus同目錄下)

複製程式碼

groups:
 - name: test-rules
   rules:
   - alert: InstanceDown # 告警名稱
     expr: up == 0 # 告警的判定條件,參考Prometheus高階查詢來設定
     for: 2m # 滿足告警條件持續時間多久後,才會傳送告警
     labels: #標籤項
      team: node
     annotations: # 解析項,詳細解釋告警資訊
      summary: "{{$labels.instance}}: has been down"
      description: "{{$labels.instance}}: job {{$labels.job}} has been down "
      value: {{$value}}

複製程式碼

5、告警資訊生命週期的3中狀態

1)inactive:表示當前報警資訊即不是firing狀態也不是pending狀態

2)pending:表示在設定的閾值時間範圍內被啟用的

3)firing:表示超過設定的閾值時間被啟用的

三、結果展示

啟動prometheus和alertmanager,滿足報警條件後,就可以收到報警郵件了。

1、瀏覽器介面化告警展示

在瀏覽器輸入alertmanager的配置地址,即可檢視所監控到的報警資訊

http://localdns:9093/#/alerts

如圖所示:

2、郵箱告警展示

1)原始郵箱告警展示

 2)模板郵箱告警展示

 3、企業微信告警展示

 參考連結: