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 服务出现问题时,能够及时收到告警通知,并提供详细的告警信息,帮助快速响应和处理问题。

相关推荐
数巨小码人18 分钟前
Linux常用指令
linux·运维·服务器
Linux运维老纪38 分钟前
Linux之七大难命令(The Seven Difficult Commands of Linux)
linux·运维·服务器·云计算·运维开发
张书名2 小时前
高性能服务器配置经验指南3——安装服务器可能遇到的问题及解决方法
运维·服务器
前进的程序员2 小时前
在Linux驱动开发中使用DeepSeek的方法
linux·运维·服务器·人工智能
Tome--2 小时前
运维面试题01
运维
银河麒麟操作系统2 小时前
【银河麒麟高级服务器操作系统】磁盘只读问题分析
java·linux·运维·服务器·jvm
小鑫仔_x4 小时前
使用 VMware 安装一台 Linux 系统之Centos
linux·运维·centos
hnlucky4 小时前
CentOS 7 系统中,防火墙要怎么使用?
linux·运维·网络·网络安全·centos
Waitccy4 小时前
CentOS 7 磁盘分区详细教程
linux·运维·centos