Prometheus + pushgateway + alertmanager 安裝

一顆白菜發表於2019-07-12

Prometheus元件架構

Prometheus 架構圖
  • Prometheus Server: 採用 PULL 模式收集和儲存時間序列資料。
  • Client Library: 客戶端庫,生成 metrics。當 Prometheus server 來 pull 時,直接返回實時狀態的 metrics。
  • Push Gateway: 提供 PUSH 模式。主要用於短期的 jobs。由於這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。為此,jobs 可以直接向 Push Gateway metrics。
  • Exporters: 用於暴露已有的第三方服務的 metrics 給 Prometheus。如 node-exporter
  • Alertmanager: 提供告警。從 Prometheus server 端接收到 alerts 後,會進行去除重複資料,分組,並路由到對收的接受方式,發出報警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。


Prometheus元件安裝

1. docker映象包下載
docker pull prom/node-exporter
docker pull prom/prometheus
複製程式碼
2. 啟動node-exporter,用於機器系統資料收集
docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --net="host" \
  prom/node-exporter
複製程式碼

啟動成功即可訪問:http://localhost:9100/metrics 頁面展示的即是收集到的資料指標

3. 啟動 pushgateway
docker pull prom/pushgateway
docker run -d -p 9091:9091 prom/pushgateway
複製程式碼
4. 啟動 alertmanager

配置 alertmanager.yml 配置檔案

global:
  resolve_timeout: 5m #處理超時時間,預設為5min
  smtp_smarthost: 'xxxxxx' # 郵箱smtp伺服器代理
  smtp_from: 'xxxxxx' # 傳送郵箱名稱
  smtp_auth_username: 'xxxxxx' # 郵箱名稱
  smtp_auth_password: 'xxxxxx' #郵箱密碼

# 定義模板信心
templates:
  - '/etc/alertmanager/templates/*.html'
    
route:
  receiver: 'email' # 傳送警報的接收者的名稱,以下receivers name的名稱
  group_wait: 10s
  group_interval: 1m
  repeat_interval: 1m
  group_by: ['alertname']
 
receivers:
  - name: 'email' # 警報
    email_configs: # 郵箱配置
    - to: 'xxxxx@163.com'  # 接收警報的email配置
      html: '{{ template "test.html" . }}' # 設定郵箱的內容模板
      headers: { Subject: "[WARN] 報警郵件"} # 接收郵件的標題
複製程式碼

dockerfile如下:

FROM prom/alertmanager
ADD test.html /etc/alertmanager/templates/
ADD alertmanager.yml /etc/alertmanager/
複製程式碼

啟動 alertmanager:

 docker run -d -p 9093:9093  my-alerts
複製程式碼
5. 啟動prometheus

新建 prometheus.yml 檔案,配置 告警服務 和 告警規則,監聽 pushgateway 的 scrape

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# 告警服務配置
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['test.host.com:9093'] # alertmanager部署地址

# 告警規則配置
rule_files:
  - "alertmanager_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus
  # 新增 pushgateway 的 scrape
  - job_name: pushgateway
    static_configs:
      - targets: ['test.host.com:9091'] # pushgateway部署地址
        labels:
          instance: pushgateway

複製程式碼

⚠ 注意yaml檔案格式,各種縮緊必須格式化!

配置 alertmanager_rules.yml 規則檔案:

此處監控 flink 可用的task slot個數,小於 10個則告警

groups:
 - name: test-rules
   rules:
   - alert: LowAvailableSlot # 告警名稱
     expr: flink_jobmanager_taskSlotsAvailable{job="pushgateway"} < 10 # 告警的判定條件,參考Prometheus高階查詢來設定
     for: 10s # 滿足告警條件持續時間多久後,才會傳送告警
     labels: #標籤項
      team: flink
     annotations: # 解析項,詳細解釋告警資訊
      summary: "{{$labels.instance}}: 資源告警"
      description: "{{$labels.instance}}: job {{$labels.job}} 可用 slot 不足10個 "
複製程式碼

dockerfile如下:

FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
ADD alertmanager_rules.yml /etc/prometheus/
複製程式碼

啟動 prometheus :

docker run -d -p 9090:9090 my-prometheus
複製程式碼
參考連結

相關文章