文章《腾讯云TKE-搭建prometheus监控》基于prometheus,手把手教你如何在TKE上搭建全面的平台和业务监控,为业务保驾护航。这是系列文章的第二篇,第一篇见链接。
本文主要介绍基于prometheus,手把手教你如何在TKE上搭建告警系统和图形监控界面。
Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器;告警方式可以按照不同的规则发送给不同的模块负责人,Alertmanager支持Email, Slack,等告警方式, 也可以通过webhook接入wechat等国内IM工具。
这里描述两种方法启动alertmanager:
下载alertmanager:https://prometheus.io/download/
配置文件alertmanager.yml
要指定要加载的配置文件,请使用该--config.file标志。
./alertmanager --config.file=alertmanager.yml
# 全局配置项
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.qq.com:456' # 邮箱smtp服务器代理
smtp_from: '******@qq.com' # 发送邮箱名称
smtp_auth_username: '******@qq.com' # 邮箱名称
smtp_auth_password: '******' #邮箱密码
# 定义路由树信息
route:
group_by: ['alertname'] # 报警分组名称
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间
repeat_interval: 1m # 发送重复警报的周期
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
# 定义警报接收者信息
receivers:
- name: 'email' # 警报
email_configs: # 邮箱配置
- to: '******@qq.com' # 接收警报的email配置
这里要注意,qq邮箱的端口填456,腾讯云默认把25端口给禁了。
首先新建一个configmap,用于存放配置文件alertmanager.yml
alertmanager-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: alert-config
namespace: kube-ops
data:
config.yml: |-
global:
# 在没有报警的情况下声明为已解决的时间
resolve_timeout: 5m # 配置邮件发送信息
smtp_smarthost: 'smtp.163.com:25'
smtp_from: 'ych_1024@163.com'
smtp_auth_username: 'ych_1024@163.com'
smtp_auth_password: '<邮箱密码>'
smtp_hello: '163.com'
smtp_require_tls: false
# 所有报警信息进入后的根路由,用来设置报警的分发策略
route:
# 这里的标签列表是接收到报警信息后的重新分组标签,例如,接收到的报警信息里面有许多具有 cluster=A 和 alertname=LatncyHigh 这样的标签的报警信息将会批量被聚合到一个分组里面
group_by: ['alertname', 'cluster']
# 当一个新的报警分组被创建后,需要等待至少group_wait时间来初始化通知,这种方式可以确保您能有足够的时间为同一分组来获取多个警报,然后一起触发这个报警信息。
group_wait: 30s # 当第一个报警发送后,等待'group_interval'时间来发送新的一组报警信息。
group_interval: 5m # 如果一个报警信息已经发送成功了,等待'repeat_interval'时间来重新发送他们
repeat_interval: 5m # 默认的receiver:如果一个报警没有被一个route匹配,则发送给默认的接收器
receiver: default # 上面所有的属性都由所有子路由继承,并且可以在每个子路由上进行覆盖。
routes:
- receiver: email
group_wait: 10s
match:
team: node
receivers:
- name: 'default'
email_configs:
- to: '517554016@qq.com'
send_resolved: true
- name: 'email'
email_configs:
- to: '517554016@qq.com'
send_resolved: true
然后是pod配置。可以把alert manager放在prometheus的pod中。新建一个容器即可。或者直接新建yigeworkload。对应yaml配置如下:
- name: alertmanager
image: prom/alertmanager:v0.15.3
imagePullPolicy: IfNotPresent
args:
- "--config.file=/etc/alertmanager/config.yml"
ports:
- containerPort: 9093
name: http
volumeMounts:
- mountPath: "/etc/alertmanager"
name: alertcfg
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 100m
memory: 256Mi
volumes:
- name: alertcfg
configMap:
name: alert-config
或直接在web上新建workload:
现在我们只是把 AlertManager 容器运行起来了,也和 Prometheus 进行了关联,但是现在我们并不知道要做什么报警,因为没有任何地方告诉我们要报警,所以我们还需要配置一些报警规则来告诉我们对哪些数据进行报警。
警报规则允许你基于 Prometheus 表达式语言的表达式来定义报警报条件,并在触发警报时发送通知给外部的接收者。
同样在 Prometheus 的配置文件中添加如下报警规则配置:
rule_files:
- /etc/prometheus/rules.yml
其中 rule_files
就是用来指定报警规则的,这里我们同样将 rules.yml
文件用 ConfigMap 的形式挂载到 /etc/prometheus
目录下面即可:
apiVersion: v1kind: ConfigMapmetadata:
name: prometheus-config namespace: kube-opsdata:
prometheus.yml: |
...
rules.yml: |
groups:
- name: test-rule
rules:
- alert: NodeMemoryUsage
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 20
for: 2m
labels:
team: node
annotations:
summary: "{{$labels.instance}}: High Memory usage detected"
description: "{{$labels.instance}}: Memory usage is above 20% (current value is: {{ $value }}"
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: error
annotations:
summary: "Instance {{ $labels.instance }} down2"
description: "{{ $labels.instance }} of job2 {{ $labels.job }} has been down for more than 5 minutes."
其中的字段解释如下:
for
语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。
labels
语句允许指定额外的标签列表,把它们附加在告警上。
annotations
语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于报警信息的展示之类的。
在prometheus的alerts界面,可以看到我们配置的告警规则:
我们可以看到页面中出现了我们刚刚定义的报警规则信息,而且报警信息中还有状态显示。一个报警信息在生命周期内有下面3种状态:
然后这个node告警会被默认路由捕捉到。默认路由设置的是email发送,因此你的邮箱应会收到告警邮件,如下:
docker pull grafana/grafana
出现这个界面,说明你的grafana运行成功了。但这只是一个空的展示界面,还需要配置数据源,这里的数据源就是prometheus。
然后输入prometheus的ip和端口。在tke上,一般用service的内网ip,也就是服务ip。
其中panel可以配置具体的prom ql查询语句,来展示数据。如下所示:
其中在metrics这一栏,输入查询语句即可。
除了自己写metrics,一个个打造自己的监控面板。grafana官方还提供了各种模版的监控。在import功能中,可以添加官方的模版。
比如选择id是8919的prometheus node监控
展示效果如下:
这里没有数据的原因是这个面板采用node exporter的metrics。而我们用的是telegraf的metrics。
本文详细介绍了,如何在TKE上,搭建基于prometheus的告警系统和图形监控界面。下篇文章,将介绍如何在TKE上如何使用telegraf以及thanos。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。