目录
五. Prometheus关联Alertmanager 11
Alertmanager配置,告警的信息发送到钉钉平台__ 12
Alertmanager配置,告警的信息发送到短信平台__ 15
二.application.properties中添加Prometheus的必要配置__ 17
三.创建一个 alertmanager.yml 文件,配置告警规则和渠道__ 17
Prometneus中告警规则
在Prometheus的架构中,告警功能由Prometheus Server和Alertmanager 协同完成,Prometheus Server负责收集目标实例的指标,定义告警规则以及产生警报,并将相关的警报信息发送到Alertmanager。
Alertmanager则负责对告警信息进行管理 ,根据配置的接收人信息,将告警发送到对应的接收人与介质 。
一. 添加告警规则
告警规则配置在独立的文件中,文件格式为yml,并在prometheus.yml文件的rule_files模块中进行引用。如下
rule_files:
- “/etc/prometheus/rules/myrules.yml”
引用的文件路径支持正则表达式方式,如果有多个文件时,可以用下列的方式匹配
rule_files:
- “/etc/prometheus/rules/*.yml”
- “/data/prometheus/rules/prd-*.yml”
复制
默认情况下,Prometheus会每隔一分钟对这些告警规则进行计算,如果用户想定义自己的告警计算周期,可在global 模块中配置evaluation_interval参数来控制。
global:
evaluation_interval: 15s
复制
在告警规则文件中, 可以将一组相关的规则设置定义在一个group下,在每一个group中我们可以定义多个告警规则。
如下是一条标准的告警规则,用于检测实例状态是否正常。
groups:
- name: node_alert
rules:
- alert: node_down
expr: up{job=“node-exporter”} != 1
for: 2m
labels:
level: critical
annotations:
description: “The node is Down more than 1 minute!”
summary: “The node is down”
- groups :这部分包含一个分组列表,本例中只有一个名为"node_alert"的分组。
- name :指定分组的名称。
- rules :这部分包含分组内的规则列表,本例中只定义了一个规则。
- alert :告警规则的名称,在每一个group中,规则名称必须是唯一的,即"cpu_alert"。
- expr :基于PromQL表达式配置的规则条件,用于计算相关的时间序列指标是否满足规则。该表达式通过将平均空闲CPU时间从100中减去,并检查是否大于1%,来计算CPU使用率。使用 irate 函数计算过去1分钟内 node_cpu_seconds_total 指标的每秒速率。
- for :指定在触发警报之前expr需要持续为真的持续时间。可选参数。当相关指标触发规则后,在for定义的时间区间内该规则会处于Pending(待发)状态,在达到该时间后规则状态变成Firing(发射),并发送告警信息到Alertmanager。
- labels :自定义标签, 允许用户指定要添加到告警信息上的一组附加标签。在本例中,“level"标签被设置为"warning”(预警)。
#critical 极其重要 #warning 预警
- annotations :指定关于警报的额外信息。"description"注释提供了一个包含实例标签和CPU使用率值的描述模板。"summary"注释提供了警报的摘要
二. 使用模板
模板(template)是一种在警报中使用时间序列数据的标签和值的方法,可用于告警中的注解和标签。模板使用标准的Go模板语法,并暴露一些包含时间序列的标签和值的变量。
通过{{ lable.}}变量可以访问当前告警实例中指定标签的值,
# 插入一个触发元素的标签值:
{{ $labels. }}
# 插入触发元素的数值表达式值:
{{ $value }}
在实际使用中,可以通过模板的方式优化summary与description内容的可读性。比如,在描述中插入了实例信息以及PromQL表达式计算的样本值。
如下:
groups:
- name: node_alert
rules:
- alert: cpu_alert
expr: 100 -avg(irate(node_cpu_seconds_total{mode=“idle”}[1m])) by (instance)* 100 > 85
for: 5m
labels:
level: warning
annotations:
description: “instance: {{ KaTeX parse error: Expected 'EOF', got '}' at position 17: …abels.instance }̲} ,cpu usage is…value}}”
summary: “cpu usage is too high”
三. 规则应用
配置好规则文件后,可以使用 curl -XPOST http://localhost:9090/-/reload 或者重启Prometheus的方式让规则更新。当顺利加载规则后,可以在Prometheus的“Status”- “Rules”页面查看到相关的规则状态信息。
当告警规则生效后,可以在Alerts页面查看警报状态。
四. 警报状态
Prometheus的警报有如下几种状态:
inactive :警报未被触发。
Pending:警报已被触发,但还未满足for参数定义的持续时间。
Firing:警报被触发警,并满足for定义的持续时间的
告警规则的状态变化如下所示,默认状态为inactive,当规则被触发后将变为Pending,在达到持续时间后变成Firing状态。如果配置的规则没有for子句,那么当规则触发时,警报会自动从inactive转换为Firing,而没有任何的等待周期。
如果配置了Alertmanager的地址,当警报状态为Firing时,Prometheus会将相关的告警信息转发到Alertmanager,并由其进行告警信息的发送。在恢复正常后,警报状态重新变回inactive
Alertmanager中告警管理
一. Alertmanager简介
Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方。
Alertmanager内置了对邮件,Slack等多种通知方式的支持,同时还支持通过Webhook的方式接入企业微信、钉钉等国内IM工具。
Alertmanager除了提供基本告警通知能力以外,还具有以下几个特点:
\1. 分组
分组机制可以将相同性质的警报合并为一个通知。比如在某些故障场景中,可能导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受收大量的通知信息,而无法对问题进行快速定位。
例如:当一台宿主机上运行着数十个虚拟机,如果机器发生网络或硬件故障,运维人员可能收到数十个告警,包括物理机与上面的所有虚拟机。而逐个查看这些故障本身是个耗时的工作,也容易导致对主要问题的忽略。
作为告警接收人,我们希望可以在一个通知中就能查看到受影响的所有实例信息,这时可以按照告警名称或所属宿主机对告警进行分组,而将这些告警合并到一个通知中查收。
告警分组功能可以通过Alertmanager的配置文件进行配置。
\2. 抑制
抑制是指当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。
例如:当集群不可访问时触发了一次告警,通过配置Alertmanager可以忽略与该集群有关的其它所有告警。这样可以避免接收到大量与实际问题无关的告警通知。
抑制机制同样通过Alertmanager的配置文件进行设置。
\3. 静默
静默提供了一种简单的方法对特定的告警在特定时间内进行静音处理,它根据标签进行匹配。如果Alertmanager接收到的告警信息符合静默的配置,它将不会发送告警通知。静默功能适合在机器进行维护等场景下,暂时屏蔽告警通知。
静默设置需要在Alertmanager的Wer页面上进行设置。
二. 安装部署
下载安装包并解压
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
$ tar -xvf alertmanager-0.21.0.linux-amd64.tar.gz
拷贝文件到bin目录
$ cd alertmanager-0.21.0.linux-amd64
$ sudo cp alertmanager /usr/local/bin/
$ sudo cp amtool /usr/local/bin/
注:amtool是一个Alertmanager管理工具,支持用命令行方式进行管理。
查看版本号验证安装是否正常
$ alertmanager --version
alertmanager, version 0.21.0 (branch: HEAD, revision: 4c6c03ebfe21009c546e4d1e9b92c371d67c021d)
build user: root@dee35927357f
build date: 20200617-08:54:02
go version: go1.14.4
三. 配置介绍
Alertmanager与Prometheus Server一样,也是通过yml格式的配置文件进行配置。下面是一个在alertmanager.yml中配置qq邮件的文件模板:
global:
smtp_smarthost: ‘smtp.qq.com:587’
smtp_from: ‘2309546410@qq.com’
smtp_auth_username: ‘2309546410@qq.com’
smtp_auth_password: ‘qtvtnciacirxdidi’
smtp_require_tls: false
route:
group_by: [‘alertname’]
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: ‘tencent_email’
templates:
- ‘/opt/alertmanager0.25.0/*.tmpl’
receivers:
- name: ‘tencent_email’
email_configs:
- to: ‘929546220@qq.com’
send_resolved: true
headers: { Subject: “[{{ .Status | toUpper }}{{ if eq .Status “firing” }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values }}” }
html: ‘{{ template “email.html” . }}’
inhibit_rules:
- source_match:
severity: ‘critical’
target_match:
severity: ‘warning’
equal: [‘alertname’, ‘dev’, ‘instance’]
touch *.tmpl
\1. global(全局)配置:
- external_url (外部 URL):Alertmanager 的外部 URL,用于生成警报时生成警报的链接。
- resolve_timeout (解决超时):在警报解决之前等待的时间。
- smtp_smarthost :指定用于发送电子邮件的SMTP服务器和端口。在此示例中,我们使用腾讯的SMTP服务器和端口587。
- smtp_from :这是发送警报电子邮件的电子邮件地址。请将 ‘your_email_address@qq.com’ 替换为您实际的腾讯电子邮件地址。
- smtp_auth_username 和 smtp_auth_password :这些是与SMTP服务器进行身份验证所需的凭据(用户名和密码)。
\2. route(路由)配置:
- group_by (按照哪些标签分组警报):定义用于将警报分组的标签列表。
- group_wait (等待发送一组警报的时间):在发送一组警报之前等待的时间,以便将相似的警报组合在一起。
- group_interval (等待发送同一组的新警报的时间):在发送同一组的新警报之前等待的时间。
- repeat_interval (重复发送一组警报的时间间隔):重复发送同一组警报的时间间隔。
- receivers :接收者配置部分,用于定义警报通知的接收者。在这个例子中,名为"tencent_email"的接收者配置了发送邮件的相关信息,包括收件人地址、是否在警报解决后发送通知、邮件主题等。
\3. receivers(接收器)配置:
- name :接收器的名称,在此示例中设置为 ‘tencent_email’ 。
- email_configs :用于发送电子邮件警报的配置。
- to :指定接收警报的电子邮件地址,在此示例中设置为 ‘929546220@qq.com’ 。
- from :发送警报电子邮件的电子邮件地址。请将 ‘your_email_address@qq.com’ 替换为您实际的腾讯电子邮件地址。
- smarthost :指定用于发送电子邮件的SMTP服务器和端口。在此示例中,我们使用腾讯的SMTP服务器和端口587。
- auth_username 和 auth_password :这些是与SMTP服务器进行身份验证所需的凭据(用户名和密码)。
- send_resolved :确定是否通过电子邮件发送已解决的警报。在此示例中,设置为 true 。
\4. 抑制规则(inhibit_rules)配置
当警报的 severity 为"critical"时,会抑制相同 severity 为"warning"的警报。
- source_match (源匹配):指定要匹配的警报源的标签。
- target_match (目标匹配):指定要抑制的目标警报的标签。
- equal :相等条件配置部分,用于定义警报匹配的相等条件。在这个例子中,警报的 alertname 、 dev 和 instance 标签需要完全相等才会匹配。
\5. 模板配置:
- /opt/alertmanager0.25.0/*.tmpl :这是用于格式化电子邮件内容的模板文件的路径。请将其替换为实际的模板文件路径。
相关模板的配置方式本文不做介绍,有兴趣的朋友可上官网查看:https://prometheus.io/docs/alerting/latest/notifications/。
四. 启动Alertmanager
1.启动Alertmanager时可使用参数修改相关配置,–config.file用于指定配置文件路径,–storage.path用于指定数据存储路径。
$ nohup ./alertmanager --config.file alertmanager.yml --storage.path /data/alertmanager/ &
2.Alertmanager启动参数
-h,–help:显示上下文相关的帮助信息(也可以尝试使用–help-long或–help-man)。
–config.file=“alertmanager.yml”:Alertmanager配置文件的名称。
–storage.path=“data/”:数据存储的基本路径。
–data.retention=120h:数据保留时间。
–data.maintenance-interval=15m:垃圾回收和快照到磁盘的沉默和通知日志的间隔。
–alerts.gc-interval=30m:告警垃圾回收的间隔。
–web.systemd-socket:使用systemdsocket激活监听器而不是端口监听器(仅适用于Linux)
–web.listen-address=:9093:暴露指标和Web界面的地址。可重复使用以指定多个地址。
–web.config.file=“”:[实验性]启用TLS或身份验证的配置文件的路径。
–web.external-url=WEB.EXTERNAL-URL:Alertmanager可外部访问的URL(例如,如果通过反向代理提供Alertmanager)。用于生成指向Alertmanager本身的相对和绝对链接。如果URL有路径部分,将用于为Alertmanager提供的所有HTTP端点添加前缀。如果省略,相关的URL组件将自动派生。
–web.route-prefix=WEB.ROUTE-PREFIX:Web端点的内部路由前缀。默认为–web.external-url的路径。
–web.get-concurrency=0:并发处理的最大GET请求数。如果为负数或零,则限制为GOMAXPROC或8(以较大者为准)。
–web.timeout=0:HTTP请求的超时时间。如果为负数或零,则不设置超时。
–cluster.listen-address=“0.0.0.0:9094”:集群的监听地址。设置为空字符串以禁用HA模式
–cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS:在集群中显式广告的地址。
–cluster.peer=CLUSTER.PEER:初始对等节点(可重复)。
–cluster.peer-timeout=15s:等待对等节点发送通知的时间间隔。
–cluster.gossip-interval=200ms:发送gossip消息的间隔。通过降低此值(更频繁),gossip消息可以更快地在集群中传播,但会增加带宽消耗。
–cluster.pushpull-interval=1m0s:gossip状态同步的间隔。将此间隔设置得更低(更频繁)将增加大型集群中的收敛速度,但会增加带宽使用。
–cluster.tcp-timeout=10s:与远程节点建立流连接以进行完整状态同步以及流读写操作的超时时间。
–cluster.probe-timeout=500ms:等待来自被探测节点的ack的超时时间,然后假设该节点不健康。这应该设置为您网络上RTT(往返时间)的99分位数。
–cluster.probe-interval=1s:随机节点探测的间隔。将此值设置得更低(更频繁)将导致集群更快地检测到失败的节点,但会增加带宽使用。
–cluster.settle-timeout=1m0s:在评估通知之前等待集群连接稳定的最长时间。
–cluster.reconnect-interval=10s:重新连接到丢失对等节点的间隔。
–cluster.reconnect-timeout=6h0m0s:尝试重新连接到丢失对等节点的时间长度。
–cluster.tls-config=“”:[实验性]启用gossip协议中的互相TLS的配置yaml文件的路径。
–cluster.allow-insecure-public-advertise-address-discovery:[实验性]允许Alertmanager发现和监听公共IP地址。
–log.level=info:仅记录具有给定严重性或更高严重性的日志消息。可选值:[debug,info,warn,error]。
–log.format=logfmt:日志消息的输出格式。可选值:[logfmt,json]。
–version:显示应用程序版本。
3.Alertmanager开机自启动
sudo vi /etc/systemd/system/alertmanager.service
主节点
[Unit]
Description=alertmanager service
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
User=root
Group=root
ExecStart=/opt/alertmanager0.25.0/alertmanager \
–config.file /opt/alertmanager0.25.0/alertmanager.yml \
–storage.path /opt/alertmanager0.25.0/data \
–cluster.listen-address=“192.168.88.139:8001”
[Install]
WantedBy=multi-user.target
从节点
[Unit]
Description=alertmanager service
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
User=root
Group=root
ExecStart= /opt/alertmanager0.25.0/alertmanager \
–config.file /opt/alertmanager0.25.0/alertmanager.yml \
–storage.path /opt/alertmanager0.25.0/data \
–cluster.listen-address=“0.0.0.0:8001” \
–cluster.peer=192.168.88.139:8001
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable alertmanager
sudo systemctl start alertmanager
sudo systemctl status alertmanager
4.启动完成后,打开浏览器,访问http://$IP:9093,可看到UI界面
五. Prometheus关联Alertmanager
Prometheus的配置文件中,alerting模块用于配置Alertmanager地址。当配置完成后,Prometheus会将触发告警规则的警报发送到Alertmanager。
alerting:
alertmanagers:
- static_configs:
- targets: [‘localhost:9093’]
我们可以试着把 cpu告警规则调低,触发Prometheus告警规则来验证配置,此处我们改为CPU使用率大于1%触发告警。
groups:
- name: node_alert
rules:
- alert: cpu_alert
expr: 100 -avg(irate(node_cpu_seconds_total{mode=“idle”}[1m])) by (instance)* 100 > 1
for: 5m
labels:
level: warning
annotations:
description: “instance: {{ KaTeX parse error: Expected 'EOF', got '}' at position 17: …abels.instance }̲} ,cpu usage is…value}}”
summary: “cpu usage is too high”
在Prometheus界面看到已成功触发告警规则
打开Alertmanager,可看到接收到的警报信息。
Alertmanager配置,告警的信息发送到钉钉平台
一.创建钉钉机器人
\1. 桌面版钉钉->创建或加入团队->立即创建->填写相关信息后->选择webhook机器人->完成
保存 webhook 地址 和 加签
\2. 下载 https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
\3. 安装prometheus-webhook-dingtalk
tar -zxvf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 ./webhook-dingtalk2.1.0
cp config.example.yml ./config.yml
二.dingtalk配置介绍
\1. 修改 config.yml
## 请求时间超过了服务器所能等待的时间
# timeout: 5s
## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true
## Customizable templates path
#templates:
# - contrib/templates/legacy/template.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:
webhook1:
url: https://oapi.dingtalk.com/robot/send?access_token=646f01f96cf173d96fa05d3e8cdef4b6727d7526c5b62be9cdb74cf4978cd7ad
# secret for signature
secret: SEC112f68959b2be4967b2460f3fde4d39cbf43afebf107fb6e69f1e399da4ede37
webhook2:
url: https://oapi.dingtalk.com/robot/send?access_token=646f01f96cf173d96fa05d3e8cdef4b6727d7526c5b62be9cdb74cf4978cd7ad
webhook_legacy:
url: https://oapi.dingtalk.com/robot/send?access_token=646f01f96cf173d96fa05d3e8cdef4b6727d7526c5b62be9cdb74cf4978cd7ad
# Customize template content
message:
# Use legacy template
title: ‘{{ template “legacy.title” . }}’
text: ‘{{ template “legacy.content” . }}’
webhook_mention_all:
url: https://oapi.dingtalk.com/robot/send?access_token=646f01f96cf173d96fa05d3e8cdef4b6727d7526c5b62be9cdb74cf4978cd7ad
mention:
all: true
webhook_mention_users:
url: https://oapi.dingtalk.com/robot/send?access_token=646f01f96cf173d96fa05d3e8cdef4b6727d7526c5b62be9cdb74cf4978cd7ad
mention:
mobiles: [‘13466321965’]
targets: - 这个标签定义了Webhook配置的不同目标或配置文件。
webhook1: - 这是第一个目标/配置文件的标签。它指定了发送消息到Webhook的URL,并允许包含用于签名验证的密钥。
webhook2: - 这个标签代表第二个目标/配置文件。类似于 webhook1 ,它定义了发送消息到Webhook的URL。
webhook_legacy: - 这个标签用于另一个目标/配置文件,特别是用于遗留目的。它包括一个自定义的消息模板,用于生成消息的标题和正文。
webhook_mention_all: - 这个标签表示一个目标/配置文件,发送消息到Webhook并提及所有用户。
webhook_mention_users: - 这个标签用于一个目标/配置文件,发送消息到Webhook并根据他们的手机号码提及特定用户。
url: - 这个标签指定了每个Webhook目标/配置文件的URL。
ecret: - 这个标签用于在Webhook配置中定义签名验证的密钥。
message: - 这个标签在 webhook_legacy 目标/配置文件中使用,用于自定义消息的模板内容。
title: - 这个标签在 message 部分内使用,使用模板来定义消息的标题。
text: - 这个标签也在 message 部分内,使用模板来定义消息的内容或正文。
\2. 启动参数介绍
–web.listen-address=“:8060” 监听web接口的地址。
–web.enable-ui Enable Web UI mounted on /ui path
–web.enable-lifecycle 启用挂载在/ UI路径上的Web UI.
–config.file=config.yml 配置文件的路径。
–log.level=info 设置日志消息级别。[调试,信息,警告,错误]
–log.format=logfmt 设置日志消息格式。[logfmt, json]
–version 如何应用程序版本。
\3. 启动prometheus-webhook-dingtalk
nohup ./prometheus-webhook-dingtalk --config.file=“config.yml” &
开机自启动 sudo vi /etc/systemd/system/prometheus-webhook-dingtalk.service
[Unit]
Description=prometheus-webhook-dingtalk
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
User=root
Group=root
WorkingDirectory=/opt/webhook-dingtalk2.1.0
ExecStart=/opt/webhook-dingtalk2.1.0/prometheus-webhook-dingtalk --config.file=/opt/opt/webhook-dingtalk2.1.0/config.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable prometheus-webhook-dingtalk
sudo systemctl start prometheus-webhook-dingtalk
sudo systemctl status prometheus-webhook-dingtalk
sudo systemctl restart prometheus-webhook-dingtalk
Alertmanager配置,告警的信息发送到短信平台
一.配置vim alertmanager.yml
route:
receiver: ‘sms-notifications’
receivers:
- name: ‘sms-notifications’ # 接收器的名称
webhook_configs:
- url: ‘https://api.twilio.com/2010-04-01/Accounts/<your_account_sid>/Messages.json’ # 短信平台的API端点
http_config:
basic_auth:
username: ‘<your_account_sid>’ # 您的账户SID
password: ‘<your_auth_token>’ # 您的身份验证令牌
send_resolved: true # 是否发送已解决的警报
http_method: POST # HTTP请求方法
headers:
Content-Type: ‘application/x-www-form-urlencoded’ # 请求头的Content-Type
body: |
From=<your_twilio_phone_number>&To=<recipient_phone_number>&Body={{ template “sms.body” . }} # 短信的消息体模板
templates:
- ‘/path/to/sms.tmpl’ # 短信消息体模板文件的路径
在这个示例中,您需要将 <your_account_sid> 、 <your_auth_token> 、 <your_twilio_phone_number> 和 <recipient_phone_number> 替换为您自己的Twilio账户和接收者手机号码的相应值。 另外,您还需要在指定的路径下创建 sms.tmpl 模板文件,并定义所需的短信消息正文模板。 请记得查阅您所使用的具体短信平台的文档,了解API细节和任何额外的配置要求。
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: ‘example_app’
static_configs:
- targets: [‘localhost:9090’] # 替换为您应用程序的端点
alerting:
alertmanagers:
- static_configs:
- targets: [‘localhost:9093’] # 替换为Alertmanager的端点
整合spring boot 实现
一.添加依赖
在Spring Boot项目的 pom.xml 文件中,添加Prometheus和Alertmanager的必要依赖。此外,还需要添加用于发送短信的依赖。例如,如果你使用Twilio平台,可以添加以下依赖:
xml
io.micrometer
micrometer-registry-prometheus
io.prometheus
simpleclient_spring_boot
io.prometheus
simpleclient_hotspot
io.prometheus
simpleclient_pushgateway
org.springframework.boot
spring-boot-starter-web
com.twilio.sdk
twilio-java-sdk
8.17.0
二.application.properties中添加Prometheus的必要配置
properties
management.endpoints.web.exposure.include=*
management.endpoint.metrics.enabled=true
management.metrics.export.prometheus.enabled=true
management.metrics.export.prometheus.path=/metrics
三.创建一个 alertmanager.yml 文件,配置告警规则和渠道
配置Alertmanager 在项目的根目录下创建一个 alertmanager.yml 文件,并配置必要的告警规则和通知渠道。例如:
yaml
global:
resolve_timeout: 5m
route:
group_by: [alertname]
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: ‘sms’
receivers:
- name: ‘sms’
webhook_configs:
- url: ‘http://localhost:8080/api/send-sms’
四.创建短信服务类
创建一个 SMSService 类,封装使用短信平台API发送短信通知的逻辑。以下是使用Twilio的示例:
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.type.PhoneNumber;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class SMSService {
@Value(“${twilio.account.sid}”)
private String twilioAccountSid;
@Value(“${twilio.auth.token}”)
private String twilioAuthToken;
@Value(“${twilio.phone.number}”)
private String twilioPhoneNumber;
public void sendSMS(String toPhoneNumber, String message) {
Twilio.init(twilioAccountSid, twilioAuthToken);
Message.creator(new PhoneNumber(toPhoneNumber), new PhoneNumber(twilioPhoneNumber), message).create();
}
}
五.创建短信控制器类
创建一个 SMSController 类,用于处理Alertmanager发送的Webhook请求,并触发短信通知。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SMSController {
private final SMSService smsService;
@Autowired
public SMSController(SMSService smsService) {
this.smsService = smsService;
}
@PostMapping(“/api/send-sms”)
public void sendSMSNotification(@RequestBody SMSNotification smsNotification) {
String phoneNumber = smsNotification.getPhoneNumber();
String message = smsNotification.getMessage();
smsService.sendSMS(phoneNumber, message);
}
}
第六步:配置短信平台凭据 在 application.properties 文件中,添加短信平台的必要配置属性。例如,对于Twilio,添加以下属性:
properties
twilio.account.sid=YOUR_TWILIO_ACCOUNT_SID
twilio.auth.token=YOUR_TWILIO_AUTH_TOKEN
twilio.phone.number=YOUR_TWILIO_PHONE_NUMBER
第七步:运行应用程序 运行Spring Boot应用程序,Prometheus将开始从应用程序中抓取指标。Alertmanager将根据配置的规则触发警报,当警报触发时,它将发送一个Webhook请求到 /api/send-sms 端点。 SMSController 将处理该请求,并使用 SMSService 发送短信通知。 请确保将占位符值替换为你的短信平台的实际值。