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 配置:

- 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

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

[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,改个名字就行了,看看里面内容知道都是干啥的就都删除了即可,复制我下面的就行,就是调用模板和机器人的
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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值