苏州市建设工程质量监督站网站,创建5a 网站建设要求,电脑网页设计,58找工作求职招聘前言#xff1a;
本文将介绍使用docker-compose部署搭建promtheus监控容器、主机、服务等相关状态#xff1b;
配合granfana面板构建监控大屏#xff1b;
由于grafana的报警不是很友好#xff0c;使用dingtalk#xff0c;配合altermanager#xff0c;实现钉钉报警。
…前言
本文将介绍使用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文件
version: 2networks:monitor:driver: bridgeservices:prometheus:image: prom/prometheuscontainer_name: prometheushostname: prometheusrestart: alwayscommand:- --config.file/etc/prometheus/prometheus.yml- --web.enable-lifecycle- --storage.tsdb.retention.time30dvolumes:- ./prome:/etc/prometheusports:- 29011:9090networks:- monitoralertmanager:image: prom/alertmanagercontainer_name: alertmanagerhostname: alertmanagerrestart: alwaysvolumes:- /home/docker/prometheus/alert/alertmanager.yml:/etc/alertmanager/alertmanager.ymlports:- 29012:9093environment:- TZAsia/Shanghainetworks:- monitorgrafana:image: grafana/grafanacontainer_name: grafanahostname: grafanarestart: alwaysports:- 29013:3000networks:- monitornode-exporter:image: quay.io/prometheus/node-exportercontainer_name: node-exporterhostname: node-exporterrestart: alwaysports:- 29014:9100networks:- monitorcadvisor:image: google/cadvisor:latestcontainer_name: cadvisorhostname: cadvisorrestart: alwaysvolumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /home/docker/:/var/lib/docker:roports:- 29015:8080networks:- monitordingtalk:image: timonwong/prometheus-webhook-dingtalkcontainer_name: dingtalkhostname: dingtalkrestart: alwaysvolumes:- ./alert/config.yml:/etc/prometheus-webhook-dingtalk/config.yml- ./alert/dingtalk.tmpl:/opt/dingtalk/template/dingtalk.tmplports:- 29016:8060environment:- TZAsia/Shanghainetworks:- monitor
二、prometheus相关配置文件
注以下文件地址及命令均为自己随机命名大家可以自行命令对应好配置文件中的地址引用即可
1、prometheus/prome/promethues.yml文件是prometheus的配置文件用来配置一些组件及监控信息简单如下需要将ip替换成自己实际的ip地址。
global:scrape_interval: 15sevaluation_interval: 15salerting:alertmanagers:- static_configs:- targets: [ip:29012]rule_files:- /etc/prometheus/rules/*.rules
scrape_configs:- job_name: prometheusstatic_configs:- targets: [ip:29011]- job_name: cadvisorstatic_configs:- targets: [ip:29015]
2、在prometheus中定义报警规则达到报警条件就会通知alertmanager组件进行报警 prometheus/prome/rules/promethues.yml
groups:
- name: 主机存活告警 # 命名rules:- alert: 主机存活告警 # 命名expr: up 0 # 表达式分析指标判定告警for: 60s # 触发告警持续时间labels: # 自定义告警标签severity: warningannotations: # 告警内容注释根据需要制定summary: {{ $labels.instance }} 宕机超过1分钟- name: 主机内存使用率告警rules:- alert: 主机内存使用率告警expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 80for: 1mlabels:severity: warningannotations:summary: 内存利用率大于80%, 实例: {{ $labels.instance }}当前值{{ $value }}%- name: 主机CPU使用率告警rules:- alert: 主机CPU使用率告警expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{modeidle}[1m]) )) * 100 70for: 1mlabels:severity: warningannotations: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 80for: 1mlabels:severity: warningannotations:summary: 磁盘使用率大于80%, 实例: {{ $labels.instance }}当前值{{ $value }}%
三、报警模块相关配置文件
1、alertmanager相关
alertmanager是prometheus依赖的报警组件所有的报警消息均是依赖alertmanager进行报警。
由于要配置钉钉报警默认alertmanager不支持钉钉需要引用dingtalk组件以下配置文件中需要配置dingtalkd的url prometheus/alert/alertmanager.yml
global:# 每5分钟检查一次是否恢复resolve_timeout: 5m
# route用来设置报警的分发策略
route:# 采用哪个标签来作为分组依据group_by: [alertname]# 组告警等待时间。也就是告警产生后等待30s如果有同组告警一起发出group_wait: 30s# 两组告警的间隔时间group_interval: 30s# 重复告警的间隔时间减少相同告警的发送频率repeat_interval: 1h# 设置默认接收人receiver: webhook
receivers:
- name: webhookwebhook_configs:- url: http://ip:29016/dingtalk/webhook/sendsend_resolved: true
2、 dingtalk相关
首先要添加钉钉报警机器人
在钉钉上创建一个报警群打开群设置选择机器人。 添加一个自定义的机器人 选择加签创建完成后会生成机器人的接口复制保存后用。 回到dingtalk组件中配置相对应的钉钉机器人的接口。 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????相对应的token?????# secret for signaturesecret: 相对应的secrt
然后创建报警的模板格式 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 }}
告警状态{{ .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 }}
告警状态{{ .Status }}
告警级别{{ .Labels.severity }}
告警类型{{ .Labels.alertname }}
告警主机{{ .Labels.instance }}
告警详情{{ .Annotations.description }}
告警时间{{ (.StartsAt.Add 28800e9).Format 2023-01-01 10:00:00 }}
恢复时间{{ (.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故障恢复**
{{ 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 正常所有的容器都会拉起来如果遇到状态为restarting可能有问题需要docker logs查看下具体报错信息相对应解决。