targets
:
webhook
:
url
:
https
:
//oapi.dingtalk.com/robot/send
?
access_token=xxxxxxxxxxxx
mention
:
all
:
true
default.tmpl
:
|
{
{ define "__subject" }}[{
{ .Status | toUpper }}{
{ if eq .Status "firing" }}:{
{ .Alerts.Firing | len }}{
{ end }}] {
{ .GroupLabels.SortedPairs.Values | join " " }} {
{ if gt (len .CommonLabels) (len .GroupLabels) }}({
{ with .CommonLabels.Remove .GroupLabels.Names }}{
{ .Values | join " " }}{
{ end }}){
{ end }}{
{ end }}
{
{ define "__alertmanagerURL" }}{
{ .ExternalURL }}/d/9CWBz0bik/k8sji-qun-shou-ye?orgId=1 {
{ end }}
{
{
define "__text_alert_list"
}
}
{
{
range .
}
}
*
*Labels
**
{
{
range .Labels.SortedPairs
}
}
>
-
{
{
.Name
}
}
:
{
{
.Value
|
markdown
|
html
}
}
{
{
end
}
}
*
*Annotations
**
{
{
range .Annotations.SortedPairs
}
}
>
-
{
{
.Name
}
}
:
{
{
.Value
|
markdown
|
html
}
}
{
{
end
}
}
*
*Source
:
**
[
{
{
.GeneratorURL
}
}
]
(
{
{
.GeneratorURL
}
}
)
{
{
end
}
}
{
{
end
}
}
{
{
define "default.__text_alert_list"
}
}
{
{
range .
}
}
**告警级别
:
**
{
{
.Labels.severity
|
upper
}
}
**触发时间
:
**
{
{
dateInZone "2006.01.02 15
:
04
:
05" (.StartsAt) "Asia/Shanghai"
}
}
**事件信息
:
**
{
{
range .Annotations.SortedPairs
}
}
>
-
{
{
.Name
}
}
:
{
{
.Value
|
markdown
|
html
}
}
{
{
end
}
}
{
{
end
}
}
{
{
end
}
}
{
{
define "default.__text_alertresolve_list"
}
}
{
{
range .
}
}
**告警级别
:
**
{
{
.Labels.severity
|
upper
}
}
**触发时间
:
**
{
{
dateInZone "2006.01.02 15
:
04
:
05" (.StartsAt) "Asia/Shanghai"
}
}
**结束时间
:
**
{
{
dateInZone "2006.01.02 15
:
04
:
05" (.EndsAt) "Asia/Shanghai"
}
}
**事件信息
:
**
{
{
range .Annotations.SortedPairs
}
}
>
-
{
{
.Name
}
}
:
{
{
.Value
|
markdown
|
html
}
}
{
{
end
}
}
{
{
end
}
}
{
{
end
}
}
{
{
/* Default */
}
}
{
{
define "default.title"
}
}
{
{
template "__subject" .
}
}
{
{
end
}
}
{
{
define "default.content"
}
}
{
{
if gt (len .Alerts.Firing) 0
-
}
}
![警报
图标
]
(http
:
//wx4.sinaimg.cn/large/006APoFYly1g0ggpt1aq3j306o06o3yt.jpg)
**=====侦测到故障=====**
{
{
template "default.__text_alert_list" .Alerts.Firing
}
}
{
{
-
end
}
}
{
{
if gt (len .Alerts.Resolved) 0
-
}
}
![警报
图标
]
(https
:
//i01piccdn.sogoucdn.com/2dbf8a9d48e921e7)
**=====故障已修复=====**
{
{
template "default.__text_alertresolve_list" .Alerts.Resolved
}
}
{
{
-
end
}
}
{
{
-
end
}
}
{
{
/* Legacy */
}
}
{
{
define "legacy.title"
}
}
{
{
template "__subject" .
}
}
{
{
end
}
}
{
{
define "legacy.content"
}
}
{
{
template "__text_alert_list" .Alerts.Firing
}
}
{
{
-
end
}
}
{
{
/* Following names for compatibility */
}
}
{
{
define "ding.link.title"
}
}
{
{
template "default.title" .
}
}
{
{
end
}
}
{
{
define "ding.link.content"
}
}
{
{
template "default.content" .
}
}
{
{
end
}
}
vim dingtalk/dingtalk.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dingtalk
namespace: monitoring
spec:
rules:
- host: dingtalk.lzxlinux.cn
http:
paths:
- path: /
backend:
serviceName: dingtalk
servicePort: 8060
apiVersion: v1
kind: Service
metadata:
name: dingtalk
namespace: monitoring
labels:
app: dingtalk
annotations:
prometheus.io/scrape: 'false'
spec:
selector:
app: dingtalk
ports:
- name: dingtalk
port: 8060
protocol: TCP
targetPort: 8060
apiVersion: apps/v1
kind: Deployment
metadata:
name: dingtalk
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: dingtalk
template:
metadata:
name: dingtalk
labels:
app: dingtalk
spec:
containers:
- name: dingtalk
image: timonwong/prometheus-webhook-dingtalk:latest
imagePullPolicy: IfNotPresent
args:
- --web.listen-address=:8060
- --config.file=/etc/prometheus-webhook-dingtalk/config.yml
- --web.enable-ui
ports:
- containerPort: 8060
volumeMounts:
- name: config
mountPath: /etc/prometheus-webhook-dingtalk
securityContext:
runAsUser: 0
fsGroup: 0
volumes:
- name: config
configMap:
name: dingtalk-config
kubectl apply -f dingtalk/
本地添加hosts,访问 https://dingtalk.lzxlinux.cn/ui
,进行模板验证,
模拟CPU使用率为80%,
yum install -y stress-ng
stress-ng -c 0 -l 80
收到故障告警:
收到恢复告警:
需要注意的是,default.tmpl 中包含了 /d/9CWBz0bik/k8sji-qun-shou-ye?orgId=1
,这正是 grafana 的 url。因为 alertmanager 的 --web.external-url
参数已经被更改为 grafana 地址 http://grafana.lzxlinux.cn
,最终点击告警消息中的链接就能够跳转到 http://grafana.lzxlinux.cn/d/9CWBz0bik/k8sji-qun-shou-ye?orgId=1
。
default.tmpl 中包含的 url 请按自己的情况设置,dingtalk 使用自定义告警模板配置至此完成。具体还可参考:prometheus-webhook-dingtalk
本文内容基于 k8s部署prometheus + grafana,只针对 dingtalk 部分进行修改。vim dingtalk/config.yamlapiVersion: v1kind: ConfigMapmetadata: name: dingtalk-config namespace: monitoringdata: config.yml: |- templates: - /etc/prometheus-webhook-dingtalk/default
import requests
import json
url = 'https://oapi.dingtalk.com/robot/send?access_token=71638980426c030'
headers = {
"Content-Type": "application/json",
"Chartset": "utf-8"
# 要发送的文本是json格式
request_data = {
# 此消息的类型为固定的text
"msgtype": "text",
"text": {
获取钉钉机器人Webhook地址
设置钉群或在联系人中设置钉钉机器人时需要先在钉钉群中获取自定义机器人Webhook地址。本文介绍如何获取钉钉机器人Webhook地址。
请按照以下步骤在钉钉群中添加自定义钉钉机器人并获取Webhook地址。
1、在PC版钉钉上打开您想要添加报警机器人的钉钉群,并单击右上角的群设置图标。
2、在群设置面板中单击智能群助手。
3、在智能群助手面板单击添加机器人。
4、在群机器人对话框单击添加机器人区域的+图标,然后选择添加自定义。Add Robot
随着生产上线业务的不断增多以及无人值守需求的日益增长,钉钉预警机器人的出现极大的解决了我们的问题。本文从0到1详细介绍讲解下钉钉预警机器人的搭建与自定义,分为机器人搭建,预警内容开发,上线部署三大步
机器人搭建
以下所有的配置开发均来源于钉钉官网文档,喜欢阅读官网或者有更进一步个性化的需求可前往查看,也可以跟随笔者站在初级开发者的角度来一步步搭建
首先是先要有一个群以及你有这个群添加机器人的权限,然后
添加机器人
群设置--智能群助手--添加机器人--自定义,选择添加,然后进行相关设置
$ go get github.com/molizz/dingding-go
cfg := dingding . NewConfig ( agentID , appKey , appSecret )
atm := dingding . NewDefaultAccessTokenManager ()
dd := dingding . New ( cfg , atm )
accessToken , err := dd . AccessToken ()
// 处理事件订阅
// hub内部已处理 check_url 事件
// 如果你需要处理自定义的事件,请实现 EventProcessor 接口,并调用下方的Registor() 方法注册事件即可。
// 具体也可以参考考 event_check_url.go 文件中处
usage: prometheus-webhook-dingtalk [<flags>]
Flags:
-h, --help Show context-sensitive help (also try --help-long and --help-man).
--web.listen-address=:8060
要在Kubernetes 1.26上部署Prometheus和钉钉告警,可以遵循以下步骤:
1. 首先,您需要创建一个Prometheus的配置文件,其中包含Prometheus服务器的相关配置信息。您可以通过使用Prometheus Operator或手动创建一个配置文件。
2. 在该配置文件中,您需要定义钉钉告警的接收者。您可以添加一个名为"dingtalk"的接收者,并提供钉钉机器人的Webhook地址。这将允许Prometheus发送告警通知到钉钉机器人。
3. 接下来,您需要将该配置文件应用到Kubernetes集群中。您可以使用kubectl命令应用一个YAML文件,其中定义了Prometheus服务器的Deployment和Service。
4. 在Prometheus服务器运行后,您可以使用kubectl port-forward命令将Prometheus的端口映射到本地,以便可以访问Prometheus的Web界面。
5. 在Prometheus的Web界面中,您可以配置和监控各种指标,并设置相应的报警规则。您可以通过PromQL查询语言定义报警规则,并指定钉钉接收者。
6. 当报警规则触发时,Prometheus将发送告警通知到钉钉机器人。您可以在钉钉中收到告警通知,并进行相应的处理。
总结:以上是在Kubernetes 1.26上部署Prometheus和钉钉告警的大致步骤。具体的实施方式可能会根据您的环境和需求而有所不同。需要注意的是,配置和使用Prometheus和钉钉告警需要一定的技术知识和经验。
### 回答2:
部署k8s 1.26版本中的Prometheus并配置钉钉告警需要以下步骤:
1. 安装Prometheus:根据k8s版本选择适当的Prometheus版本,并将其部署到kubernetes集群中。可以使用Helm进行安装:`helm install prometheus stable/prometheus`
2. 配置告警规则:在Prometheus中创建告警规则,以定义要监控的指标和阈值。可以通过编辑Prometheus配置文件或使用Prometheus的API来创建规则。
3. 设置钉钉告警:首先,需要在钉钉开发者平台上创建一个机器人,并获取其Webhook地址。然后,在Prometheus的配置文件中添加相应的钉钉告警配置,包括Webhook地址和其他相关参数。
4. 测试告警:修改某些指标或触发条件,以便使Prometheus触发告警规则。可以使用下面的命令手动触发告警:`kubectl -n <prometheus-namespace> delete po -l <label-selector>`
5. 验证告警:检查钉钉群组中是否收到Prometheus的告警通知。如果一切配置正确,钉钉机器人将发送告警消息到指定的群组中。
需要注意的是,部署Prometheus和配置钉钉告警可能会因k8s版本和Prometheus版本的不同而有所差异。以上步骤仅提供了一个大致的实现方案,在实际操作中可能需要根据具体版本和需求进行一些调整和修改。
### 回答3:
在k8s 1.26版本中部署Prometheus并配置钉钉告警的过程如下:
1. 在k8s集群中创建一个命名空间,用于部署和管理Prometheus及相关组件。
2. 在k8s集群中创建一个ConfigMap,用于存储Prometheus的配置文件。配置文件包含了需要监控的目标(例如,Pod、Service等)和具体的告警规则。
3. 创建一个ServiceAccount,并为其授权访问钉钉的权限。这是为了Prometheus能够发送告警通知到钉钉。
4. 部署Prometheus Operator。Prometheus Operator是一个用于管理Prometheus实例的部署程序。
5. 创建Prometheus资源。使用Prometheus Operator创建一个Prometheus资源,并关联之前创建的ConfigMap。
6. 配置Prometheus的钉钉告警规则。在ConfigMap内部,添加相应的告警规则配置,用于定义在何种情况下触发告警,并发送通知到钉钉。
7. 部署Alertmanager。Alertmanager是Prometheus的一个组件,用于接收来自Prometheus的告警通知,并将其发送到相应的接收者。
8. 配置Alertmanager的钉钉通知方式。在Alertmanager的配置文件中,添加钉钉的通知方式,并填写相应的钉钉机器人Webhook地址。
9. 部署钉钉机器人。在钉钉中创建一个机器人,并获取其Webhook地址。
10. 部署完成后,Prometheus会开始监控集群中的目标,并根据配置的告警规则发送告警通知到Alertmanager。Alertmanager会将告警通知通过钉钉机器人的Webhook地址发送到钉钉。
通过以上步骤,我们成功在k8s 1.26版本中部署了Prometheus,并配置了钉钉告警。这样就能及时获取到集群中的异常情况,并通过钉钉进行告警通知,便于及时处理和监控运维。