Prometheus 监控域名和consul服务实现alertmanager钉钉告警

Prometheus 监控域名和consul服务实现alertmanager钉钉告警

1. 目的

详细说明如何配置 Prometheus 监控系统,以监控域名和 Consul 服务,并通过 Alertmanager 实现钉钉告警通知。通过实现这一配置:

  • 实时监控关键业务域名和服务的健康状态。
  • 在出现问题时及时通过钉钉接收到告警通知,从而快速响应和处理潜在问题。

2. 背景

Prometheus 是一个开源的系统监控和警报工具包,能够收集和存储时序数据,支持丰富的查询语言和强大的告警功能。Alertmanager 是 Prometheus 的告警管理组件,用于处理告警通知、分组和路由。

钉钉是一款企业级通讯工具,提供了强大的通知功能。将 Prometheus 和 Alertmanager 与钉钉集成,可以实现自动化的告警通知,提高故障响应效率。

一般consul报错可能是项目上线时候会报错,所以需要告警到开发,使用邮箱的话就很不方便,使用钉钉告警的消息通知就很方便随时查看,但是网上的帖子在配置上都有很多问题,尤其是自定义模板的时候,这里花了很长的时间调整,也是借鉴的网上其他友友的帖子做的,所以我觉得需要记录一下

3. 配置步骤

3.1 Prometheus 配置

3.1.1 配置域名监控

blackbox-exporter同于监控域名和端口,这个的部署就不写了网上很多很简单现在安装启动就行了

在 Prometheus 配置文件(prometheus.yml)中添加域名监控的 job 配置:

bash 复制代码
- job_name: 'blackbox-exporter-http-api'
  metrics_path: /probe
  params:
    module: [http_2xx]
    company: [Huaperfect]
    valid_http_statuses: []
  static_configs:
    - targets:
      - https://api.aoligei.com #域名按自己需求
  relabel_configs:	#是 Prometheus 配置中用于调整和重新标记目标(targets)元数据的一个部分。允许你在数据收集和存储之前,修改或者添加标签。
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: 172.26.28.140:9115 #最好用内网的
3.1.2 配置 Consul 服务监控

consul的和

在 Prometheus 配置文件中添加 Consul 服务监控的 job 配置:

复制代码
- job_name: "consul-exporter"
  static_configs:
    - targets: ["172.26.28.156:9107"]
  relabel_configs:	
    - source_labels: [__address__]
      target_label: instance

3.2 Prometheus 告警规则

3.2.1 域名监控告警规则

这块有一个处理,这个api监控的域名是后端接口调用域名没有默认页和默认目录,但是需要监控证书和5xx的服务器端错误,监控指标是随便写的,可以去Prometheus上找一下自己需要的指标,可以使用and或者or

在 Prometheus 告警规则配置文件中添加域名监控的告警规则:

复制代码
groups:
- name: alertmanager
  rules:
  - alert: DomainDown
    expr: probe_success{job="blackbox-exporter-http-api"} == 502 or probe_success{job="blackbox-exporter-http-api"} == 503
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "域名 {{ $labels.instance }} 访问失败"
      description: "域名 {{ $labels.instance }} 监控返回失败状态。"
3.2.2 Consul 服务监控告警规则

在 Prometheus 告警规则配置文件中添加 Consul 服务监控的告警规则:

复制代码
  rules:
  - alert: consul-exporter-模块严重事故
    expr: |
      (sum by (node,service_name,status) (consul_health_service_status{status="critical"})) == 1
    for: 5s
    labels:
      severity: 严重
      service_name: "{{ $labels.service_name }}"
    annotations:
      summary: "模块出现严重问题,如没有上线通知,请马上检查!"

3.3 Alertmanager 配置

3.3.1 配置钉钉告警通知

在 Alertmanager 配置文件(alertmanager.yml)中配置钉钉告警通知:

复制代码
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 30s
  repeat_interval: 12h
  receiver: 'dingding.webhook1'
  routes:
  - receiver: 'dingding.webhook1'
    match_re:
      alertname: ".*"
receivers:
  - name: 'dingding.webhook1'
    webhook_configs:
    - url: 'http://172.26.28.140:18060/dingtalk/webhook1/send'
      send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

3.4 dingding插件

我用的是prometheus-webhook-dingtalk-2.1.0.linux-amd64这个版本,这块坑挺多,一点点说,下载:

https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

解压啥的就不写了,注意好存放位置即可,要配置模板

bash 复制代码
[root@iZ8vbhz31hkz0xo7zsx0e9Z prometheus]# ls
alertmanager  black_exporter  data  download  logs  prometheus-2.45.4.linux-amd64  prometheus-webhook-dingtalk-2.1.0.linux-amd64  rules  tmpl
[root@iZ8vbhz31hkz0xo7zsx0e9Z prometheus]# pwd
/var/prometheus
#这是我组价的存放位置做个参考,tmpl下面就是dingding模板,rules下面是报警规则,日志和数据库就不用说了

[root@iZ8vbhz31hkz0xo7zsx0e9Z prometheus-webhook-dingtalk-2.1.0.linux-amd64]# ls
config.example.yml  config.yml  contrib  LICENSE  prometheus-webhook-dingtalk
[root@iZ8vbhz31hkz0xo7zsx0e9Z prometheus-webhook-dingtalk-2.1.0.linux-amd64]# pwd
/var/prometheus/prometheus-webhook-dingtalk-2.1.0.linux-amd64
# 这个config.yml文件是复制的config.example.yml,改个名字就行了,看看里面内容知道都是干啥的就都删除了即可,复制我下面的就行,就是调用模板和机器人的
bash 复制代码
templates:
  - /var/prometheus/tmpl/dingtalk-templates.tmpl
default_message:
  #title: '{{ template "legacy.title" . }}'
  text: '{{ template "email.to.message" . }}'
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxbbecxxxxxxxxxxxxxx #添加机器人就看到了
    secret: SExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa1fa6cxxxxxxxxxx #这个就是机器人的加签秘钥

3.5 告警模板

告警通知模板(email.to.message)可以根据实际需要进行调整:

复制代码
{{ define "email.to.message" }}

{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts.Firing -}}
<font color=#FF0000>=========  **监控告警** ========= </font>

**告警名称:**    {{ $alert.Labels.alertname }}

**告警级别:**    {{ $alert.Labels.severity | default "未知" }} 级
<br>
{{- if $alert.Labels.service_name }}
**告警资源:**    {{ $alert.Labels.service_name }}  <!-- 显示 Consul 服务名称 -->#空行别删,要不显示不换行,用<br>也行,这里判断是因为资源显示的域名和consul服务名称的标签不一样,还有其他的也可以在加,总之这个语法很简单,需要啥自己加
{{- else if $alert.Labels.instance }}
**告警资源:**    {{ $alert.Labels.instance }}  <!-- 显示域名或端口 -->
{{- else }}
**告警资源:**    未知资源
{{- end }}

**告警详情:**    {{ $alert.Annotations.summary }}

**故障时间:**    {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

<hr>  <!-- 增加分隔符 -->

{{ end }}{{ end }}

{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts.Resolved -}}
<font color=#008000>=========  **告警恢复** ========= </font>
<br>
{{- if $alert.Labels.service_name }}
**告警资源:**    {{ $alert.Labels.service_name }}

{{- else if $alert.Labels.instance }}
**告警资源:**    {{ $alert.Labels.instance }}

{{- else }}
**告警资源:**    未知资源
{{- end }}


**告警名称:**    {{ $alert.Labels.alertname }}

**告警级别:**    {{ $alert.Labels.severity }}

**故障时间:**    {{ ($alert.StartsAt.Add 28800e9).Format "2013-02-02 10:04:05" }}#这时间只是一个格式,不用改

**恢复时间:**    {{ ($alert.EndsAt.Add 28800e9).Format "2013-02-02 16:04:05" }}<br>

<hr>  <!-- 增加分隔符 -->

{{ end }}{{ end }}

{{ end }}

4. 总结

通过以上步骤,我们完成了 Prometheus 的域名和 Consul 服务监控配置,并实现了 Alertmanager 的钉钉告警通知。这个配置可以确保在域名或 Consul 服务出现问题时,能够及时收到告警通知,并提供详细的告警信息,帮助快速响应和处理问题。

相关推荐
虚无境2 天前
如何编写一个SpringBoot项目告警推送的Starter
java·prometheus·webhook
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes