docker-compose搭建prometheus+grafana+釘釘告警
前言:
本文將介紹使用docker-compose部署搭建promtheus監(jiān)控容器、主機(jī)、服務(wù)等相關(guān)狀態(tài);
配合granfana面板構(gòu)建監(jiān)控大屏;
由于grafana的報(bào)警不是很友好,使用dingtalk,配合altermanager,實(shí)現(xiàn)釘釘報(bào)警。
一、編寫(xiě)docker-compose(開(kāi)門(mén)見(jiàn)山)
docker環(huán)境搭建不再介紹,網(wǎng)上已經(jīng)一大堆。
首先介紹一下需要部署的組件:
- prometheus:監(jiān)控核心組件
- cadvisor:用于獲取docker容器的指標(biāo)
- node-exporter :用戶獲取服務(wù)器的指標(biāo)
- grafana:監(jiān)控圖表好用的可視化組件
- alertmanager:告警組件
- dingtalk:alert告警不支持釘釘,需要借助dingtalk插件
首先創(chuàng)建一個(gè)prometheus目錄,用來(lái)放docker-compose文件已經(jīng)集群中需要掛載的配置文件。
在prometheus下面創(chuàng)建兩個(gè)目錄
prome:用來(lái)存放prometheus相關(guān)配置文件
alert:用來(lái)存放報(bào)警相關(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)配置文件
注:以下文件地址及命令均為自己隨機(jī)命名,大家可以自行命令,對(duì)應(yīng)好配置文件中的地址引用即可
1、prometheus/prome/promethues.yml文件是prometheus的配置文件,用來(lái)配置一些組件及監(jiān)控信息,簡(jiǎn)單如下,需要將ip替換成自己實(shí)際的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中定義報(bào)警規(guī)則,達(dá)到報(bào)警條件,就會(huì)通知alertmanager組件進(jìn)行報(bào)警
prometheus/prome/rules/promethues.yml
groups:
- name: 主機(jī)存活告警 # 命名
rules:
- alert: 主機(jī)存活告警 # 命名
expr: up == 0 # 表達(dá)式,分析指標(biāo)判定告警
for: 60s # 觸發(fā)告警持續(xù)時(shí)間
labels: # 自定義告警標(biāo)簽
severity: warning
annotations: # 告警內(nèi)容注釋?zhuān)鶕?jù)需要制定
summary: "{{ $labels.instance }} 宕機(jī)超過(guò)1分鐘!"
- name: 主機(jī)內(nèi)存使用率告警
rules:
- alert: 主機(jī)內(nèi)存使用率告警
expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
for: 1m
labels:
severity: warning
annotations:
summary: "內(nèi)存利用率大于80%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
- name: 主機(jī)CPU使用率告警
rules:
- alert: 主機(jī)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%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
- name: 主機(jī)磁盤(pán)使用率告警
rules:
- alert: 主機(jī)磁盤(pán)使用率告警
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: "磁盤(pán)使用率大于80%, 實(shí)例: {{ $labels.instance }},當(dāng)前值:{{ $value }}%"
三、報(bào)警模塊相關(guān)配置文件
1、alertmanager相關(guān)
alertmanager是prometheus依賴(lài)的報(bào)警組件,所有的報(bào)警消息均是依賴(lài)alertmanager進(jìn)行報(bào)警。
由于要配置釘釘報(bào)警,默認(rèn)alertmanager不支持釘釘,需要引用dingtalk組件,以下配置文件中需要配置dingtalkd的url prometheus/alert/alertmanager.yml
global:
# 每5分鐘檢查一次是否恢復(fù)
resolve_timeout: 5m
# route用來(lái)設(shè)置報(bào)警的分發(fā)策略
route:
# 采用哪個(gè)標(biāo)簽來(lái)作為分組依據(jù)
group_by: ['alertname']
# 組告警等待時(shí)間。也就是告警產(chǎn)生后等待30s,如果有同組告警一起發(fā)出
group_wait: 30s
# 兩組告警的間隔時(shí)間
group_interval: 30s
# 重復(fù)告警的間隔時(shí)間,減少相同告警的發(fā)送頻率
repeat_interval: 1h
# 設(shè)置默認(rèn)接收人
receiver: 'webhook'
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://ip:29016/dingtalk/webhook/send'
send_resolved: true2、 dingtalk相關(guān)
首先要添加釘釘報(bào)警機(jī)器人:
在釘釘上創(chuàng)建一個(gè)報(bào)警群,打開(kāi)群設(shè)置,選擇機(jī)器人。

添加一個(gè)自定義的機(jī)器人

選擇加簽,創(chuàng)建完成后,會(huì)生成機(jī)器人的接口,復(fù)制保存后用。

回到dingtalk組件中,配置相對(duì)應(yīng)的釘釘機(jī)器人的接口。
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=????相對(duì)應(yīng)的token?????'
# secret for signature
secret: '相對(duì)應(yīng)的secrt'然后創(chuàng)建報(bào)警的模板格式
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 }}
告警級(jí)別:{{ .Labels.severity }}
告警類(lèi)型:{{ .Labels.alertname }}
告警主機(jī):{{ .Labels.instance }}
告警詳情:{{ .Annotations.description }}
告警時(shí)間:{{ (.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 }}
告警級(jí)別:{{ .Labels.severity }}
告警類(lèi)型:{{ .Labels.alertname }}
告警主機(jī):{{ .Labels.instance }}
告警詳情:{{ .Annotations.description }}
告警時(shí)間:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
恢復(fù)時(shí)間:{{ (.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" . }}四、運(yùn)行docker-compose
然后運(yùn)行docker-compose。所有的容器和配置都會(huì)啟動(dòng)
docker-compose up -d
正常所有的容器都會(huì)拉起來(lái),如果遇到狀態(tài)為restarting,可能有問(wèn)題,需要docker logs查看下具體報(bào)錯(cuò)信息,相對(duì)應(yīng)解決。
到此這篇關(guān)于docker-compose搭建prometheus+grafana+釘釘告警的文章就介紹到這了,更多相關(guān)docker compose搭建promtheus 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker File創(chuàng)建鏡像失敗ERROR [3/4] RUN yum&nbs
文章描述了在使用DockerFile創(chuàng)建基于CentOS Linux 8的鏡像時(shí)遇到的問(wèn)題,即無(wú)法下載vim軟件包的元數(shù)據(jù),問(wèn)題的原因是CentOS Linux 8的AppStream倉(cāng)庫(kù)沒(méi)有可用的URL,為了解決這個(gè)問(wèn)題,作者建議將CentOS版本修改為7,因?yàn)镃entOS Linux 7的AppStream倉(cāng)庫(kù)通常有可用的URL2024-11-11
docker配置node項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了docker配置node項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟
這篇文章主要給大家介紹了關(guān)于docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟,鏡像中包含了應(yīng)用程序所需要的運(yùn)行環(huán)境,函數(shù)庫(kù),配置,以及應(yīng)用本身等各種文件,這些文件分層打包而成,需要的朋友可以參考下2024-03-03
淺談Docker運(yùn)行Tensorboard和jupyter的方法
本篇文章主要介紹了淺談Docker 運(yùn)行Tensorboard 和 jupyter的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Mysql 在 Docker 中的時(shí)區(qū)問(wèn)題記錄
Mysql 時(shí)區(qū)一般是跟著系統(tǒng)走的,而在 Docker 中安裝 Mysql 默認(rèn)時(shí)區(qū)是 UTC,下面介紹,創(chuàng)建Docker容器前、后,分別如何設(shè)置 Mysql 時(shí)區(qū),感興趣的朋友跟隨小編一起看看吧2024-07-07

