【云原生】Grafana Alerting 告警模块介绍与实战操作

article/2025/10/4 12:48:46

文章目录

    • 一、概述
    • 二、Grafana Alerting 模块介绍
    • 三、配置图表
    • 四、告警告警规则
    • 五、配置告警通道(Contact points)
      • 1)Email
        • 1、配置smtp(grafana.ini)
        • 2、配置消息模板
        • 3、配置告警通道
      • 2)WebHook
        • 1、编写webhook api服务
        • 2、在grafana页面上配置
      • 3)Alertmanager

一、概述

在版本4.0+ grafana中增加了Alerting 告警模块,丰富了grafana功能,以前告警需要借助AlertManager,但是有grafana告警模块之后就可以不使用AlertManager告警了,但是grafana也支持对接AlertManager,所以还是非常方面,又可以省区一个组件的维护和资源开销。

下图概述了 Grafana 告警的工作原理,并向您介绍了一些关键概念,这些概念协同工作并构成了我们灵活而强大的警报引擎的核心。
在这里插入图片描述

特征:

  • 一页包含所有警报:单个 Grafana 警报页面将 Grafana 管理的警报和驻留在与 Prometheus 兼容的数据源中的警报整合到一个位置。
  • 多维度告警:警报规则可以为每个警报规则创建多个单独的警报实例(称为多维警报),使你能够强大而灵活地通过单个警报来了解整个系统。
  • 路由警报:根据您定义的标签将每个警报实例路由到特定的联系点。通知策略是一组规则,用于将警报路由到联系点的位置、时间和方式。
  • 抑制告警:抑制告警允许您停止接收来自一个或多个警报规则的持久通知。您还可以根据特定条件部分暂停警报。
  • 抑制告警时间段:使用抑制告警时间段设置,您可以指定不希望生成或发送新通知的时间间隔。您还可以将警报通知冻结在重复时间段内,例如在维护期间。

官方文档:https://grafana.com/docs/grafana/latest/alerting/
关于Grafana其它模块的介绍可以参考我这篇文章:【云原生】Grafana 介绍与实战操作

告警配置全过程如下图:
在这里插入图片描述

二、Grafana Alerting 模块介绍

在这里插入图片描述

  • Alert rules(告警规则)——设置确定是否触发警报实例的评估条件。告警规则由一个或多个查询和表达式、条件、计算频率以及满足条件的持续时间(可选)组成。
  • Contact points(联络点即告警通道)——定义在警报触发时如何通知联系人。我们支持多种 告警通道,例如:邮件、webhook、alertmanager、钉钉等等。
  • Notification policies(通知策略)——设置警报的路由位置、时间和方式。每个通知策略指定一组标签匹配器,以指示它们负责哪些警报。通知策略分配有一个由一个或多个通知程序组成的联系点。
  • Silences(告警抑制)——可以设置某个时间段不告警,例如:系统升级或者阶段。

三、配置图表

图表配置可以参考我这篇文章:【云原生】Grafana 介绍与实战操作

四、告警告警规则

进入编辑界面,可以是下图Edit进入编辑界面,也可以通过快捷方式“选中图表-》按e
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置相关信息
在这里插入图片描述
配置link,可以在告警里显示,就可以跳转到相关监控项图表
在这里插入图片描述

告警状态变化Normal-》Padding-》Firing
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、配置告警通道(Contact points)

1)Email

1、配置smtp(grafana.ini)

[smtp]
enabled = true
host = "smtp.qq.com:465"
user = "xxxxxx@qq.com"
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = "xxxxxx"
;cert_file =
;key_file =
;skip_verify = false
from_address = xxxxxx@qq.com
from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS

【温馨提示】上面配置记得换成自己的邮箱密码。

重启grafana

systemctl restart grafana-server

2、配置消息模板

{{ define "myalert" }}[{{.Status}}] {{ .Labels.alertname }}Labels:{{ range .Labels.SortedPairs }}{{ .Name }}: {{ .Value }}{{ end }}{{ if gt (len .Annotations) 0 }}Annotations:{{ range .Annotations.SortedPairs }}{{ .Name }}: {{ .Value }}{{ end }}{{ end }}{{ if gt (len .SilenceURL ) 0 }}Silence alert: {{ .SilenceURL }}{{ end }}{{ if gt (len .DashboardURL ) 0 }}Go to dashboard: {{ .DashboardURL }}{{ end }}
{{ end }}{{ define "mymessage" }}{{ if gt (len .Alerts.Firing) 0 }}{{ len .Alerts.Firing }} firing:{{ range .Alerts.Firing }} {{ template "myalert" .}} {{ end }}{{ end }}{{ if gt (len .Alerts.Resolved) 0 }}{{ len .Alerts.Resolved }} resolved:{{ range .Alerts.Resolved }} {{ template "myalert" .}} {{ end }}{{ end }}
{{ end }}

3、配置告警通道

在这里插入图片描述
上面配置好后就等待着告警就ok了。告警信息示例如下:
在这里插入图片描述

2)WebHook

在这里插入图片描述

告警示例 JSON:

{"receiver": "My Super Webhook","status": "firing","orgId": 1,"alerts": [{"status": "firing","labels": {"alertname": "High memory usage","team": "blue","zone": "us-1"},"annotations": {"description": "The system has high memory usage","runbook_url": "https://myrunbook.com/runbook/1234","summary": "This alert was triggered for zone us-1"},"startsAt": "2021-10-12T09:51:03.157076+02:00","endsAt": "0001-01-01T00:00:00Z","generatorURL": "https://play.grafana.org/alerting/1afz29v7z/edit","fingerprint": "c6eadffa33fcdf37","silenceURL": "https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT2%2Cteam%3Dblue%2Czone%3Dus-1","dashboardURL": "","panelURL": "","valueString": "[ metric='' labels={} value=14151.331895396988 ]"},{"status": "firing","labels": {"alertname": "High CPU usage","team": "blue","zone": "eu-1"},"annotations": {"description": "The system has high CPU usage","runbook_url": "https://myrunbook.com/runbook/1234","summary": "This alert was triggered for zone eu-1"},"startsAt": "2021-10-12T09:56:03.157076+02:00","endsAt": "0001-01-01T00:00:00Z","generatorURL": "https://play.grafana.org/alerting/d1rdpdv7k/edit","fingerprint": "bc97ff14869b13e3","silenceURL": "https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT1%2Cteam%3Dblue%2Czone%3Deu-1","dashboardURL": "","panelURL": "","valueString": "[ metric='' labels={} value=47043.702386305304 ]"}],"groupLabels": {},"commonLabels": {"team": "blue"},"commonAnnotations": {},"externalURL": "https://play.grafana.org/","version": "1","groupKey": "{}:{}","truncatedAlerts": 0,"title": "[FIRING:2]  (blue)","state": "alerting","message": "**Firing**\n\nLabels:\n - alertname = T2\n - team = blue\n - zone = us-1\nAnnotations:\n - description = This is the alert rule checking the second system\n - runbook_url = https://myrunbook.com\n - summary = This is my summary\nSource: https://play.grafana.org/alerting/1afz29v7z/edit\nSilence: https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT2%2Cteam%3Dblue%2Czone%3Dus-1\n\nLabels:\n - alertname = T1\n - team = blue\n - zone = eu-1\nAnnotations:\nSource: https://play.grafana.org/alerting/d1rdpdv7k/edit\nSilence: https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT1%2Cteam%3Dblue%2Czone%3Deu-1\n"
}

这里通过python的去写webhook,因为条件有限,还是通过webhook转到邮箱发告警,一般企业会通过webhook转钉钉,微信,zabbix等等。

1、编写webhook api服务

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time     : 2022/12/24 11:03
# @Author   : liugp
# @Email    : liugp@163.com
# @File     : GrafanaWebHook.py
import json
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from flask import Flask, request
# pip3 install flaskapp = Flask(__name__)class GrafanaWebHook:def __init__(self):# 第三方 SMTP 服务信息self.mail_host = "smtp.qq.com"self.mail_user = "xxxxxx@qq.com"self.mail_pass = "xxxxxx"self.sender = "xxxxxx@qq.com"self.receiver = "xxxxxx@163.com"  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱def send_mail(self, title, status, messages):print(messages)for message in messages:message['panelURL'] = str(message['panelURL']).replace("localhost:3000","192.168.182.110:3000")print(message)if not 'description' in message['annotations'].keys():message['annotations']['description'] = "test"message = MIMEText('grafana alert:' + title + '\n告警时间:' + str(message['startsAt']) +'\n告警状态:' + str(status) + '\n告警内容:' + str(message['annotations']['description']) + '\n告警面板:' + str(message['silenceURL']) + '', 'plain', 'utf-8')message['From'] = self.sendermessage['To'] = self.receiversubject = titlemessage['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP_SSL(self.mail_host, 465)smtpObj.login(self.mail_user, self.mail_pass)smtpObj.sendmail(self.sender, self.receiver, message.as_string())print("邮件发送成功")return Trueexcept smtplib.SMTPException as e:print("Error: 无法发送邮件", e)return Falsedef getAlertData(self):alertData = request.get_data()# 将str类型的数据转换为dict类型alertData = json.loads(alertData)#print(alertData)return alertData@app.route('/webhook', methods=["POST"])
def webhook_server():gw = GrafanaWebHook()alertData = gw.getAlertData()title = alertData['title']status = alertData['status']messages = alertData['alerts']ret = gw.send_mail(title, status, messages)if ret:return {"status":"ok"}else:return {"status":"error"}if __name__ == "__main__":app.run(debug=False, host='0.0.0.0', port=18088)

【温馨提示】使用时注意把上面的邮箱和密码修改哦!!!

在这里插入图片描述

2、在grafana页面上配置

在这里插入图片描述

配置好后就可以等待告警,告警示例如下:
在这里插入图片描述

3)Alertmanager

配置如下:
在这里插入图片描述
这里主要讲了三种告警通道,其它告警通道小伙伴可以自行测试验证,有疑问的小伙伴也欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~

在这里插入图片描述


http://chatgpt.dhexx.cn/article/jGmQGFeO.shtml

相关文章

alertmanager 简介

alertmanager 简介 tags: alertmanager 文章目录 alertmanager 简介1. 前言2. 架构3. 特性3.1 group(分组)3.2 Inhibition(抑制)3.3 Silences(静默) 1. 前言 Prometheus的报警功能主要是利用Alertmanager…

JS中alert的三种使用方式

JS中的alert&#xff0c;作用是在浏览器中弹出一个警告框。 而使用alert&#xff0c;有三种方式&#xff0c;不同的方式&#xff0c;所呈现的效果也不相同。 第一种方式&#xff1a;直接写在script标签中 代码如下&#xff1a; <!DOCTYPE html> <html><head&…

alert弹窗

如何制作一份漂亮的alert弹出框&#xff1f; 在web项目中&#xff0c;往往会用到alert弹出框&#xff0c;但是原生的js弹出框样式丑陋无法满足你的需求&#xff0c;这时你该怎么办呢&#xff1f; 我的做法是&#xff1a;重写window.alert方法。它的好处是不依赖其他组件&…

Kibana:Alerting - 警报介绍

在我之前的很多文章中&#xff0c;我都介绍了 Alerting。你可以在 “Elastic&#xff1a;菜鸟上手指南” 中的 “通知及警报” 一节找到。在今天的文章中&#xff0c;我将使用最新的 7.13 版本来展示如何使用规则&#xff08;rules&#xff09; 来检测复制条件下的 alerts。 警…

k8s--基础--26.7--监控告警系统--Alertmanager--发送报警到qq邮箱,钉钉

k8s–基础–26.7–监控告警系统–Alertmanager–发送报警到qq邮箱&#xff0c;钉钉 1、创建alertmanager-cm.yaml文件 在master1节点操作 1.1、脚本 vi /root/k8s/monitor/alertmanager-cm.yaml内容 kind: ConfigMap apiVersion: v1 metadata:name: alertmanagernamespace:…

lazarus Textout中文字符串乱码

https://wenda.so.com/q/1560151974218812 lazarus Textout中文字符串乱码 5取nmlgb10级分类&#xff1a;编程开发被浏览146次2019.06.10 检举 我用Textout在窗口输出 你好系统却显示其它字体&#xff0c;求懂内行的帅哥美女指教一下&#xff0c;这是我的代码 TextOutA(hdcb,10…

VS2010 MFC TextOut垂直显示内容的显示、清除和修改

学习MFC&#xff0c;用到垂直显示内容&#xff0c;在网上查找了一些方法&#xff0c;做一下总结。 在View类的头文件中增加CString m_strLeft&#xff1b; 在View类中增加WM_PAINT消息的函数OnPaint&#xff08;&#xff09;&#xff0c;设置输出字体&#xff0c;设置颜色 CPai…

CDC在OnPaint函数中采用TextOut函数初始化静态文本框

创建静态文本框之后如果想要在程序段中初始话文本框中的内容可以采用CDC类中的TextOut()函数&#xff0c;但是如果在OnPaint&#xff08;&#xff09;中直接书写代码会导致待输出字符被静态文本框覆盖这是因为对话框上的文本控件是在对话框显示后才画上去的&#xff0c;所以用t…

8.向窗口输出文字 : TextOut 和 DrawText 函数

使用 DrawText() 向客户区的中间位置输出了一段文本&#xff0c;说一下文字的输出。 设备环境&#xff08;DC&#xff09; 在Windows中&#xff0c;一切能在显示器上看到的都是图形&#xff0c;不但包括点、线、矩形、圆等&#xff0c;也包括文字、字体。对用户来说文字和图片…

pdc-textout(_PDC-结论

pdc->textout( Oh, yes, PDC was the shiznit. We learned about the Pillars of Longhorn: 哦&#xff0c;是的&#xff0c;PDC真是愚蠢。 我们了解了Longhorn的Struts&#xff1a; Lornhorn - Its ALPHA, but its real. Feel free to peruse the SDK. Theres 3 years of…

封印(TextOut函数实际应用)

C中有一个函数&#xff1a;TextOut&#xff0c;这个函数有很多分枝&#xff0c;TextOutA&#xff0c;TextOutW。。。。都在windows.h头文件里面 这个函数干嘛用呢&#xff1f;就是在给定的HDC中显示文字。。 结果被我们坑人党知道了 嘿嘿嘿&#xff0c;于是我们写了个东西&am…

windows文本绘制 TextOut、DrawText、CreateFont、SetTextColor、SetBkColor、SetBkMode

文本绘制 TextOut-将文字绘制在指定坐标位置 DrawText-在矩形区域绘制字符串 int DrawText(HDC hdc, //DC句柄LPCSTR lpString, //字符串int nCount, //字符串长度LPRECT lpRect, //绘制文字的矩形框UINT uFormat //绘制的方式,重点&#xff0c;花样繁多的关键点 );绘制文字样…

MFC textout()输出字体设置

//设置字体 CFont font; font.CreateFont(33, // 字体的高度 0, // 字体的宽度 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight 字体的粗细FALSE, // bItalic 字体是否斜体 FALSE, …

gdi 编程c语言pdf,二、Windows编程GDI—TextOut细节

TextOut是用于显示文字的最常用的GDI函数。语法是&#xff1a; TextOut (hdc, x, y, psText, iLength) ; 以下将详细地讨论这个函数。 第一个参数是设备内容句柄&#xff0c;它既可以是GetDC的传回值&#xff0c;也可以是在处理WM_PAINT消息时BeginPaint的传回值。 设备内容的属…

中年人学C语言Windows程序设计,3 窗口中文本的输出TextOut

中年人学C语言Windows程序设计&#xff0c;3 文本的输出TextOut 函数功能 TextOut 函数使用当前选择的字体、背景颜色和文本颜色&#xff0c;将一个字符串绘制于窗口的指定位置。 API 函数原型&#xff1a; 注释&#xff1a;In 说明该参数是输入的&#xff0c;opt 说明该参…

c语言textout字体大小,《WINDOWS程序设计》第四章关于TEXTOUT的小问题

《WINDOWS程序设计》第四章关于TEXTOUT的小问题 文章原文是这样说的&#xff1a; 您会发现常常需要显示格式化的数字跟简单的字符串。我在第二章讲到过&#xff0c;您不能使惯用的工具(可 爱的printf 函数)来完成这项工作&#xff0c;但是可以使用sprintf 和Windows 版的sprint…

c语言textout字体大小,textout函数怎么用

MFC里 用pDC->TextOut 这个函数怎么实现未知数据输我最近刚开始学计算机图形学还是个纯小白…… 不大懂 想问各路大神。比如欢迎来到CSS布局HTML,TextOut 是用来输出文本的;你说的问题,我看了半天没看懂,你可以是想先格式化字符串再输出是吧,可以如下: 用CString格式化…

Windows API——TextOut()函数学习

1.函数功能 The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color. TextOut函数使用当前选定的字体、背景颜色和文本颜色在指定位置写入字符串。 2.函数原型 BOOL TextOutA( …

35.文本输出函数TabbedTextOut、ExtTextOut、TextOut、SetBkColor

TextOut和TabbedTextOut、ExtTextOut的区别 TextOut是简单文本输出&#xff0c;不带格式的&#xff0c;可以控制文本的对齐方式 TabbedTextOut是可以控制带\t&#xff08;制表符号&#xff09;的文本 ExtTextOut是在TextOut的基础上&#xff0c;增加字符间距、背景颜色和剪裁框…

windows编程之TextOut与DrawText -- 文本输出实验

文章目录 windows编程之TextOut与DrawText -- 文本输出实验实验名称实验目的实验要求实验源码思考题 windows编程之TextOut与DrawText – 文本输出实验 实验名称 实验3-2-文本输出实验 实验目的 1&#xff0e;掌握常用的文本输出函数TextOut、DrawText的使用&#xff0c;熟悉其…