alertmanger 入门

article/2025/10/4 12:46:37

alertmanger 安装

tags: alertmanager

文章目录

  • alertmanger 安装
    • 1. 简介
    • 2. 安装
      • 2.1 二进制包部署 AlertManager
        • 2.1.1 下载
        • 2.1.2 创建 alertmanager 配置文件
        • 2.1.3 启动
        • 2.1.4 查看状态
      • 2.2 docker 安装
      • 2.3 关联 Prometheus 与 Alertmanager
    • 2. 配置文件说明
    • 3. 配置示例:
      • 3.1 receivers接收
        • 3.1.1 微信接收
        • 3.1.2 邮箱接收
      • 3.2 inhibit_rules抑制
    • 4 告警模板
      • 4.1 微信模板
      • 4.2 邮箱模板
    • 5. alertmanger API
    • 6. amtool 工具

在这里插入图片描述

1. 简介

AlertmanagerPrometheus Server一样均采用Golang实现,并且没有第三方依赖。一般来说我们可以通过以下几种方式来部署Alertmanager:二进制包、容器以及源码方式安装。

2. 安装

2.1 二进制包部署 AlertManager

2.1.1 下载

Alertmanager最新版本的下载地址可以从Prometheus官方网站https://prometheus.io/download/获取。

export VERSION=0.24.0
curl -LO https://github.com/prometheus/alertmanager/releases/download/v$VERSION/alertmanager-$VERSION.darwin-amd64.tar.gz
tar xvf alertmanager-$VERSION.darwin-amd64.tar.gz

2.1.2 创建 alertmanager 配置文件

Alertmanager解压后会包含一个默认的alertmanager.yml配置文件,内容如下所示:

global:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'web.hook'
receivers:
- name: 'web.hook'webhook_configs:- url: 'http://127.0.0.1:5001/'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

Alertmanager的配置主要包含两个部分:路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。

在Alertmanager中可以定义一组接收器,比如可以按照角色(比如系统运维,数据库管理员)来划分多个接收器。接收器可以关联邮件,Slack以及其它方式接收告警信息。
当前配置文件中定义了一个默认的接收者default-receiver由于这里没有设置接收方式,目前只相当于一个占位符。

在配置文件中使用route定义了顶级的路由,路由是一个基于标签匹配规则的树状结构。所有的告警信息从顶级路由开始,根据标签匹配规则进入到不同的子路由,并且根据子路由设置的接收器发送告警。目前配置文件中只设置了一个顶级路由route并且定义的接收器为default-receiver。因此,所有的告警都会发送给default-receiver。

2.1.3 启动

Alermanager会将数据保存到本地中,默认的存储路径为data/。因此,在启动Alertmanager之前需要创建相应的目录:

./alertmanager

用户也在启动Alertmanager时使用参数修改相关配置。--config.file用于指定alertmanager配置文件路径,--storage.path用于指定数据存储路径。

2.1.4 查看状态

Alertmanager启动后可以通过9093端口访问,http://192.168.211.50:9093
在这里插入图片描述

2.2 docker 安装

$ vim /root/alertmanager/config.yml
global:# resolve_timeout:解析超时时间resolve_timeout: 5m# smtp_smarthost: 使用email打开服务配置smtp_smarthost: 'smtp.126.com:465'# smtp_from:指定通知报警的邮箱smtp_from: 'xiangsikai@126.com'# smtp_auth_username:邮箱用户名smtp_auth_username: 'xiangsikai@126.com'# smtp_auth_password:授权密码smtp_auth_password: 'xsk123'# smtp_require_tls:是否启用tlssmtp_require_tls: false# route标记:告警如何发送分配
route:# group_by:采用哪个标签作为分组的依据group_by: ['alertname']# group_wait:分组等待的时间group_wait: 10s# group_interval:上下两组发送告警的间隔时间group_interval: 10s# repeat_interval:重复发送告警时间。默认1hrepeat_interval: 1m# receiver 定义谁来通知报警receiver: 'mail'# receiver标记:告警接受者 
receivers:
# name:报警来源自定义名称
- name: 'mail'# email_configs:通过邮箱发送报警email_configs:# to:指定接收端email- to: 'xiangsikai@126.com'# inhibit_rules标记:降低告警收敛,减少报警,发送关键报警
#inhibit_rules:
#  - source_match:
#      severity: 'critical'
#    target_match:
#      severity: 'warning'
#    equal: ['alertname', 'dev', 'instance']

svEdlmtIA-6joL79FCaL7ZYO27lYt_D6DbDgm6P_128

运行容器


$ docker run -d -p 9093:9093 --name alertmanager docker.io/prom/alertmanager:latest
$ docker run -d -p 9093:9093 -v /root/alertmanager/config.yml:/etc/alertmanager/config.yml --name alertmanager docker.io/prom/alertmanager:latest #将配置挂载出来

2.3 关联 Prometheus 与 Alertmanager

在Prometheus的架构中被划分成两个独立的部分。Prometheus负责产生告警,而Alertmanager负责告警产生后的后续处理。因此Alertmanager部署完成后,需要在Prometheus中设置Alertmanager相关的信息。
编辑Prometheus配置文件prometheus.yml,并添加以下内容

alerting:alertmanagers:- static_configs:- targets: ['localhost:9093']

重启Prometheus服务,成功后,可以从http://192.168.211.50:9090/config查看alerting配置是否生效。
此时,再次尝试手动拉高系统CPU使用率:

cat /dev/zero>/dev/null

等待Prometheus告警进行触发状态:
在这里插入图片描述
查看Alertmanager UI此时可以看到Alertmanager接收到的告警信息。
在这里插入图片描述

2. 配置文件说明

Alertmanager主要负责对Prometheus产生的告警进行统一处理,因此在Alertmanager配置中一般会包含以下几个主要部分:
全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容;

  • 模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等;
  • 告警路由(route):根据标签匹配,确定当前告警应该如何处理;
  • 接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,
  • Slack或者Webhook等,接收人一般配合告警路由使用;
  • 抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生

global:

  • smtp_smarthost、smtp_from、smtp_auth_username、smtp_auth_password用于设置
  • smtp邮件的地址及用户信息
  • hipchat_auth_token与安全性认证有关
  • resolve_timeout,该参数定义了当Alertmanager持续多长时间未接收到告警后标记告警状态为resolved(已解决)。该参数的定义可能会影响到告警恢复通知的接收时间,读者可根据自己的实际场景进行定义,其默认值为5分钟。

templates:

  • 指定告警信息展示的模版

route:可存在多个Route,一个Route有多个Group,一个Group有多个Alert

  • group_by:指定所指定的维度对告警进行分组
  • group_wait:指定每组告警发送等待的时间,根据resolve_timeout判断Alert是否解决,然后发送通知
  • group_interval:指定告警调度的时间间隔,判断Alert是否解决,当上次发送通知到现在的间隔大于repeat_interval或者Group有更新时会发送通知
  • repeat_interval:在连续告警触发的情况下,重复发送告警的时间间隔

routes

  • match_re:定义告警接收者的匹配方式
  • service:定义匹配的方式,纬度service值以foo1或foo2或baz开始/结束时表示匹配成功
  • receiver:定义了匹配成功的的情况下的接受者

receiver

  • 指定告警默认的接受者

receivers

  • 定义了具体的接收者,也就是告警具体的方式方式

inhibit_rules

  • 定义告警的抑制条件,过滤不必要的告警

3. 配置示例:

3.1 receivers接收

3.1.1 微信接收

receivers:
- name: 'wechat'wechat_configs:- send_resolved: trueapi_secret: 'svEdlmtIA-6joL79FCaL7ZYO27lYt_D6DbDgm6P_128'corp_id: 'ww906049af7aae6271'api_url: "https://qyapi.weixin.qq.com/cgi-bin/"to_party: "1"to_user: '@all'agent_id: "1000002"

3.1.2 邮箱接收

templates:[ - <filepath> ... ]
receivers:
- name: 'mengyuan'email_configs:- to: 'xxx@xxx.com'html: '{{ template "email.mengyuan.html" . }}'headers: { Subject: "[WARN] 报警邮件test" }

3.2 inhibit_rules抑制

当触发'物理节点夯机或宕机'告警的时候,'监控客户端状态异常告警'会被抑制。

inhibit_rules:- source_match:alertname: '物理节点宕机'target_match:alertname: '监控客户端状态异常告警'equal: ['ip']- source_match:alertname: '物理节点夯机或宕机'target_match:alertname: '服务组件端口状态异常'equal: ['ip']

alertname是从何而来?
来自prometheus配置告警略文件blackbox.rules.yaml

  - alert: 物理节点夯机或宕机expr: probe_success{group=~"test"} == 0for: 2mlabels:severity: "警告"annotations:info: |{{ with query "time()+8*3600" }}{{ . | first | value | humanizeTimestamp | reReplaceAll "(.+)\\.(.*)" "$1" }} {{ end }} {{$labels.group}}{{$labels.ip}}服务器夯机或宕机summary: "请联系管理员登陆主机进行检测,判断是人为操作原因,还是主机故障。"

4 告警模板

4.1 微信模板

test1.tmpl

{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
=====================
{{- end }}
===告警详情===
告警详情: {{ $alert.Annotations.message }}
故障时间: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
===参考信息===
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例ip: {{ $alert.Labels.instance }};{{- end -}}
{{- if gt (len $alert.Labels.namespace) 0 -}}故障实例所在namespace: {{ $alert.Labels.namespace }};{{- end -}}
{{- if gt (len $alert.Labels.node) 0 -}}故障物理机ip: {{ $alert.Labels.node }};{{- end -}}
{{- if gt (len $alert.Labels.pod_name) 0 -}}故障pod名称: {{ $alert.Labels.pod_name }}{{- end }}
=====================
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
=====================
{{- end }}
===告警详情===
告警详情: {{ $alert.Annotations.message }}
故障时间: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
恢复时间: {{ $alert.EndsAt.Format "2006-01-02 15:04:05" }}
===参考信息===
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例ip: {{ $alert.Labels.instance }};{{- end -}}
{{- if gt (len $alert.Labels.namespace) 0 -}}故障实例所在namespace: {{ $alert.Labels.namespace }};{{- end -}}
{{- if gt (len $alert.Labels.node) 0 -}}故障物理机ip: {{ $alert.Labels.node }};{{- end -}}
{{- if gt (len $alert.Labels.pod_name) 0 -}}故障pod名称: {{ $alert.Labels.pod_name }};{{- end }}
=====================
{{- end }}
{{- end }}
{{- end }}

test2.tmpl

{{ define "wechat.default.message" }}
{{ range .Alerts }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
{{ end }}
{{ end }}

4.2 邮箱模板

第一个

模板文件email.tmpl
{{ define "email.mengyuan.html" }}
<table><tr><td>报警名</td><td>开始时间</td></tr>{{ range $i, $alert := .Alerts }}<tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>{{ end }}
</table>
{{ end }}

第二个

{{ define "test.html" }}
<table border="1"><tr><td>报警项</td><td>实例</td><td>报警阀值</td><td>开始时间</td></tr>{{ range $i, $alert := .Alerts }}<tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ index $alert.Labels "instance" }}</td><td>{{ index $alert.Annotations "value" }}</td><td>{{ $alert.StartsAt }}</td></tr>{{ end }}
</table>
{{ end }}

5. alertmanger API

/api/v1/alerts
/api/v1/status
/api/v1/silences
/silence/{silenceID}  get delete
/api/v2/receivers/alerts/groups
#查询已有的告警,只要客户仍然处于活动状态(通常约为30秒到3分钟),客户就会不断重新发送警报
curl http://180.76.154.185:9093/api/v1/alerts
[{"labels": {"<labelname>": "<labelvalue>",...},"annotations": {"<labelname>": "<labelvalue>",},"startsAt": "<rfc3339>","endsAt": "<rfc3339>"  #endsAt只有在警报的结束时间已知时才被设置。否则,它将被设置为自上次收到警报以来的可配置超时时间。"generatorURL": "<generator_url>" #该generatorURL字段是唯一的后向链接,用于标识客户端中此警报的原因实体。},...
]#生成一个告警
$ curl -H "Content-Type: application/json" -d ‘[{"labels":{"alertname":"TestAlert1"}}]’ http://180.76.154.185:9093/api/v1/alerts#抑制一个告警
$ curl -H "Content-Type: application/json" -X POST -d '{"comment": "test1","createdBy": "test1","endsAt": "2019-02-20T18:00:59.46418637Z","matchers": [{"isRegex": false,"name": "severity","value": "critical"},{"isRegex": false,"name": "job","value": "prometheus"},{"isRegex": false,"name": "instance","value": "localhost:9090"},{"isRegex": false,"name": "alertname","value": "InstanceDown"}]}' http://alerts.example.org:9093/api/v1/silences删除silences
$ curl -X DELETE http://alerts.example.org:9093/api/v1/silence/<silenceId>

6. amtool 工具

命令行可以对告警进行抑制、查询等操作。

amtool check-config /monitor/alertmanager/config/alertmanager/alertmanager.yml
#查看当前已触发的报警
amtool alert --alertmanager.url="http://127.0.0.1:9093"#查看所有沉默
amtool silence query --alertmanager.url="http://127.0.0.1:9093"#查看匹配的沉默
amtool silence query alertname=PodMemory  --alertmanager.url="http://127.0.0.1:9093"
#沉默添加,如果comment_required设置为true,不写comment的话会提交不上
#alertname就是Prometheus那里设置的alert
#--start 生效时间
#--end   结束时间
amtool silence add alertname="PodMemory" container_name="elasticsearch" --start="2019-01-02T15:04:05+08:00" --end="2019-01-02T15:05:05+08:00" --comment="test"  -a "wuchen" --alertmanager.url="http://127.0.0.1:9093"#更新
amtool silence update --end="2019-02-02T15:05:05+08:00"  6cac2b37-4ce2-4af5-8305-9f47850d72a4  --alertmanager.url="http://127.0.0.1:9093"#docker官方镜像,默认数据源保存在/alertmanager,所以要挂载数据盘,不然容器重启一切都白做#因为查看沉默列表的时候,生效时间输出的不完整,所以可以
amtool silence query -o json --alertmanager.url="http://127.0.0.1:9093"
#还可以导出json数据
amtool silence query -o json PodMemory > 1.json --alertmanager.url="http://127.0.0.1:9093"#沉默解除
amtool silence expire 8188b168-1332-4398-83a5-a9df4263c60d --alertmanager.url="http://127.0.0.1:9093"#解除所有沉默
amtool silence expire $(amtool silence query -q --alertmanager.url="http://127.0.0.1:9093") --alertmanager.url="http://127.0.0.1:9093"

参考:

  • Prometheus book 告警处理
  • prometheus+grafana+alertmanager 安装配置文档
  • Alertmanager 安装与配置

http://chatgpt.dhexx.cn/article/pG1u2D1x.shtml

相关文章

alertmanager的使用

alertmanager的使用 一、Alertanager的安装1、下载2、安装3、启动4、alertmanager和prometheus的整合 二、告警分组1、告警规则2、alertmanager.yml配置3、分组相关的alertmanager的配置4、邮件发送结果 三、告警抑制1、告警规则2、alertmanager.yml 配置抑制规则3、邮件发送结…

JavaScript window.alert

文章目录 相关背景HTML中嵌入JS的第一种方式实现代码图是结果在HTML中插入JS的第二种方式实现代码实现结果HTML中引入JS的第三种方式实现代码实现结果 相关背景 HTML中嵌入JS的第一种方式 实现代码 <!DOCTYPE html> <html lang"en"> <head><me…

Window alert() 方法

一 定义和用法 alert()方法用于显示带有一条指定消息和一个确认按钮的警告框。 二 语法 alert(message) 三 代码 <html> <head> <title>警告对话框的应用</title> <meta http-equiv"Content-Type" content"text/html; charsetgb2312…

html中js alert函数,javascript的alert是什么

alert是javascript中的一个内置函数&#xff0c;用于显示带有一条指定消息和一个“确认”按钮的警告框&#xff1b;语法“alert("文本")”。警告框经常用于确保用户可以得到某些信息&#xff1b;当警告框出现后&#xff0c;用户需要点击确定按钮才能继续进行操作。 本…

AlertManager 简介与使用

简介 之前我们学习 Prometheus 的时候就了解到 Prometheus 包含一个报警模块&#xff0c;就是我们的 AlertManager&#xff0c;Alertmanager 主要用于接收 Prometheus 发送的告警信息&#xff0c;它支持丰富的告警通知渠道&#xff0c;而且很容易做到告警信息进行去重&#xff…

【云原生】Grafana Alerting 告警模块介绍与实战操作

文章目录 一、概述二、Grafana Alerting 模块介绍三、配置图表四、告警告警规则五、配置告警通道&#xff08;Contact points&#xff09;1&#xff09;Email1、配置smtp&#xff08;grafana.ini&#xff09;2、配置消息模板3、配置告警通道 2&#xff09;WebHook1、编写webhoo…

alertmanager 简介

alertmanager 简介 tags: alertmanager 文章目录 alertmanager 简介1. 前言2. 架构3. 特性3.1 group&#xff08;分组&#xff09;3.2 Inhibition&#xff08;抑制&#xff09;3.3 Silences&#xff08;静默&#xff09; 1. 前言 Prometheus的报警功能主要是利用Alertmanager…

JS中alert的三种使用方式

JS中的alert&#xff0c;作用是在浏览器中弹出一个警告框。 而使用alert&#xff0c;有三种方式&#xff0c;不同的方式&#xff0c;所呈现的效果也不相同。 第一种方式&#xff1a;直接写在script标签中 代码如下&#xff1a; <!DOCTYPE html> <html><head&…

alert弹窗

如何制作一份漂亮的alert弹出框&#xff1f; 在web项目中&#xff0c;往往会用到alert弹出框&#xff0c;但是原生的js弹出框样式丑陋无法满足你的需求&#xff0c;这时你该怎么办呢&#xff1f; 我的做法是&#xff1a;重写window.alert方法。它的好处是不依赖其他组件&…

Kibana:Alerting - 警报介绍

在我之前的很多文章中&#xff0c;我都介绍了 Alerting。你可以在 “Elastic&#xff1a;菜鸟上手指南” 中的 “通知及警报” 一节找到。在今天的文章中&#xff0c;我将使用最新的 7.13 版本来展示如何使用规则&#xff08;rules&#xff09; 来检测复制条件下的 alerts。 警…

k8s--基础--26.7--监控告警系统--Alertmanager--发送报警到qq邮箱,钉钉

k8s–基础–26.7–监控告警系统–Alertmanager–发送报警到qq邮箱&#xff0c;钉钉 1、创建alertmanager-cm.yaml文件 在master1节点操作 1.1、脚本 vi /root/k8s/monitor/alertmanager-cm.yaml内容 kind: ConfigMap apiVersion: v1 metadata:name: alertmanagernamespace:…

lazarus Textout中文字符串乱码

https://wenda.so.com/q/1560151974218812 lazarus Textout中文字符串乱码 5取nmlgb10级分类&#xff1a;编程开发被浏览146次2019.06.10 检举 我用Textout在窗口输出 你好系统却显示其它字体&#xff0c;求懂内行的帅哥美女指教一下&#xff0c;这是我的代码 TextOutA(hdcb,10…

VS2010 MFC TextOut垂直显示内容的显示、清除和修改

学习MFC&#xff0c;用到垂直显示内容&#xff0c;在网上查找了一些方法&#xff0c;做一下总结。 在View类的头文件中增加CString m_strLeft&#xff1b; 在View类中增加WM_PAINT消息的函数OnPaint&#xff08;&#xff09;&#xff0c;设置输出字体&#xff0c;设置颜色 CPai…

CDC在OnPaint函数中采用TextOut函数初始化静态文本框

创建静态文本框之后如果想要在程序段中初始话文本框中的内容可以采用CDC类中的TextOut()函数&#xff0c;但是如果在OnPaint&#xff08;&#xff09;中直接书写代码会导致待输出字符被静态文本框覆盖这是因为对话框上的文本控件是在对话框显示后才画上去的&#xff0c;所以用t…

8.向窗口输出文字 : TextOut 和 DrawText 函数

使用 DrawText() 向客户区的中间位置输出了一段文本&#xff0c;说一下文字的输出。 设备环境&#xff08;DC&#xff09; 在Windows中&#xff0c;一切能在显示器上看到的都是图形&#xff0c;不但包括点、线、矩形、圆等&#xff0c;也包括文字、字体。对用户来说文字和图片…

pdc-textout(_PDC-结论

pdc->textout( Oh, yes, PDC was the shiznit. We learned about the Pillars of Longhorn: 哦&#xff0c;是的&#xff0c;PDC真是愚蠢。 我们了解了Longhorn的Struts&#xff1a; Lornhorn - Its ALPHA, but its real. Feel free to peruse the SDK. Theres 3 years of…

封印(TextOut函数实际应用)

C中有一个函数&#xff1a;TextOut&#xff0c;这个函数有很多分枝&#xff0c;TextOutA&#xff0c;TextOutW。。。。都在windows.h头文件里面 这个函数干嘛用呢&#xff1f;就是在给定的HDC中显示文字。。 结果被我们坑人党知道了 嘿嘿嘿&#xff0c;于是我们写了个东西&am…

windows文本绘制 TextOut、DrawText、CreateFont、SetTextColor、SetBkColor、SetBkMode

文本绘制 TextOut-将文字绘制在指定坐标位置 DrawText-在矩形区域绘制字符串 int DrawText(HDC hdc, //DC句柄LPCSTR lpString, //字符串int nCount, //字符串长度LPRECT lpRect, //绘制文字的矩形框UINT uFormat //绘制的方式,重点&#xff0c;花样繁多的关键点 );绘制文字样…

MFC textout()输出字体设置

//设置字体 CFont font; font.CreateFont(33, // 字体的高度 0, // 字体的宽度 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight 字体的粗细FALSE, // bItalic 字体是否斜体 FALSE, …

gdi 编程c语言pdf,二、Windows编程GDI—TextOut细节

TextOut是用于显示文字的最常用的GDI函数。语法是&#xff1a; TextOut (hdc, x, y, psText, iLength) ; 以下将详细地讨论这个函数。 第一个参数是设备内容句柄&#xff0c;它既可以是GetDC的传回值&#xff0c;也可以是在处理WM_PAINT消息时BeginPaint的传回值。 设备内容的属…