细说夜莺监控系统告警自愈机制

虽说监控系统最侧重的功能是指标采集、存储、分析、告警,为了能够快速恢复故障,告警自愈机制也是需要重点投入建设的,所有可以固化为脚本的应急预案都可以使用告警自愈机制来快速驱动。夜莺开源项目从 v7 版本开始内置了告警自愈模块,本文将详细介绍告警自愈的原理和实现。

夜莺项目介绍

夜莺监控是一款开源云原生观测分析工具,采用 All-in-One 的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力。夜莺于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 100 多个版本。

夜莺最初由滴滴开发和开源,并于 2022 年 5 月 11 日,捐赠予中国计算机学会开源发展委员会(CCF ODC),为 CCF ODC 成立后接受捐赠的第一个开源项目。夜莺的核心研发团队,也是 Open-Falcon 项目原核心研发人员,从 2014 年(Open-Falcon 是 2014 年开源)算起来,也有 10 年了,只为把监控这个事情做好。

夜莺项目的 Github 地址是:GitHub - ccfos/nightingale: An all-in-one observability solution which aims to combine the advantages of Prometheus and Grafana. It manages alert rules and visualizes metrics, logs, traces in a beautiful web UI.,国内用这个开源项目的公司也比较多了,我就不过多介绍了。直接开始正题。

告警自愈原理

夜莺告警引擎在产生告警事件之后,除了可以通过多种通知媒介通知相关人员,也可以自动化的执行某个动作。主要是通过两种方式来驱动这些自动化动作:

  • Webhook:通过 Webhook 的方式把告警事件推送到外部系统,外部系统可以根据告警事件的内容来执行相应的动作
  • 脚本:直接到告警的机器上(或者指定的中控机)执行脚本,脚本可以是 shell 脚本、python 脚本、bat 脚本等等

本文重点讲解的是第二种,通过脚本的方式。

要能够去告警的机器上执行脚本,机器上需要部署一个 agent,这个 agent 周期性和服务端发起心跳,拉取要执行的脚本,并把脚本的执行结果上报给服务端。在夜莺的生态里,这个 agent 就是 categraf。

告警事件产生之后,告警引擎发现这个事件需要执行自愈动作,就会在服务端创建一个脚本任务,等着 agent 来拉取执行。所以本质上,是告警引擎 + 命令执行通道共同协作达成了告警自愈的效果。

部署配置

首先需要夜莺 v7.0.0-beta.2.0.1 以上的版本,之前的版本也有告警自愈的能力,但之前的版本需要额外安装部署 ibex 模块,从这个版本开始就不需要单独的 ibex 模块了。

修改夜莺服务端的配置

在夜莺的配置文件:etc/config.toml 中搜索 Ibex,把 Enable 设置为 true:

[Ibex]
Enable = true
RPCListen = "0.0.0.0:20090"

重启夜莺,让配置生效。此时通过 ss 或 netstat 命令可以看到夜莺服务端监听了 20090 端口。这是 categraf 拉取脚本任务、上报脚本结果的端口。

ss -tln|grep 20090

注意

如果夜莺使用的数据库连接账号是具备建表权限的,进程启动之后会自动创建 ibex 相关的表,就是告警自愈相关的表,如果夜莺使用的数据库连接账号没有建表权限,就需要手工建表了,建表 sql 在这里:https://github.com/flashcatcloud/ibex/blob/master/sql/ibex.sql 注意,从第 7 行开始复制,把这些表建到夜莺的库(默认是 n9e_v6)里,不要建到 ibex 库里了。老版本的告警自愈依赖单独的 ibex 模块,ibex 模块用的库是 ibex 库,现在夜莺新版本内置了 ibex 的能力,数据库也就合并到一起了。

如果你是从老版本的夜莺升级上来的,需要把之前的 ibex 库中的表迁移到 n9e_v6 库中,迁移命令如下:

mysqldump -u username -p ibex > ibex.sql
mysql -u root -p n9e_v6 < ibex.sql

修改 categraf 的配置

categraf 的配置文件是 conf/config.toml。在 conf/config.toml 中搜索 ibex,把 enable 设置为 true,并正确配置夜莺服务端的地址和端口:

[ibex]
enable = true
interval = "1000ms"
servers = ["127.0.0.1:20090"]
meta_dir = "./meta"

如果你的机器量比较大,比如超过 10000 台,建议把 interval 调整的稍微大一些,比如 2500ms,要不然容易给服务端造成太大压力。servers 配置是个数组,配置所有的夜莺服务端的地址,如果你有多个夜莺服务端实例,categraf 启动的时候会自动探测,连到那个网络延迟最小的实例上,如果夜莺服务端实例挂了,categraf 会自动切换到另外一个实例上,保证高可用。

改完配置之后重启 categraf,让配置生效。

注意

如果使用了夜莺的边缘部署模式,这里的 servers 就配置为 n9e-edge 的地址即可。当然,边缘模式的话 n9e-edge 的配置文件中要开启 Ibex。

测试命令通道

告警自愈依赖命令通道,我们先来测试一下命令通道是否正常。其实即便不用告警自愈,命令通道也是很有用的,可以用来批量远程执行命令,比如批量重启服务、批量清理日志、批量执行命令查看输出、批量安装个软件等等。

20240507183735

去机器列表里,选中要执行命令的机器,点击标识栏上面的复制按钮,复制相关的机器标识,然后去【告警自愈】-【任务】页面,创建临时任务。把刚才复制的机器列表填写到 Host 框中,然后在 Script 中填写要执行的脚本内容即可。默认 Script 中已经有一个 ss -tln 的命令了,可以不用修改直接执行。

20240507184345

执行完成之后,结果如下,可以点击 stdouts 查看所有机器的脚本执行的 stdout 结果:

20240507184526

创建任务的时候,字段内容比较多,各个字段都有说明,我这里就不赘述了。核心就是去一批机器上跑个脚本。因为要跑脚本,需要控制权限,如果是 Admin 账号,所有机器都可以执行命令,如果是普通账号,只能去有权限的机器上执行脚本,哪些机器有权限?就看我管理了哪些业务组,我管理的这些业务组下的机器我就有权限。

创建自愈脚本

命令通道测通了。接下来就是和监控告警引擎联动,让告警事件产生的时候自动创建一个脚本任务,让 agent 去执行这个脚本任务。创建自愈脚本的菜单入口:【告警自愈】-【脚本】,比如我创建了如下脚本:

20240507185302

自愈脚本创建的时候,Host 字段留空即可。因为告警的时候才知道具体是哪个机器触发告警,Host 字段会被告警引擎动态填充。自动创建脚本任务。

当然,上面这些脚本都是我随便写的,仅做演示用。假设我现在要创建一个告警规则:“机器磁盘快满了”,如果触发告警,就自动执行 ID 为 19 的脚本,此时要怎么做呢?很简单,在告警规则里配置一个回调地址 ${ibex}/19 即可:

20240507185742

这样,当告警事件产生的时候,告警引擎会自动创建一个脚本任务,让 agent 去执行这个 ID 为 19 的脚本。这个脚本任务的执行结果会上报给服务端,你可以在【告警自愈】-【任务】页面查看这个任务的执行结果。

通常一个告警规则对应一个自愈脚本,如果想把脚本做的很通用,想用一个脚本干很多事,应对不同的场景。那就需要在脚本里拿到告警事件的详情,然后根据告警事件中的信息来做不同的处理。这个夜莺也是支持的,夜莺会把告警事件的关键信息放到脚本的 stdin 中传给脚本,你就可以在脚本里通过 stdin 拿到告警事件的内容了,比如我们准备一个这样的告警自愈脚本:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import sys
import jsonpayload = json.load(sys.stdin)
print(payload)

这是一个很简单的 Python 脚本,从 stdin 中读取内容,json decode(夜莺把告警事件关键信息组装成一个 json map 塞入 stdin,所以脚本这里要 json decode 一下) 一下放到 payload 变量里,然后用 print 把 payload 打印出来。打印的结果如下:

{'__name__': 'system_load_norm_1', 'alert_severity': '2', 'alert_trigger_value': '0.195', 'env': 'ENV', 'ident': 'dev-n9e-01', 'rulename': '测试告警自愈参数-勿删23'}

嗯,nice~ 这样我们就可以在脚本里根据告警事件的内容来做不同的处理了。

注意:告警事件中需要有 ident 标签(表示是哪个机器告警了),ident 对应的机器需要在机器列表里,且告警规则的最后修改人对这个机器有操作权限,夜莺才会去对应的机器执行脚本。

参考资料

  • 夜莺监控官方文档: 告警自愈 - 快猫星云
  • categraf 项目地址: https://github.com/flashcatcloud/categraf
  • ibex 项目地址:GitHub - flashcatcloud/ibex

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8763.shtml

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

相关文章

blender导出gltf模型混乱

最近用户给了几个blender文件&#xff0c;在blender打开是这样的&#xff1a; 我导出成gltf候&#xff0c;在本地打开时&#xff0c;底部发生了改变&#xff1a; 可以看出来&#xff0c;底部由原来的类型box变为了两个平面&#xff0c;后来我查了下blender里的属性设置&#xf…

Python | Leetcode Python题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; class Solution:def sortColors(self, nums: List[int]) -> None:n len(nums)p0, p2 0, n - 1i 0while i < p2:while i < p2 and nums[i] 2:nums[i], nums[p2] nums[p2], nums[i]p2 - 1if nums[i] 0:nums[i], nums[p0] num…

指针与const

指针与const 定义的对象中加上const 关键字&#xff0c; 表达一经初始化就不可修改的特性const 对象必须初始化 指针与constconst char* pc;指向常量的指针pc 初始化可以指向常量字符串&#xff0c; 内容不可以修改&#xff0c;但是指针指向可以修改char* const cp;指向char …

ESD静电问题 | 案例

【转自微信公众号&#xff1a;EMC容冠电磁】

相亲系统功能介绍

相亲系统是一种旨在帮助单身人士寻找合适伴侣的平台&#xff0c;其主要功能通常包括以下几个方面&#xff1a; 实名认证&#xff1a;为了确保双方的权益保障&#xff0c;用户必须进行实名认证后才能使用该系统。这有助于增加系统的安全性和可信度。偏好选择&#xff1a;用户可…

网络安全之ACL

ACL&#xff1a;访问控制列表——控制列表&#xff08;策略列表&#xff09;&#xff0c;是一个控制工具。 功能&#xff1a;&#xff01;、定义感兴趣路由&#xff08;控制层面&#xff09;。2、定义感兴趣流量&#xff08;数据层面&#xff09;。 例如&#xff1a; 假设在该…

数字孪生涉及到的前沿技术:虚拟现实 人工智能 区块链 边缘计算。

数字孪生是各类技术的综合应用&#xff0c;除了咱们常见的传感器、数据采集、清洗、传输、建模、可视化技术外&#xff0c;还有还有一些前沿技术&#xff0c;会让数字孪生更加强大和智能&#xff0c;本文介绍几个。 虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#x…

京东运营大基本功:店铺八大数据分析 | 店铺所有商品API采集接口

数据分析是京东运营的基本功&#xff0c;想要做好京东运营&#xff0c;那么你就一定要掌握数据分析的技能&#xff0c;数据分析我们需要采集大量数据&#xff0c;这时候我们就要京东电商数据采集API接口&#xff0c;今天就重点来给大家讲讲关于数据分析的道与术。 01 一、分析…

抖音小店怎么找达人带货的?分享几个成功率超高的沟通话术!

哈喽~我是电商月月 做抖音小店&#xff0c;特别是无货源的商家想要更多的流量&#xff0c;必定会尝试直播卖货&#xff0c;不会自己直播卖货&#xff0c;就会开通精选联盟&#xff0c;在里面找达人合作 那精选联盟到底是怎样找达人带货的呢&#xff1f; 有的达人打招呼了根本…

五、Redis五种常用数据结构-SET

Redis的Set结构存储的数据和Java中的HashSet类似&#xff0c;都是无序且不重复的。其底层的数据结构有两种&#xff0c;一是当value为整数时&#xff0c;且数据量不大时采用intset来存储。其他情况使用dict字典存储。集合中最多存储232-1(40多亿)个数据。 1、常用命令 sadd k…

游戏行业干货分享 | 游戏行业非技术岗盘点

在游戏行业&#xff0c;除了技术开发岗位外&#xff0c;还有许多非技术岗位对游戏的成功至关重要。以下是一些游戏行业非技术岗位的盘点&#xff0c;以及它们各自的职责和对游戏项目的贡献&#xff1a; 以游戏上线为目的&#xff0c;从游戏研发到游戏发行会有如下岗位配置 这里…

【AIGC】重塑未来的科技巨轮

AIGC&#xff1a;重塑未来的科技巨轮 一、AIGC&#xff1a;从历史走来&#xff0c;向未来进发二、AIGC的三项核心技术三、AIGC的应用与未来 在当今科技飞速发展的时代&#xff0c;AI&#xff08;人工智能&#xff09;已经成为了一个无法忽视的热词。而与其紧密相连的AIGC&#…

等保测评二级有哪些标准

等级保护测评&#xff08;等保测评&#xff09;是中国的一项网络安全标准&#xff0c;旨在评估和确保关键信息基础设施的安全。二级等保测评是适用于一般级别的信息系统&#xff0c;这些系统一旦受损&#xff0c;可能会对社会秩序、公共利益和公民权利造成一定程度的影响。 二级…

【论文阅读】<YOLOP: You Only Look Once for PanopticDriving Perception>

Abstract 全视驾驶感知系统是自动驾驶的重要组成部分。一个高精度的实时感知系统可以帮助车辆在驾驶时做出合理的决策。我们提出了一个全视驾驶感知网络&#xff08;您只需寻找一次全视驾驶感知网络&#xff08;YOLOP&#xff09;&#xff09;&#xff0c;以同时执行交通目标检…

C++ 对象型参数和返回值

对象型参数和返回值 1.对象型类型作为函数的参数2.对象型参数作为函数的返回值 1.对象型类型作为函数的参数 使用对象类型作为函数的参数或者返回值&#xff0c;可能会产生一些不必要的中间对象 例子&#xff1a; // 使用对象类型作为函数的参数 void test1(Car car) {}完整代…

2024北京市人工智能大模型行业应用分析报告

来源&#xff1a;北京市科学技术委员会 方向一为基于AIGC技术的智能审计合规研究&#xff0c;由北京银行提出&#xff0c;以 提高审计工作效率和准确性为核心目标&#xff0c;需要参赛企业针对检查内容&#xff0c; 利用大模型技术寻找并给出相关现象涉及的制度名称及相关原文…

纯血鸿蒙app vs 安卓app:优势一目了然

前言 随着科技的飞速发展&#xff0c;移动操作系统已经渗透到我们生活的每个角落。在这个竞争激烈的领域&#xff0c;华为的鸿蒙操作系统凭借其独特优势&#xff0c;正在逐步改变我们的使用体验。 那么&#xff0c;对比安卓app&#xff0c;鸿蒙app的优势在哪&#xff1f; 跑…

解决Tomcat日志乱码问题

1、 修改apache-tomcat-10.1.23/conf/server.xml URIEncoding"UTF-8"2、 修改apache-tomcat-10.1.23/conf/logging.properties # java.util.logging.ConsoleHandler.encoding UTF-8 java.util.logging.ConsoleHandler.encoding GBK参考 https://www.jb51.net/ar…

Github的使用教程(下载项目、寻找开源项目和上传项目)

根据『教程』一看就懂&#xff01;Github基础教程_哔哩哔哩_bilibili 整理。 1.项目下载 1&#xff09;直接登录到源码链接页或者通过如下图的搜索 通过编程语言对搜索结果进一步筛选。 如何去找开源项目&#xff1a;(Github 新手够用指南 | 全程演示&个人找项目技巧放…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点&#xff1a;动态图片分帧提取 easyshell考点&#xff1a;流量分析 冰蝎3.0 Webphpsql考点&#xff1a;sql万能钥匙 fileit考点&#xff1a;xml注入 外带 Cryptosecretbit考点&#xff1a;代码阅读…