docker-compose搭建prometheus+grafana+釘釘告警
前言:
本文將介紹使用docker-compose部署搭建promtheus監(jiān)控容器、主機、服務(wù)等相關(guān)狀態(tài);
配合granfana面板構(gòu)建監(jiān)控大屏;
由于grafana的報警不是很友好,使用dingtalk,配合altermanager,實現(xiàn)釘釘報警。
一、編寫docker-compose(開門見山)
docker環(huán)境搭建不再介紹,網(wǎng)上已經(jīng)一大堆。
首先介紹一下需要部署的組件:
- prometheus:監(jiān)控核心組件
- cadvisor:用于獲取docker容器的指標
- node-exporter :用戶獲取服務(wù)器的指標
- grafana:監(jiān)控圖表好用的可視化組件
- alertmanager:告警組件
- dingtalk:alert告警不支持釘釘,需要借助dingtalk插件
首先創(chuàng)建一個prometheus目錄,用來放docker-compose文件已經(jīng)集群中需要掛載的配置文件。
在prometheus下面創(chuàng)建兩個目錄
prome:用來存放prometheus相關(guān)配置文件
alert:用來存放報警相關(guān)配置文件
直接上docker-compose.yml文件
version: '2' networks: monitor: driver: bridge services: prometheus: image: prom/prometheus container_name: prometheus hostname: prometheus restart: always command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.enable-lifecycle' - '--storage.tsdb.retention.time=30d' volumes: - ./prome:/etc/prometheus ports: - "29011:9090" networks: - monitor alertmanager: image: prom/alertmanager container_name: alertmanager hostname: alertmanager restart: always volumes: - /home/docker/prometheus/alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml ports: - "29012:9093" environment: - TZ=Asia/Shanghai networks: - monitor grafana: image: grafana/grafana container_name: grafana hostname: grafana restart: always ports: - "29013:3000" networks: - monitor node-exporter: image: quay.io/prometheus/node-exporter container_name: node-exporter hostname: node-exporter restart: always ports: - "29014:9100" networks: - monitor cadvisor: image: google/cadvisor:latest container_name: cadvisor hostname: cadvisor restart: always volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /home/docker/:/var/lib/docker:ro ports: - "29015:8080" networks: - monitor dingtalk: image: timonwong/prometheus-webhook-dingtalk container_name: dingtalk hostname: dingtalk restart: always volumes: - ./alert/config.yml:/etc/prometheus-webhook-dingtalk/config.yml - ./alert/dingtalk.tmpl:/opt/dingtalk/template/dingtalk.tmpl ports: - "29016:8060" environment: - TZ=Asia/Shanghai networks: - monitor
二、prometheus相關(guān)配置文件
注:以下文件地址及命令均為自己隨機命名,大家可以自行命令,對應(yīng)好配置文件中的地址引用即可
1、prometheus/prome/promethues.yml文件是prometheus的配置文件,用來配置一些組件及監(jiān)控信息,簡單如下,需要將ip替換成自己實際的ip地址。
global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: ['ip:29012'] rule_files: - "/etc/prometheus/rules/*.rules" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['ip:29011'] - job_name: 'cadvisor' static_configs: - targets: ['ip:29015']
2、在prometheus中定義報警規(guī)則,達到報警條件,就會通知alertmanager組件進行報警
prometheus/prome/rules/promethues.yml
groups: - name: 主機存活告警 # 命名 rules: - alert: 主機存活告警 # 命名 expr: up == 0 # 表達式,分析指標判定告警 for: 60s # 觸發(fā)告警持續(xù)時間 labels: # 自定義告警標簽 severity: warning annotations: # 告警內(nèi)容注釋,根據(jù)需要制定 summary: "{{ $labels.instance }} 宕機超過1分鐘!" - name: 主機內(nèi)存使用率告警 rules: - alert: 主機內(nèi)存使用率告警 expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80 for: 1m labels: severity: warning annotations: summary: "內(nèi)存利用率大于80%, 實例: {{ $labels.instance }},當前值:{{ $value }}%" - name: 主機CPU使用率告警 rules: - alert: 主機CPU使用率告警 expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 70 for: 1m labels: severity: warning annotations: summary: "CPU近10分鐘使用率大于70%, 實例: {{ $labels.instance }},當前值:{{ $value }}%" - name: 主機磁盤使用率告警 rules: - alert: 主機磁盤使用率告警 expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80 for: 1m labels: severity: warning annotations: summary: "磁盤使用率大于80%, 實例: {{ $labels.instance }},當前值:{{ $value }}%"
三、報警模塊相關(guān)配置文件
1、alertmanager相關(guān)
alertmanager是prometheus依賴的報警組件,所有的報警消息均是依賴alertmanager進行報警。
由于要配置釘釘報警,默認alertmanager不支持釘釘,需要引用dingtalk組件,以下配置文件中需要配置dingtalkd的url prometheus/alert/alertmanager.yml
global: # 每5分鐘檢查一次是否恢復(fù) resolve_timeout: 5m # route用來設(shè)置報警的分發(fā)策略 route: # 采用哪個標簽來作為分組依據(jù) group_by: ['alertname'] # 組告警等待時間。也就是告警產(chǎn)生后等待30s,如果有同組告警一起發(fā)出 group_wait: 30s # 兩組告警的間隔時間 group_interval: 30s # 重復(fù)告警的間隔時間,減少相同告警的發(fā)送頻率 repeat_interval: 1h # 設(shè)置默認接收人 receiver: 'webhook' receivers: - name: 'webhook' webhook_configs: - url: 'http://ip:29016/dingtalk/webhook/send' send_resolved: true
2、 dingtalk相關(guān)
首先要添加釘釘報警機器人:
在釘釘上創(chuàng)建一個報警群,打開群設(shè)置,選擇機器人。
添加一個自定義的機器人
選擇加簽,創(chuàng)建完成后,會生成機器人的接口,復(fù)制保存后用。
回到dingtalk組件中,配置相對應(yīng)的釘釘機器人的接口。
prometheus/alert/config.yml
## Request timeout ## timeout: 5s ### Uncomment following line in order to write template from scratch (be careful!) ##no_builtin_template: true ### Customizable templates path #templates: #- '/opt/dingtalk/template/dingtalk.tmpl' ### You can also override default template using `default_message` ### The following example to use the 'legacy' template from v0.3.0 ##default_message: ## title: '{{ template "legacy.title" . }}' ## text: '{{ template "legacy.content" . }}' ### Targets, previously was known as "profiles" targets: webhook: url: 'https://oapi.dingtalk.com/robot/send?access_token=????相對應(yīng)的token?????' # secret for signature secret: '相對應(yīng)的secrt'
然后創(chuàng)建報警的模板格式
prometheus/alert/dingtalk.tmpl
{{ define "__subject" }} [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ end }} {{ define "__alert_list" }}{{ range . }} --- {{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }} 告警狀態(tài):{{ .Status }} 告警級別:{{ .Labels.severity }} 告警類型:{{ .Labels.alertname }} 告警主機:{{ .Labels.instance }} 告警詳情:{{ .Annotations.description }} 告警時間:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }} {{ end }}{{ end }} {{ define "__resolved_list" }}{{ range . }} --- {{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }} 告警狀態(tài):{{ .Status }} 告警級別:{{ .Labels.severity }} 告警類型:{{ .Labels.alertname }} 告警主機:{{ .Labels.instance }} 告警詳情:{{ .Annotations.description }} 告警時間:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }} 恢復(fù)時間:{{ (.EndsAt.Add 28800e9).Format "2023-01-01 10:00:00" }} {{ end }}{{ end }} {{ define "default.title" }} {{ template "__subject" . }} {{ end }} {{ define "default.content" }} {{ if gt (len .Alerts.Firing) 0 }} **Prometheus故障告警** {{ template "__alert_list" .Alerts.Firing }} --- {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} **Prometheus故障恢復(fù)** {{ template "__resolved_list" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }} {{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }} {{ template "default.title" . }} {{ template "default.content" . }}
四、運行docker-compose
然后運行docker-compose。所有的容器和配置都會啟動
docker-compose up -d
正常所有的容器都會拉起來,如果遇到狀態(tài)為restarting,可能有問題,需要docker logs查看下具體報錯信息,相對應(yīng)解決。
到此這篇關(guān)于docker-compose搭建prometheus+grafana+釘釘告警的文章就介紹到這了,更多相關(guān)docker compose搭建promtheus 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker File創(chuàng)建鏡像失敗ERROR [3/4] RUN yum&nbs
文章描述了在使用DockerFile創(chuàng)建基于CentOS Linux 8的鏡像時遇到的問題,即無法下載vim軟件包的元數(shù)據(jù),問題的原因是CentOS Linux 8的AppStream倉庫沒有可用的URL,為了解決這個問題,作者建議將CentOS版本修改為7,因為CentOS Linux 7的AppStream倉庫通常有可用的URL2024-11-11docker使用alpine構(gòu)建jdk21鏡像的詳細步驟
這篇文章主要給大家介紹了關(guān)于docker使用alpine構(gòu)建jdk21鏡像的詳細步驟,鏡像中包含了應(yīng)用程序所需要的運行環(huán)境,函數(shù)庫,配置,以及應(yīng)用本身等各種文件,這些文件分層打包而成,需要的朋友可以參考下2024-03-03淺談Docker運行Tensorboard和jupyter的方法
本篇文章主要介紹了淺談Docker 運行Tensorboard 和 jupyter的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03