prometheus+grafana+alertmanger



監控方案涉及的關鍵問題

採集數據存儲數據告警、展示數據

那麼基於prometheus的監控方案是用什麼技術實現?本文基於docker進行部署,目的以簡單的demo快速瞭解prometheus監控方案的涉及的知識點以及流程。


本文介紹的內容

prometheus整體架構介紹安裝prometheus安裝grafana安裝alertmanagergrafana關聯prometheusprometheus關聯alertmanagerprometheus定義告警規則alertmanager觸發告警


prometheus整體架構


從prometheus官方給的架構圖分析出,基於prometheus的監控方案常用組件:

Exporters :暴露metrics,收集監控指標,並以一種規定的數據格式提供給Prometheus-採集監控對象數據Prometheus Server :收集數據和存儲數據到時間序列數據庫中,收集的數據由Exporters提供-採集/存儲數據Alertmanager :告警管理,接收Prometheus的告警,去重/分組/發出告警(郵件、webhook等)- 告警Grafana:監控Dashbord,UI展示,設置Prometheus Server地址即可自定義監控Dashbord- UI展示Push Gateway: 用於短期的jobs,jobs直接向Prometheus server端推送它們的 metrics.用於服務層面的 metrics


部署組件

本文以docker方式部署:prometheus、grafana、alertmanager


install prometheus

<code>docker run --name prometheus -d -p 9090:9090 quay.io/prometheus/prometheus
# 暴露端口:9090
docker run --name prometheus -d -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml quay.io/prometheus/prometheus
# 掛載prometheus.yml文件,便於在主機上直接修改
docker run --name prometheus -d -p 9090:9090 --link=alertmanger:alertmanger -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /etc/prometheus/rules:/etc/prometheus/rules quay.io/prometheus/prometheus
# 掛載掛載prometheus.yml文件,創建了rules目錄,rules存放告警規則yaml文件,後續會提到/<code>


install grafana

<code>docker run -d -p 3000:3000 --name=grafana grafana/grafana/<code>


install alertmanger

<code>docker run --name alertmanger -d -p 9093:9093 -v /etc/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml quay.io/prometheus/alertmanager
#掛載告警文件:alertmanager.yml,便於在主機上直接修改文件/<code>


grafana關聯prometheus


Prometheus界面,採集promhttp_metric_handler_requests_total為demo進行演示,這個metrics是prometheus自己監控自己的http請求數量



訪問grafana,默認用戶名和密碼都是:admin設置-type選擇Prometheus-填寫Prometheus訪問地址,點擊Save&Test 測試關聯prometheus是否成功


新建dashboard,設置Metrics,即可展示數據


prometheus關聯alertmanager

prometheus配置文件路徑:/etc/prometheus/prometheus.yaml,在如下配置設置告警地址

<code>global:
scrape_interval: 15s
evaluation_interval: 15s
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanger:9093']
# 關聯告警服務器alertmanger
scrape_configs:
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# prometheus 服務監聽的端口/<code>


查看prometheus-Status-configuration,檢測配置是否生效



prometheus定義告警規則-prom_rules.yml

<code>groups:
- name: test-rule
rules:
- alert: promReqCounts
expr: promhttp_metric_handler_requests_total > 10
for: 0s
labels:
prom: http
annotations:
summary: High prometheus request total is above 1000/<code>定義request請求總數大於10就發生告警,標籤為:prom:http定義rules考官網例子:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/


在prometheus中關聯rule文件 - prom_rules.yml

<code>global:
scrape_interval: 15s
evaluation_interval: 15s

# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanger:9093']
# 關聯告警服務器alertmanger
rule_files:
- "rules/prom_rules.yml"
# 定義告警規則:prom_rules.yml
scrape_configs:
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# prometheus 服務監聽的端口/<code>


alertmanager觸發告警

配置alertmanager.yml文件

<code>global:
resolve_timeout: 5m

route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.test'
routes:
- receiver: 'web.hook'
match:
prom: http
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:8888'
- name: 'web.test'
webhook_configs:
- url: 'http://127.0.0.1:88888'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']/<code>當alertmanger接收到標籤為:prom:http的告警就觸發 web.hook,當然也可以發郵件等操作更多告警參考官網例子:https://prometheus.io/docs/alerting/configuration/


如果發生了告警,alertmaneger界面會有記錄



參考文檔

prometheus : https://prometheus.io/docs/prometheus/latest/installation/exporter : https://prometheus.io/docs/instrumenting/exporters/#exporters-and-integrationsalertmanger: https://prometheus.io/docs/alerting/alertmanager/prometheus rules : https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/grafana:http://docs.grafana.org/


原文鏈接:https://mp.weixin.qq.com/s/H91lLCfUic5yPMEjZOGRWQ

關於睿雲智合

深圳睿雲智合科技有限公司成立於2012年,總部位於深圳,並分別在成都、深圳設立了研發中心,北京、上海設立了分支機構,核心骨幹人員全部為來自金融、科技行業知名企業資深業務專家、技術專家。早期專注於為中國金融保險等大型企業提供創新技術、電子商務、CRM等領域專業諮詢服務。

自2016年始,在率先將容器技術引進到中國保險行業客戶後,公司組建了專業的容器技術產品研發和實施服務團隊,旨在幫助中國金融行業客戶將容器創新技術應用於企業信息技術支持業務發展的基礎能力改善與提升,成為中國金融保險行業容器技術服務領導品牌。

此外,憑藉多年來在呼叫中心領域的業務經驗與技術積累,睿雲智合率先在業界推出基於開源軟交換平臺FreeSwitch的微服務架構多媒體數字化業務平臺,將語音、視頻、webchat、微信、微博等多種客戶接觸渠道集成,實現客戶統一接入、精準識別、智能路由的CRM策略,並以容器化治理來支持平臺的全應用生命週期管理,顯著提升了數字化業務處理的靈活、高效、彈性、穩定等特性,為幫助傳統企業向“以客戶為中心”的數字化業務轉型提供完美的一站式整體解決方案。