Author:rab
官方文档:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale/install/ibex/
目录
前言
夜莺通过 ibex 模块做告警自愈脚本的下发执行,Ibex 是告警自愈功能依赖的模块,提供一个批量执行命令的通道,可以做到在告警的时候自动去目标机器执行脚本。与 n9e 一样,ibex 采用 C/S 架构,因此,ibex 包括 server 和 agentd 两个模块,agentd 周期性调用 server 的 rpc 接口,询问有哪些任务要执行,如果有分配给自己的任务,就从 server 拿到任务脚本信息,在本地 fork 一个进程运行,然后将结果上报给服务端。为了简化部署,server 和 agentd 融合成了一个二进制,就是 ibex,通过传入不同的参数来启动不同的角色。ibex 架构图如下:
官方说,这是物理机时代的产物,我认为并不一定,这得看你的实际业务场景,即便你是云场景,脚本自愈有时候也是必须的。
注意的是,ibex 并没有 Web UI,它只提供了 API 接口。服务端依赖于 MySQL,因此我们也需要部署其后端存储(MySQL)。
接下来,将演示通过自愈脚本实现 nginx 服务宕机后的重启功能。
一、部署
1.1 MySQL
1、MySQL 安装
注意:MySQL 我们就不需要再次安装了,沿用我们前面 n9e 的 MySQL 实例即可。
2、初始化 SQL
初始化 SQL 去其官方的 Github 去找:https://github.com/flashcatcloud/ibex
上传 SQL 文件至服务器相关目录并执行 SQL 初始化:
mysql> source /opt/tools/ibex.sql
3、验证
4、创建一个 ibex 用户
CREATE USER 'ibex'@'%' IDENTIFIED BY '67by5DV7vK3fiygm';
GRANT ALL PRIVILEGES ON ibex.* TO 'ibex'@'%';
flush privileges;
1.2 Ibex Server
为了方便管理,我们 Ibex 服务端与 n9e 服务端推荐部署在同一节点(Host)上。
1、二进制包下载
2、解压
tar xzf ibex-v1.2.0-linux-amd64.tar.gz -C /data/
3、配置
vim /data/ibex-v1.2.0-linux-amd64/etc/server.conf
# 20090是RPC远程过渡调用协议的端口,即agentd周期性调用server接口的端口
数据库配置:
4、启动
cat <<EOF >/etc/systemd/system/ibex-server.service
[Unit]
Description="ibex-server"
After=network.target
[Service]
Type=simple
ExecStart=/data/ibex-v1.2.0-linux-amd64/ibex server
WorkingDirectory=/data/ibex-v1.2.0-linux-amd64
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=ibex-server
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start ibex-server.service
systemctl enable ibex-server.service
systemctl status ibex-server.service
1.3 Ibex Agent
官方文档说了:为了简化部署,server 和 agentd 融合成了一个二进制,就是 ibex,通过传入不同的参数来启动不同的角色。
也就是说我们下载的 ibex 二进制包中只有一个可执行文件,即 ibex:
- 如果你要启动服务端,运行:
./ibex server
- 如果你要启动客户端,运行:
./ibex agentd
但是这里你会想到:是不是我所有的目标主机都得安装 Ibex agent 端呢?答案是显然的,但是官方为了方便,已经将客户端集成到了 Categraf 采集插件中了,也就是说你无需再在目标主机再次下载 ibex 安装包并执行 ./ibex agentd
安装客户端了,但前提是你的目标主机要有 Categraf 采集客户端。
接下来就是在 Categraf 中配置 Ibex。
vim /data/categraf-v0.3.45-linux-amd64/conf/config.toml
如果你是边缘式下沉混杂部署,且中心与边缘是不同的 VPC,那需要填写 Ibex Server 的公网 IP 地址。
二、验证
2.1 n9e 上配置告警自愈
因为 n9e 发出的告警要与 Ibex 自愈服务有“联系”
,才能实现告警自愈,说白了就是设置 n9e 触发告警后的回调地址。
Address:ibex-server 端的监听地址
BasicAuthUser:ibex-server 鉴权用户
BasicAuthPass:ibex-server 鉴权密码
Timeout:超时时间(s)
2.2 创建自愈脚本
在对应的业务组中创建自愈脚本。
注意,上图中的 Host 机器列表,要对应下面的机器列表(也就是说你的机器要存在):
OK,如下就是我们配置好的自愈脚本,注意其 ID,在回调地址中有用
2.3 告警规则配置回调地址
1、找到对应的告警规则
2、点击进去后配置回调地址
回调地址说明:
${ibex}/1
,其中 ${ibex}
表示获取 ibex 变量,其实就是要执行与 ibex 自愈的相关调用,1
表示要调用并执行 ID 为 1 的自愈脚本。
2.4 模拟 Nginx 故障
停掉 Nginx:
systemctl stop nginx.service
因为这个告警规则接入了钉钉,此时我的钉钉已经收到告警消息:
如下图,共有两条告警,说明触发告警后,执行了自愈脚本。
我们来看看是否在告警后执行自愈脚本:
点击进去:
可看到状态是 SUCCESS
继续点击 stdout:
因为我的脚本中是一个启动命令,并没有标准输出,所以这里只显示了主机名
总结
- ibex 与 n9e 类似,是一个 C/S 架构,但是只提供 API 调用,没有 Web UI。
- 告警自愈涉及三个模块:n9e(创建任务),ibex(ibex-sever,收集任务)和 categraf(ibex-agent,执行任务)。