我们已经介绍过可以使用vmagent代替prometheus抓取监控指标数据。要完全替代prometheus,还有一个非常重要的部分就是告警模块。将prometheus中定义的告警规则进行评估,然后发送给alertmanager,alertmanager也对应vm中的一个专门处理告警的模块:vmalert。vmalert会对-datasource.url地址执行配置的告警或记录规则,然后将告警发送给-notifier.url配置的Alertmanager。记录规则的结果会通过远程写协议保存,所以需要配置-remoteWrite.url。与VictoriaMetricsTSDB的功能集成。VictoriaMetricsMetricsQL支持和表达式验证。Prometheus警报规则定义格式支持。与警报管理器集成。重启时可以保持告警状态。Graphite数据源可用于警报和日志记录规则。支持录像和报警规则回放。非常轻量级,没有额外的依赖。要开始使用vmalert,您需要以下内容:警报规则列表:要执行的PromQL/MetricsQL表达式。数据源地址:可访问的用于规则执行的VictoriaMetrics实例。NotifierAddress:可访问的Alertmanager实例,用于处理、聚合警报和发送通知。安装首先需要安装一个Alertmanager来接收告警信息。我们在前面的章节中已经进行了详细的讲解,这里不再赘述。对应的资源列表如下:#alertmanager.yamlapiVersion:v1kind:ConfigMapmetadata:name:alert-confignamespace:kube-vmdata:config.yml:|-global:resolve_timeout:5msmtp_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:falseroute:group_by:['severity','source']group_wait:30sgroup_interval:5mrepeat_interval:24hreceiver:emailreceivers:-name:'email'email_configs:-to:'xxxxxx@qq.com'send_resolved:true---apiVersion:v1kind:Servicemetadata:名称:alertmanager命名空间:kube-vm标签:app:alertmanagerspec:选择器:app:alertmanager类型:NodePort端口:-名称:web端口:9093targetPort:http---apiVersion:apps/v1kind:Deploymentmetadata:名称:alertmanager命名空间:kube-vm标签:app:alertmanagerspec:选择器:matchLabels:app:alertmanager模板:元数据:标签:app:alertmanager规范:卷:-名称:cfgconfigMap:名称:警报配置容器:-名称:alertmanager图像:prom/alertmanager:v0.21.0imagePullPolicy:IfNotPresentargs:-“--config.file=/etc/alertmanager/config.yml”端口:-containerPort:9093名称:httpvolumeMounts:-mountPath:“/etc/alertmanager"name:cfgAlertmanager这里我们只配置一个默认的路由规则,根据severity和source这两个标签进行分组,然后将触发的告警发送给邮件接收者接下来需要添加告警规则配置,配置方法同Prometheus:groups:-name:recordrules:-record:job:node_memory_MemFree_bytes:percent#记录规则名称expr:100-(100*node_memory_MemFree_bytes/node_memory_MemTotal_bytes)pod.yaml:|组:-名称:pod规则:-警报:PodMemoryUsage_memFree_bytes{setmo_pod_container!=""})BY(instance,pod)/sum(container_spec_memory_limit_bytes{pod!=""}>0)BY(instance,pod)*100>60对于:2m标签:严重性:警告来源:pod注释:摘要:“Pod{{$labels.pod}}检测到高内存使用率”描述:“{{$labels.instance}}:Pod{{$labels.pod}}内存使用率超过60%(当前值为:{{$value}})"node.yaml:|groups:-name:noderules:#具体报警规则-alert:NodeMemoryUsage#报警规则的名称expr:(node_memory_MemTotal_bytes-(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes))/node_memory_MemTotal_bytes*100>30for:1mlabels:source:node:severitynode::criticalannotationsinstance}}HighMemoryusagedetected"description:"{{$labels.instance}}:Memoryusageisabove30%(currentvalueis:{{$value}})"这里我们添加了一条记录规则和两条告警规则,更多的告警规则配置可以参考https://awesome-prometheus-alerts.grep.to/然后就可以部分配置vmalert组件服务了:#vmalert.yamlapiVersion:v1kind:Servicemetadata:name:vmalertnamespace:kube-vmlabels:app:vmalertspec:ports:-name:vmalertport:8080targetPort:8080type:NodePortselector:app:vmalert---apiVersion:apps/v1kind:Deploymentmetadata:name:vmalertnamespace:kube-vmlabels:app:vmalertspec:selector:matchLabels:app:vmalerttemplate:metadata:labels:app:vmalertspec:containers:-名称:vmalert图片:victoriametrics/vmalert:v1.77.0imagePullPolicy:IfNotPresentargs:--rule=/etc/ruler/*.yaml--datasource.url=http://vmselect.kube-vm.svc.cluster.local:8481/select/0/prometheus--notifier.url=http://alertmanager.kube-vm.svc.cluster.local:9093--remoteWrite.url=http://vminsert.kube-vm.svc.cluster.local:8480/insert/0/prometheus--evaluationInterval=15s--httpListenAddr=0.0.0.0:8080volumeMounts:-mountPath:/etc/ruler/name:rulerreadOnly:truevolumes:-configMap:name:vmalert-configname:在ruler上面的资源列表中,告警规则在volumes的形式挂载在容器中,规则文件的路径由-rule指定,vmselect的路径由-datasource.url指定,Alertmanager的地址由-notifier.url指定,-evaluationInterval参数为用于指定评估频率,因为我们这里添加了记录规则,所以还需要通过-remoteWrite.url指定远程写入地址,直接创建上面的资源列表即可完成部署。??kubectlapply-fhttps://p8s.io/docs/victoriametrics/manifests/alertmanager.yaml??kubectlapply-fhttps://p8s.io/docs/victoriametrics/manifests/vmalert-config.yaml??kubectlapply-fhttps://p8s.io/docs/victoriametrics/manifests/vmalert.yaml??kubectlgetpods-nkube-vm-lapp=alertmanagerNAMEREADYSTATUSRESTARTSAGEalertmanager-d88d95b4f-z2j8g1/1Running030m??kubectlgetsvc-nkube-vm-lapp=alertmanagerNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEalertmanagerNodePort10.100.230.29093:31282/TCP31m??kubectlgetpods-nkube-vm-lapp=vmalertNAMEREADYSTATUSRESTARTSAGEvmalert-866674b966-675nb1/1Running07m17s??kubectlgetsvc-nkube-vm-lapp=vmalertNAME类型集群-IP外部IP端口(S)AGEvmalertNodePort10.104.193.183<非e>8080:30376/TCP22m部署成功后,如果告警规则达到阈值,将触发告警。我们可以通过Alertmanager页面查看触发的告警规则:vmalert也提供了一个简单的页面可以查看所有Groups:还可以查看告警规则列表的状态:还可以查看具体告警规则的详细信息,如图下图:报警规则触发后如何发送,发送给哪个接收者,由Alertmanager决定。同样上面我们添加的记录规则会通过remotewrite传递给vminsert并保留,所以我们也可以通过vmselect来查询。至此,我们基本完成了使用vm代替prometheus进行监控告警。vmagent收集监控指标,vmalert用于告警监控,vmstorage存储指标数据,vminsert接收指标数据,vmselect查询指标数据。Prometheus是完全不需要的,而且性能非常高,需要的资源比prometheus低很多。