文章目录

  • 一、概述
  • 二、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

配置如下:

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

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

  1. Grafana 告警模块介绍

    Grafana 系列文章,版本:OOS v9.3.1 Grafana 的介绍和安装 Grafana监控大屏配置参数介绍(一) Grafana监控大屏配置参数介绍(二) Grafana监控大屏可视化图表 ...

  2. 如何理解Eating这个词?云原生与微服务专场介绍

    点击上方"开源社"关注我们 | 作者:开源社 | 编辑:李明康 | 责编:袁睿斌 有一幅曾经传播很广的漫画,大意是:软件吞噬世界,开源吞噬软件.后来这个漫画又被人加了两条鱼:云计算 ...

  3. 云原生和云计算的区别介绍

    云应用程序是热门话题.很多时候,我们会遇到像云原生应用程序和云计算应用程序这样的术语.首先,很少有人同时使用这两个术语.但两者之间存在着模糊的界线.云原生和云计算的区别到底是什么呢?为什么它如此重要? ...

  4. 云原生及k8s组件简单介绍

    一.云原生 云原生景观图: https://landscape.cncf.io/ cncf官网: https://www.cncf.io/projects/ Graduated 毕业项目,可在生产中使 ...

  5. 创建程序集时元数据失败 -- 拒绝访问_Veeam 云原生数据管理解决方案 Kasten K10 介绍...

    温馨提示:本文大约4000字,阅读时间约为20分钟 作者: Mars Zhang 本文重要章节 行业趋势: 云原生的数据保护情况概览 企业需要K8S云原生保护的7个重要原因 Kasten K10 产品 ...

  6. 新年新目标:成为合格的云原生应用公民

    2020年无疑是特别的,我们在不平凡的这一年,经历着开局的艰难,以及随之而来的各种变化和冲击.好在,我们终于可以跟充满问号的2020年说"再见"啦. 今天是2021年第一天,不知道 ...

  7. Dapr 在阿里云原生的实践

    简介:Faas 场景下,比较吸引用户的是成本和研发效率,成本主要通过按需分配和极致的弹性效率来达成.而应用开发者期望通过 FaaS 提供多语言的编程环境,提升研发效率,包括启动时间.发布时间.开发的效 ...

  8. 腾讯TencentOS 十年云原生的迭代演进之路

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 TencentOS Server (又名 Ten ...

  9. .NET团队送给.NET开发人员的云原生学习资源

    企业正在迅速采用云的功能来满足用户需求,提高应用程序的可伸缩性和可用性.要完全拥抱云并优化节约成本,就需要在设计应用程序时考虑到云的环境,也就是要用云原生的应用开发方法.这意味着不仅要更改应用程序的构 ...

最新文章

  1. Mysql数据库中的as和distinct的使用
  2. 【期望】期望收益(金牌导航 期望-3)
  3. [vue] 实际工作中,你总结的vue最佳实践有哪些?
  4. service XXX does not support chkconfig(service报错)
  5. java 获取发布后的路径问题_Java中的路径问题实例分析
  6. 性能监控工具——Cacti安装文档
  7. java 不写this_还没弄明白Java中的this关键字吗,那来看这篇就够了!
  8. 数不清的Gmail邀请发放中……
  9. HDU4268 2012ACM长春赛区网络赛 Alice and Bob
  10. COGS2421 简单的Treap
  11. 阿里云部署hexo教程
  12. 自动连上dns服务器啥意思,自动分配DNS服务器和手动设置有什么区别
  13. android 驱动程序,安卓设备安装USB驱动程序教程
  14. e.target.dataset和e.currentTarget.dataset
  15. 【MySQL我可以讲一个小时】
  16. 查看docker里应用的版本
  17. php中table是什么意思,table标签是什么意思
  18. java sha1加密ascii码_MD5,SHA1,SHA256,SHA512等常用加密算法
  19. 虚拟化在防泄密领域的缺点
  20. Environment Variables

热门文章

  1. peerDependencies WARNING webpack-cli@* requires a peer of webpack@4.x.x || 5.x.x but none was instal
  2. R5661 系列单节锂电池保护芯片(带温度保护功能)
  3. 计算机ppt练习,计算机应能力训练.ppt
  4. 特斯拉电池组拆卸细节--BMS
  5. Vue-Cli3 MPA
  6. java月份_java 获取一定时间范围内的所有月份
  7. Java线程池的使用(合理设置线程池的大小)
  8. 什么是工业用计算机,工业电脑和普通电脑有什么不同?
  9. 「移动端」Android平台签名证书(.keystore)生成指南
  10. Apollo自动加载热更新