翼度科技»论坛 云主机 服务器技术 查看内容

docker-compose搭建prometheus+grafana+钉钉告警

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
前言:

本文将介绍使用docker-compose部署搭建promtheus监控容器、主机、服务等相关状态;
配合granfana面板构建监控大屏;
由于grafana的报警不是很友好,使用dingtalk,配合altermanager,实现钉钉报警。

一、编写docker-compose(开门见山)

docker环境搭建不再介绍,网上已经一大堆。
首先介绍一下需要部署的组件:

  • prometheus:监控核心组件
  • cadvisor:用于获取docker容器的指标
  • node-exporter :用户获取服务器的指标
  • grafana:监控图表好用的可视化组件
  • alertmanager:告警组件
  • dingtalk:alert告警不支持钉钉,需要借助dingtalk插件
首先创建一个prometheus目录,用来放docker-compose文件已经集群中需要挂载的配置文件。
在prometheus下面创建两个目录
prome:用来存放prometheus相关配置文件
alert:用来存放报警相关配置文件
直接上docker-compose.yml文件
  1. version: '2'
  2. networks:
  3.     monitor:
  4.         driver: bridge
  5. services:
  6.     prometheus:
  7.         image: prom/prometheus
  8.         container_name: prometheus
  9.         hostname: prometheus
  10.         restart: always
  11.         command:
  12.           - '--config.file=/etc/prometheus/prometheus.yml'
  13.           - '--web.enable-lifecycle'
  14.           - '--storage.tsdb.retention.time=30d'
  15.         volumes:
  16.             - ./prome:/etc/prometheus
  17.         ports:
  18.             - "29011:9090"
  19.         networks:
  20.             - monitor
  21.     alertmanager:
  22.         image: prom/alertmanager
  23.         container_name: alertmanager
  24.         hostname: alertmanager
  25.         restart: always
  26.         volumes:
  27.             - /home/docker/prometheus/alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml
  28.         ports:
  29.             - "29012:9093"
  30.         environment:
  31.           - TZ=Asia/Shanghai
  32.         networks:
  33.             - monitor
  34.     grafana:
  35.         image: grafana/grafana
  36.         container_name: grafana
  37.         hostname: grafana
  38.         restart: always
  39.         ports:
  40.             - "29013:3000"
  41.         networks:
  42.             - monitor
  43.     node-exporter:
  44.         image: quay.io/prometheus/node-exporter
  45.         container_name: node-exporter
  46.         hostname: node-exporter
  47.         restart: always
  48.         ports:
  49.             - "29014:9100"
  50.         networks:
  51.             - monitor
  52.     cadvisor:
  53.         image: google/cadvisor:latest
  54.         container_name: cadvisor
  55.         hostname: cadvisor
  56.         restart: always
  57.         volumes:
  58.             - /:/rootfs:ro
  59.             - /var/run:/var/run:rw
  60.             - /sys:/sys:ro
  61.             - /home/docker/:/var/lib/docker:ro
  62.         ports:
  63.             - "29015:8080"
  64.         networks:
  65.             - monitor
  66.     dingtalk:
  67.         image: timonwong/prometheus-webhook-dingtalk
  68.         container_name: dingtalk
  69.         hostname: dingtalk
  70.         restart: always
  71.         volumes:
  72.           - ./alert/config.yml:/etc/prometheus-webhook-dingtalk/config.yml
  73.           - ./alert/dingtalk.tmpl:/opt/dingtalk/template/dingtalk.tmpl
  74.         ports:
  75.           - "29016:8060"
  76.         environment:
  77.           - TZ=Asia/Shanghai
  78.         networks:
  79.           - monitor
复制代码
二、prometheus相关配置文件

注:以下文件地址及命令均为自己随机命名,大家可以自行命令,对应好配置文件中的地址引用即可
1、prometheus/prome/promethues.yml文件是prometheus的配置文件,用来配置一些组件及监控信息,简单如下,需要将ip替换成自己实际的ip地址。
  1. global:
  2.   scrape_interval:     15s
  3.   evaluation_interval: 15s
  4. alerting:
  5.   alertmanagers:
  6.   - static_configs:
  7.     - targets: ['ip:29012']
  8. rule_files:
  9.   - "/etc/prometheus/rules/*.rules"
  10. scrape_configs:
  11.   - job_name: 'prometheus'
  12.     static_configs:
  13.     - targets: ['ip:29011']
  14.   - job_name: 'cadvisor'
  15.     static_configs:
  16.     - targets: ['ip:29015']
复制代码
2、在prometheus中定义报警规则,达到报警条件,就会通知alertmanager组件进行报警
prometheus/prome/rules/promethues.yml
  1. groups:
  2. - name: 主机存活告警  # 命名
  3.   rules:
  4.   - alert: 主机存活告警 # 命名
  5.     expr: up == 0 # 表达式,分析指标判定告警
  6.     for: 60s  # 触发告警持续时间
  7.     labels:   # 自定义告警标签
  8.       severity: warning
  9.     annotations:   # 告警内容注释,根据需要制定
  10.       summary: "{{ $labels.instance }} 宕机超过1分钟!"
  11. - name: 主机内存使用率告警
  12.   rules:
  13.   - alert: 主机内存使用率告警
  14.     expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
  15.     for: 1m
  16.     labels:
  17.       severity: warning
  18.     annotations:
  19.       summary: "内存利用率大于80%, 实例: {{ $labels.instance }},当前值:{{ $value }}%"
  20. - name: 主机CPU使用率告警
  21.   rules:
  22.   - alert: 主机CPU使用率告警
  23.     expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 70
  24.     for: 1m
  25.     labels:
  26.       severity: warning
  27.     annotations:
  28.       summary: "CPU近10分钟使用率大于70%, 实例: {{ $labels.instance }},当前值:{{ $value }}%"
  29. - name: 主机磁盘使用率告警
  30.   rules:
  31.   - alert: 主机磁盘使用率告警
  32.     expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80
  33.     for: 1m
  34.     labels:
  35.       severity: warning
  36.     annotations:
  37.       summary: "磁盘使用率大于80%, 实例: {{ $labels.instance }},当前值:{{ $value }}%"
复制代码
三、报警模块相关配置文件


1、alertmanager相关

alertmanager是prometheus依赖的报警组件,所有的报警消息均是依赖alertmanager进行报警。
由于要配置钉钉报警,默认alertmanager不支持钉钉,需要引用dingtalk组件,以下配置文件中需要配置dingtalkd的url        prometheus/alert/alertmanager.yml
  1. global:
  2.   # 每5分钟检查一次是否恢复
  3.   resolve_timeout: 5m
  4. # route用来设置报警的分发策略
  5. route:
  6.   # 采用哪个标签来作为分组依据
  7.   group_by: ['alertname']
  8.   # 组告警等待时间。也就是告警产生后等待30s,如果有同组告警一起发出
  9.   group_wait: 30s
  10.   # 两组告警的间隔时间
  11.   group_interval: 30s
  12.   # 重复告警的间隔时间,减少相同告警的发送频率
  13.   repeat_interval: 1h
  14.   # 设置默认接收人
  15.   receiver: 'webhook'
  16. receivers:
  17. - name: 'webhook'
  18.   webhook_configs:
  19.   - url: 'http://ip:29016/dingtalk/webhook/send'
  20.     send_resolved: true
复制代码
2、 dingtalk相关

首先要添加钉钉报警机器人:
在钉钉上创建一个报警群,打开群设置,选择机器人。

添加一个自定义的机器人

选择加签,创建完成后,会生成机器人的接口,复制保存后用。

回到dingtalk组件中,配置相对应的钉钉机器人的接口。
prometheus/alert/config.yml
  1. ## Request timeout
  2. ## timeout: 5s
  3. ### Uncomment following line in order to write template from scratch (be careful!)
  4. ##no_builtin_template: true
  5. ### Customizable templates path
  6. #templates:
  7. #- '/opt/dingtalk/template/dingtalk.tmpl'
  8. ### You can also override default template using `default_message`
  9. ### The following example to use the 'legacy' template from v0.3.0
  10. ##default_message:
  11. ##  title: '{{ template "legacy.title" . }}'
  12. ##  text: '{{ template "legacy.content" . }}'
  13. ### Targets, previously was known as "profiles"
  14. targets:
  15.   webhook:
  16.     url: 'https://oapi.dingtalk.com/robot/send?access_token=????相对应的token?????'
  17.     # secret for signature
  18.     secret: '相对应的secrt'
复制代码
然后创建报警的模板格式
prometheus/alert/dingtalk.tmpl
  1. {{ define "__subject" }}
  2. [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
  3. {{ end }}
  4. {{ define "__alert_list" }}{{ range . }}
  5. ---
  6. {{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
  7. 告警状态:{{ .Status }}
  8. 告警级别:{{ .Labels.severity }}
  9. 告警类型:{{ .Labels.alertname }}
  10. 告警主机:{{ .Labels.instance }}
  11. 告警详情:{{ .Annotations.description }}
  12. 告警时间:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
  13. {{ end }}{{ end }}
  14. {{ define "__resolved_list" }}{{ range . }}
  15. ---
  16. {{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
  17. 告警状态:{{ .Status }}
  18. 告警级别:{{ .Labels.severity }}
  19. 告警类型:{{ .Labels.alertname }}
  20. 告警主机:{{ .Labels.instance }}
  21. 告警详情:{{ .Annotations.description }}
  22. 告警时间:{{ (.StartsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
  23. 恢复时间:{{ (.EndsAt.Add 28800e9).Format "2023-01-01 10:00:00" }}
  24. {{ end }}{{ end }}
  25. {{ define "default.title" }}
  26. {{ template "__subject" . }}
  27. {{ end }}
  28. {{ define "default.content" }}
  29. {{ if gt (len .Alerts.Firing) 0 }}
  30. **Prometheus故障告警**
  31. {{ template "__alert_list" .Alerts.Firing }}
  32. ---
  33. {{ end }}
  34. {{ if gt (len .Alerts.Resolved) 0 }}
  35. **Prometheus故障恢复**
  36. {{ template "__resolved_list" .Alerts.Resolved }}
  37. {{ end }}
  38. {{ end }}
  39. {{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
  40. {{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
  41. {{ template "default.title" . }}
  42. {{ template "default.content" . }}
复制代码
四、运行docker-compose

然后运行docker-compose。所有的容器和配置都会启动
  1. docker-compose up -d
复制代码
正常所有的容器都会拉起来,如果遇到状态为restarting,可能有问题,需要docker logs查看下具体报错信息,相对应解决。
到此这篇关于docker-compose搭建prometheus+grafana+钉钉告警的文章就介绍到这了,更多相关docker compose搭建promtheus 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/server/292988old.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具