使用 Vmalert 代替 Prometheus 监控报警

 

使用 Vmalert 代替 Prometheus 监控报警插图亿华云

前面我们已经介绍了可以​​使用 vmagent 代替 prometheus 抓取监控指标数据​​,要想完全替换 prometheus
还有一个非常重要的部分就是报警模块,之前我们都是在 prometheus 中定义报警规则评估后发送给 alertmanager 的,同样对应到 vm
中也有一个专门来处理报警的模块:vmalert。

vmalert 会针对 -datasource.url 地址执行配置的报警或记录规则,然后可以将报警发送给 -notifier.url 配置的
Alertmanager,记录规则结果会通过远程写入的协议进行保存,所以需要配置 -remoteWrite.url。

特性与 VictoriaMetrics TSDB 集成。VictoriaMetrics MetricsQL 支持和表达式验证。Prometheus 告警规则定义格式支持。与 Alertmanager 集成。在重启时可以保持报警状态。Graphite 数据源可用于警报和记录规则。支持记录和报警规则重放。非常轻量级,没有额外的依赖。

要开始使用 vmalert,需要满足以下条件:

报警规则列表:要执行的 PromQL/MetricsQL 表达式。数据源地址:可访问的 VictoriaMetrics 实例,用于规则执行。通知程序地址:可访问的 Alertmanager 实例,用于处理,汇总警报和发送通知。安装

首先需要安装一个 Alertmanager 用来接收报警信息,前面章节中我们已经详细讲解过了,这里不再赘述了,对应的资源清单如下所示:

# alertmanager.yaml

apiVersion: v1

kind: ConfigMap

metadata:

name: alert-config

namespace: kube-vm

data:

config.yml: |-

global:

resolve_timeout: 5m

smtp_smarthost: smtp.163.com:465

smtp_from: xxx@163.com

smtp_auth_username: xxx@163.com

smtp_auth_password: # 使用网易邮箱的授权码

smtp_hello: 163.com

smtp_require_tls: false

route:

group_by: [severity, source]

group_wait: 30s

group_interval: 5m

repeat_interval: 24h

receiver: email

receivers:

- name: email

email_configs:

- to: xxxxxx@qq.com

send_resolved: true

---

apiVersion: v1

kind: Service

metadata:

name: alertmanager

namespace: kube-vm

labels:

app: alertmanager

spec:

selector:

app: alertmanager

type: NodePort

ports:

- name: web

port: 9093

targetPort: http

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: alertmanager

namespace: kube-vm

labels:

app: alertmanager

spec:

selector:

matchLabels:

app: alertmanager

template:

metadata:

labels:

app: alertmanager

spec:

volumes:

- name: cfg

configMap:

name: alert-config

containers:

- name: alertmanager

image: prom/alertmanager:v0.21.0

imagePullPolicy: IfNotPresent

args:

- "--config.file=/etc/alertmanager/config.yml"

ports:

- containerPort: 9093

name: http

volumeMounts:

- mountPath: "/etc/alertmanager"

name: cfg

Alertmanager 这里我们只配置了一个默认的路由规则,根据 severity、source 两个标签进行分组,然后将触发的报警发送到 email
接收器中去。

接下来需要添加用于报警的规则配置,配置方式和 Prometheus 一样的:

# vmalert-config.yaml

apiVersion: v1

kind: ConfigMap

metadata:

name: vmalert-config

namespace: kube-vm

data:

record.yaml: |

groups:

- name: record

rules:

- record: job:node_memory_MemFree_bytes:percent # 记录规则名称

expr: 100 - (100 * node_memory_MemFree_bytes / node_memory_MemTotal_bytes)

pod.yaml: |

groups:

- name: pod

rules:

- alert: PodMemoryUsage

expr: sum(container_memory_working_set_bytes{pod!=""}) BY (instance, pod) / sum(container_spec_memory_limit_bytes{pod!=""}

THE END
Copyright © 2024 亿华云