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

news2024/11/18 1:26:17

文章目录

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

app = 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.sender
            message['To'] = self.receiver

            subject = title
            message['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 True
            except smtplib.SMTPException as e:
                print("Error: 无法发送邮件", e)
                return False

    def 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://www.coloradmin.cn/o/113166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【问题记录与解决】TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

目录 一、报错内容二、尝试再运行(最终解决)一、报错内容 先来看报错截图: 再往上看看: 程序其实是正确执行了一部分的,可以看出首次运行时,是需要下载一些东西的。 二、尝试再运行(最终解决) 所测试的代码如下: # 昵 称:XieXu # 时 间: 2022/12/24/0024 18:44 fr…

刷机-把机顶盒当服务器使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、为啥要刷机顶盒什么?二、使用步骤1.拆机2.准备下载工具3.准备烧录软件和固件4.烧录5.如何使用总结前言 今天给大家分享一篇关于如何把机顶盒刷机…

国考省考行测:接语选择题,接下来最可能讲,上文可能谈,引言可能谈,有过渡句,看新主体,无过渡句,看主旨意思

国考省考行测:接语选择题,接下来最可能讲,上文可能谈,引言可能谈,有过渡句,看新主体,无过渡句,看主旨意思 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能…

vue3 +ts 第二篇

1.watch watchEffect 监听汇总 watchwatchEffect默认情况是惰性的,也就是说仅在侦听的源数据变更时才执行回调。不需要手动传入依赖更明确哪些状态的改变会触发侦听器重新运行副作用;会先执行一次用来自动收集依赖获取到侦听状态变化前后的值。无法获取…

【概念理解】内存对齐问题详述

内存之对齐,一文即可知 文章目录内存对齐1.概述2.如何进行内存对齐3.位域对齐大端存储与小端存储1.基本概念参考博客😊点此到文末惊喜↩︎ 内存对齐 1.概述 定义(什么是内存对齐) 编译器为程序中的每个数据单元安排在适当的位置…

【深入浅出Spring原理及实战】「开发实战系列」OAuth2的技术体系架构和开发概览

背景介绍 主要实现 OAuth2的三种授权模式:密码模式、客户端模式和授权码模式,包括展示授权服务器、资源服务器、客户端等几种角色的交互,以及JWT的整合。并且每个实例都提供两个代码版本:一个是基于旧的 Spring Security OAuth2 …

基于java学生成绩管理系统

开发工具eclipse,jdk1.8 技术:java swing 数据库:mysql5.7 学生选课系统功能:管理员、教师、学生三个角色 一、管理员功能: 1.登录、修改密码、退出系统 2.学生管理:添加、修改、删除、查询 3.班级管理&#x…

python文件夹拷贝思路

最近在做项目中,要使用python,对文件拷贝有了一些了解,这里将自己理解的文件拷贝整理出来。 如下所示,文件拷贝思路: 文件拷贝,从io上来说就是读文件,写文件到另一个指定的地方。 拷贝&#xff…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》

原论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 开源代码:https://github.com/ijkguo/mx-rcnn Parallel Faster R-CNN implementation with MXNet,使用MXNet实现快速并行的区域提议的卷积神经网络…

[oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程

查看进程 回忆上次内容 上次先ctrl z 挂起进程 然后运行 bg程序继续跑起来而且不断输出到标准输出流甚至连ctrl c 都无法结束进程了这可怎么办呢?只能新开一个终端想办法 查询进程 搜索 debian进程查询找到具体方法 进程 具体方法动手试试 新开一个终端 运行ps…

新冠阳性的第五篇博客,宝塔面板如何快速部署一个SpringBoot项目

宝塔面板如何快速部署一个SpringBoot项目1.删除旧版本的Java2.安装Java3.配置Java环境变量4.宝塔快速部署1.删除旧版本的Java 删除旧版本的Java,防止对我们的服务产生影响! 如果你的服务器上没有下载过Java,则跳过此步骤! 查找…

【K3s】第1篇 K3s入门级介绍及架构详解

目录 1、什么是 K3s? 2、为什么叫 K3s? 3、适用场景 4、架构详解 单节点架构 高可用架构 K3s高可用架构: 固定 agent 节点的注册地址 注册 Agent 节点 1、什么是 K3s? K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进…

SpringBoot图文详解 | 系统性学习 | 无知的我费曼笔记

无知的我复盘,顺便上传笔记。 对比Spring,SpringBoot 其实就是简化了固定的开发步骤。如坐标、Web3.0配置类、配置类 文章目录1 SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.…

【问题记录与解决】OSError: [WinError 127] 找不到指定的程序。

目录 一、报错记录二、尝试解决(已解决)2.1 先 卸载掉 几个与torch相关的模块2.2 重新下载几个模块,并分别安装一、报错记录 首先来看报错的截图: 报错的具体代码,可以看这里,和这里使用的一样的: 【Pytorch_Geometric】(GCN)基本使用:数据集与邻接矩阵格式,图形(…

河道水尺水位监测系统 基于opencv

河道水尺水位监测系统基于pythonopencv对现场画面中水位进行实时监测,当监测到画面中水位异常变化时,立即抓拍存档同步回传图片给后台。Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行,主要是因为它的简…

用Python写个实用工具 - TheFuck(命令纠正工具)

前言 哈喽啊,我亲爱的铁铁们,I am back ! 别管,我也是阳过的人了,这么久都没有更新,今天就带来个小玩意吧 我们在学习python的时候,有个小工具,是可以纠正我们写错的命令 The Fu…

React封装一个纯CSS实现的水滴样式的盒子

背景 刷B站刷到一个纯css实现的水滴效果的视频 感觉真不错,决定封装一个具有水滴效果的盒子(DIV) 涉及知识点 CSS样式,核心是这个和box-shadow阴影,实现水滴boder和阴影效果。JS控制CSS样式16进制的颜色(…

SpringBoot项目+注册功能实现

注册功能实现分析 目录 一、AppConfig.java 二、register.html 三、UserDto.java 四、UserController.java 五、UserMapper.xml 六、运行结果 一、AppConfig.java Configuration public class AppConfig implements WebMvcConfigurer {//统一视图跳转Overridepublic void…

(1)Qt的基本数据类型以及基本输出

基础类型 因为Qt是一个C框架, 因此C中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数据类型。 类型名称注释备注qint8signed char有符号8位数据qint16signed short16位数据类型qint32signed short32位有符号…

数据结构与算法java篇--二叉树

内容有点多,建议先收藏 目录 一.树的介绍 二.java代码实现树 1.Node类 2.Tree类 3.查找节点 4.插入节点 5.遍历树 5.1 中序遍历 5.2 前序遍历和后序遍历 6.查找最大值和最小值 7.删除节点 7.1 删除没有子节点的节点 7.2 删除有一个子节点的结点 7.3 删除…