sysSentry软件安装与使用
安装sysSentry巡检框架
环境准备
- 安装openEuler-20.03-LTS-SP4系统,安装方法参考 《安装指南》。
- 安装sysSentry需要使用root权限。
安装操作
配置yum源
在/etc/yum.repos.d/创建新的repo文件(eg. /etc/yum.repos.d/openEuler.repo),文件内容如下:
[root@openEuler ~]# cat /etc/yum.repos.d/openEuler.repo [osrepo] name=osrepo baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP4/OS/$basearch/ enabled=1 gpgcheck=0 [everything] name=everything baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP4/everything/$basearch/ enabled=1 gpgcheck=0 [update] name=update baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP4/update/$basearch/ enabled=1 gpgcheck=0 [source] name=update baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP4/source/ enabled=1 gpgcheck=0安装sysSentry
[root@openEuler ~]# yum install -y sysSentry pyxalarm
启动sysSentry巡检框架
sysSentry巡检框架提供三个相互独立的服务:
- xalarmd服务,用于汇总巡检插件的告警信息,并向已注册告警的用户转发告警信息。
- sentryCollector服务,用于周期性采集系统数据并提供给巡检插件。
- sysSentry服务,用于管理巡检插件的服务。
三个服务均由systemd进行控制,用户在启动sysSentry时可仅启动需要的系统服务即可。
启动xalarmd服务
适用场景
- 当巡检插件使用libxalarm或pyxalarm软件提供的接口,进行告警上报时,需要启动xalarmd服务;
- 如需使用以下sysSentry提供的插件,请启动xalarmd服务:
- 平均阈值慢io检测插件 -- avg_block_io
- AI阈值慢io检测插件 -- ai_block_io
xalarmd服务配置介绍
xalarmd服务配置的路径位于/etc/sysSentry/xalarm.conf,以下为配置参数:
| 配置段 | 配置项 | 配置项说明 | 默认值 | 必选 |
|---|---|---|---|---|
| [filter] | id_mask | 需要上报的告警类型id,不同id使用","分割,也可以用"-"连接连续的告警范围 | 1001-1128 | Y |
| [log] | level | 日志打印等级,分为debug/info/warning/error/critical五级 | info | Y |
用户可自行调整参数配置,或直接采用默认配置,默认配置内容如下:
[filter]
id_mask = 1001-1128
[log]
level=info
启动方式
[root@openEuler ~]# systemctl start xalarmd
启动后可查询运行状态,状态为running即为成功:
[root@openEuler ~]# systemctl status xalarmd
(可选)设置开机启动
[root@openEuler ~]# systemctl enable xalarmd
启动sentryCollector服务
适用场景
- 当巡检插件使用pysentry_collect软件提供的接口采集系统数据时,需要启动sentryCollector服务,目前sentryCollector仅支持io数据采集,默认使用ebpf采集方式,详细信息可参考《二次开发指南》;
- 如需使用以下sysSentry提供的插件,请启动sentryCollector服务:
- 平均阈值慢io检测插件 -- avg_block_io
- AI阈值慢io检测插件 -- ai_block_io
sentryCollector服务配置介绍
sentryCollector服务配置文件路径是/etc/sysSentry/collector.conf,以下为配置参数:
| 配置段 | 配置项 | 配置项说明 | 默认值 | 必选 |
|---|---|---|---|---|
| [common] | modules | 采集哪些模块的数据,多个模块可用逗号拼接,如io、network、memory等,当前仅支持io | io | Y |
| [io] | period_time | IO数据的采集周期,整形类型,单位为秒,默认值为1,范围为1~300,仅在modules配置io时生效 | 1 | N |
| [io] | max_save | 最多保存多少组IO数据,整形类型,默认值为10,范围为1~300,仅在modules配置io时生效 | 10 | N |
| [io] | disk | 需要采集数据的磁盘名称,由逗号分隔,default表示当前环境上所有盘,仅在modules配置io时生效 | default | N |
| [log] | level | 日志打印等级,分为debug/info/warning/error/critical五级 | info | Y |
用户可自行调整参数配置,或直接采用默认配置,默认配置内容如下:
[common]
modules=io
[io]
period_time=1
max_save=10
disk=default
[log]
level=info
启动方式
[root@openEuler ~]# systemctl start sentryCollector
启动后可查询运行状态,状态为running即为成功:
[root@openEuler ~]# systemctl status sentryCollector
(可选)设置开机启动
[root@openEuler ~]# systemctl enable sentryCollector
启动sysSentry服务
适用场景
sysSentry服务为必须启动的服务。
sysSentry服务配置介绍
sysSentry服务配置的路径位于/etc/sysSentry/inspect.conf,以下为配置参数:
| 配置段 | 配置项 | 配置项说明 | 默认值 | 必选 |
|---|---|---|---|---|
| [inspect] | Interval | 默认周期类型巡检任务间隔时间,单位秒 | 3 | Y |
| [log] | level | 日志打印等级,分为debug/info/warning/error/critical五级 | info | Y |
用户可自行调整参数配置,或直接采用默认配置,默认配置内容如下:
[inspect]
Interval=3
[log]
level=info
启动方式
[root@openEuler ~]# systemctl start sysSentry
启动后可查询运行状态,状态为running即为成功:
[root@openEuler ~]# systemctl status sysSentry
(可选)设置开机启动
[root@openEuler ~]# systemctl enable sysSentry
使用sysSentry巡检框架
sysSentry巡检框架的主要向用户提供两部分能力:
- 管理巡检插件 -- 通过sentryctl命令同时管理多款巡检插件的生命周期、查看告警信息等能力。
- 注册/订阅巡检插件告警事件 -- 通过对外接口订阅插件的告警,实时接收插件上报的告警内容。
管理巡检插件
管理插件配置介绍
sysSentry可同时管理一款或多款巡检插件,每一款巡检插件都有自己的配置文件,配置文件路径为/etc/sysSentry/tasks/[插件名].mod,以下为配置参数:
| 配置段 | 配置项 | 配置项说明 | 必选 | 是否支持reload指令 |
|---|---|---|---|---|
| [common] | enabled | 插件是否使能,类型为yes/no,分别对应使能和不使能 | Y | Y |
| [common] | task_start | 插件任务拉起时执行的命令 | Y | Y |
| [common] | task_stop | 插件任务中止任务时执行的命令 | Y | Y |
| [common] | type | 插件任务类型,类型为oneshot/period,分别对应单次/周期执行 | Y | N |
| [common] | interval | 插件任务间隔,该配置仅对period类型任务有效,表示该巡检任务周期性拉起的时间间隔,单位秒 | N | Y |
| [common] | heartbeat_interval | 任务心跳检查间隔,单位秒。当框架收到该巡检任务的心跳间隔超过设定值时,框架判定巡检任务状态已失败,并停止巡检任务;不配置该字段时,框架默认关闭对该模块的心跳检查,仅配置时使能心跳检查 | N | Y |
| [common] | onstart | 是否在sysSentry服务启动时拉起该任务,值为yes/no,未配置时period任务默认启动,oneshot任务默认不启动 | N | N |
| [common] | env_file | 指定环境变量的文件路径,该文件内容应为key=value的格式,如配置该参数,在启动任务前会将该文件中的值导入环境变量 | N | N |
| [common] | conflict | 如果当前环境已存在与task_start进程同样的进程时如何处理,非必选配置参数,参数为up/down/kill: 1. up:当前环境已存在同样的进程时,正常拉起巡检任务;配置为up与不配置conflict参数行为一致 2. down:当前环境已存在同样的进程时,不再拉起巡检任务 3. kill:当前环境已存在同样的进程时,先将现有进程杀死,随后拉起巡检任务 | N | N |
| [common] | alarm_id | 告警上报id,id数值为整型,未配置则无法通过get_alarm查询告警信息,范围1001~1128 | N | N |
| [common] | alarm_clear_time | 告警清理时间,单位秒,数值为整型,超时告警信息将被清除,未配置则无法通过get_alarm查询告警信息,范围0~2^31 – 1。 注:0代表每秒都清理告警,是无效值,同样无法通过get_alarm查看到有效信息 | N | N |
示例:
# avg_block_io插件的配置文件如下,路径/etc/sysSentry/tasks/avg_block_io.mod
[common]
enabled=yes
task_start=/usr/bin/python3 /usr/bin/avg_block_io
task_stop=pkill -f /usr/bin/avg_block_io
type=oneshot
alarm_id=1002
alarm_clear_time=5
巡检插件管理命令
sysSentry提供了用于管理巡检插件的命令 -- sentryctl,可以用于启动/停止巡检插件任务、查看巡检插件运行状态、查看巡检插件上报信息等功能。
启动指定巡检任务
[root@openEuler ~]# sentryctl start <module_name>终止指定巡检任务
[root@openEuler ~]# sentryctl stop <module_name>列出所有已加载的巡检任务及状态
[root@openEuler ~]# sentryctl list查询指定巡检任务的状态
[root@openEuler ~]# sentryctl status <module_name>巡检任务共存在四种状态,每种状态的回显信息及对应介绍如下:
状态 描述 RUNNING 巡检任务正在运行 WAITING 仅period类型巡检任务可设置此状态,表示period巡检任务等待下一次被调度执行 EXITED 巡检任务尚未执行,或者oneshot类型的巡检任务执行结束处于此状态 FAILED 巡检任务未拉起成功,或者巡检任务未正常退出 重载指定巡检任务的配置
当用户修改了巡检任务的配置文件/etc/sysSentry/tasks/<module_name>.mod时,可通过以下命令重载配置文件:
[root@openEuler ~]# sentryctl reload <module_name>查询指定任务的告警信息
[root@openEuler ~]# sentryctl get_alarm <module_name> [options]options可选参数及释义如下:
参数 描述 -s TIME_RANGE, --time_range TIME_RANGE 展示用户指定时间长度内的告警信息,TIME_RANGE为整形,单位秒,范围为0~2^31-1,默认值为10,即显示10秒内的告警信息 -d, --detailed 打印详细告警信息 以avg_block_io为例,输出如下:
[root@openEuler ~]# sentryctl get_alarm avg_block_io -s 1 -d [ { "alarm_id": 1002, "alarm_type": "ALARM_TYPE_OCCUR", "alarm_level": "MINOR_ALM", "timestamp": "YYYY-mm-DD HH:MM:SS", "alarm_info": { "driver_name": "sda", "reason": "disk_slow", "block_stack": "bio", "io_type": "read", "alarm_source": "avg_block_io", "details": { "latency": "gettag: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], rq_driver: [0,0,0,0,0,437.9,0,0,0,0,517,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], bio: [0,0,0,0,0,521.1,0,0,0,0,557.8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], wbt: [0,0,0,0,0,0,8.5,0,0,0,0,12.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]", "iodump": "gettag: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], rq_driver: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], bio: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], wbt: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]" } } }, ... ]结果中各字段介绍:
字段 描述 alarm_id 用户上报告警的id,范围为1001~1128 alarm_type 告警的类型,共两种:
1. ALARM_TYPE_OCCUR,告警产生
2. ALARM_TYPE_RECOVER,故障恢复alarm_level 告警的等级,共三级:
1. MINOR_ALM,一般告警,系统存在异常,并且已经尝试自动隔离等方式修复
2. MAJOR_ALM,严重告警,系统存在异常,需要通过重启等方式修复
3. CRITICAL_ALM,致命告警,系统或硬件存在无法修复问题,建议更换timestamp 告警上报的时间 alarm_info 告警内容详细信息,由插件自定义,不同的巡检插件上报的内容不一致,其中details信息仅在指定"-d,--detailed"字段时展示 查询指定巡检任务的巡检结果
[root@openEuler ~]# sentryctl get_result <module_name>回显信息格式为json格式,内容格式如下:
{ "result": "xxx", "start_time": "YYYY-mm-DD HH:MM:SS", "end_time": "YYYY-mm-DD HH:MM:SS", "error_msg" : "xxx", "details":{} # detail信息因巡检任务不同而不同,具体信息由巡检模块提供 }其中"result"和"error_msg"对应关系如下:
result 对应error_msg信息 含义 PASS "" 巡检任务正常运行结束,无异常 SKIP "not supported.maybe some rpm package not be installed." 因缺少依赖、环境不支持等原因跳过/未执行巡检任务 FAIL "FAILED. config may be incorrect or the command may be invalid/killed!" 因执行命令错误等原因,巡检任务执行失败 MINOR_ALM "the command output shows that the status is 'INFO' or 'GENERAL_WARN'." 巡检任务结束,存在系统存在异常,并且已经尝试自动隔离等方式完成修复 MAJOR_ALM "the command output shows that the status is 'WARN' or 'IMPORTANT_WARN'." 巡检任务结束,系统存在异常,需要通过重启等方式修复 CRITICAL_ALM "the command output shows that the status is 'FAIL' or 'EMERGENCY_WARN'." 巡检任务结束,致命告警,系统或硬件存在无法修复问题,建议更换
订阅巡检插件告警事件
用户可通过创建新的进程订阅并接收告警上报内容,提供python与c两种语言的对外接口。
使用限制
- 一个进程仅可订阅一次,不支持一个进程订阅多次告警。
- 支持订阅的告警id范围为1001-1128,其中1001为内存巡检告警事件,1002为慢IO告警事件,其他告警id为用户自定义插件告警事件。
- 告警模块目前支持多用户订阅,最大支持100个进程同时订阅告警消息,其中sysSentry getalarm功能固定占用一个进程资源。
python代码注册并获取告警内容
需要安装pyxalarm软件包:
[root@openEuler ~]# yum install -y pyxalarm
class Xalarm:
def __init__(self, alarm_id, alarm_type, alarm_level,
tv_sec, tv_usec, msg1):
self._alarm_id = alarm_id # 告警id
self._alarm_type = alarm_type # 告警类型
self._alarm_level = alarm_level # 告警级别
self.timetamp = TimevalStu(tv_sec, tv_usec) # 时间戳
self._msg1 = msg1 # 字符串类型,告警消息
接口一 告警订阅
| 接口 | xalarm_register(callback:callable, id_filter: list[bool]) -> int |
|---|---|
| 描述 | 用于接收告警的用户注册告警接收,最大支持100个用户创建连接。 |
| 参数 | callback -- callable类型,回调函数,要求回调函数必须满足def callback_func(alarm_info: Xalarm) -> None的定义; id_filter -- list[bool]类型,告警类型id列表,若设置id_filter[i]为True,则表明用户设置接收alarm id为1001+i的告警,id_filter长度为128;若设置id_filter[i]为False,表明用户不接收alarm id为1001+i的告警。 |
| 返回值 | 返回值为整型数字,该值为保留参数,仅做结果判断,用于取消告警、更新告警时回传。 |
接口二 取消告警订阅
| 接口 | xalarm_unregister(client_id: int)->None |
|---|---|
| 描述 | 用于接收告警的用户取消告警订阅 |
| 参数 | client_id -- int类型,调用xalarm_register接口后的返回值 |
| 返回值 | 无 |
接口三 更新告警订阅
| 接口 | xalarm_upgrade(id_filter:list[bool], client_id:int)->bool |
|---|---|
| 描述 | 用于更新用户订阅的告警 |
| 参数 | id_filter -- list[bool]类型,告警类型id列表,若设置id_filter[i]为True,则表明用户设置接收alarm id为1001+i的告警,id_filter长度为128;若设置id_filter[i]为False,表明用户不接收alarm id为1001+i的告警 client_id -- nt类型,调用xalarm_register接口后的返回值 |
| 返回值 | bool类型,若为True这表明更新订阅告警成功,否则表明更新告警订阅失败 |
接口四 获取告警id信息
| 接口 | xalarm_getid(palarm: Xalarm) -> int |
|---|---|
| 描述 | 用于获取指定告警的id信息 |
| 参数 | palarm -- Xalarm类类型,告警消息结构体,详情参考:结构体 告警消息结构体定义 |
| 返回值 | int类型,返回告警id,异常情况下返回值为0 |
接口五 获取告警类型信息
| 接口 | xalarm_gettype(palarm: Xalarm) -> int |
|---|---|
| 描述 | 用于获取指定告警的类型信息 |
| 参数 | palarm -- Xalarm类类型,告警消息结构体,详情参考:结构体 告警消息结构体定义 |
| 返回值 | 整数类型,告警类别,取值为:ALARM_TYPE_OCCUR(告警产生)和ALARM_TYPE_RECOVER(告警恢复) |
接口六 获取告警等级信息
| 接口 | xalarm_getlevel(palarm: Xalarm) -> int |
|---|---|
| 描述 | 用于获取指定告警的等级信息 |
| 参数 | palarm -- Xalarm类类型,告警消息结构体,详情参考:结构体 告警消息结构体定义 |
| 返回值 | 整数类型,告警级别,取值如下: 1. 返回值为1,代表MINOR_ALM,即巡检任务结束,存在系统存在异常,并且已经尝试自动隔离等方式完成修复 2. 返回值为2,代表MAJOR_ALM,即巡检任务结束,系统存在异常,需要通过重启等方式修复 3. 返回值为3,代表CRITICAL_ALM,即巡检任务结束,系统存在致命告警,系统或硬件存在无法修复问题,建议更换 4. 异常情况下返回值为0,表示获取不到告警级别 |
接口七 获取告警时间信息
| 接口 | xalarm_gettime(palarm: Xalarm) -> int |
|---|---|
| 描述 | 用于获取指定告警的时间信息 |
| 参数 | palarm -- Xalarm类类型,告警消息结构体,详情参考:结构体 告警消息结构体定义 |
| 返回值 | 整数类型,表示UTC时间,单位毫秒(ms),异常情况下返回0 |
接口八 获取告警描述信息
| 接口 | xalarm_getdesc(palarm: Xalarm) -> int |
|---|---|
| 描述 | 用于获取指定告警的描述信息 |
| 参数 | palarm -- Xalarm类类型,告警消息结构体,详情参考:结构体 告警消息结构体定义 |
| 返回值 | 字符串类型,返回当前告警消息的描述信息,异常情况下返回None |
示例:
[root@openEuler ~]# cat regi_xalarm.py
import sys
from xalarm.register_xalarm import (
xalarm_register,
xalarm_unregister,
xalarm_upgrade,
xalarm_getid,
xalarm_getlevel,
xalarm_gettype,
xalarm_gettime,
xalarm_getdesc,
Xalarm,
MAX_NUM_OF_ALARM_ID)
from datetime import datetime
from time import sleep
def milliseconds_to_formatted_date(milliseconds):
seconds = milliseconds / 1000.0
dt_object = datetime.fromtimestamp(seconds)
formatted_date = dt_object.strftime('%Y-%m-%d %H:%M:%S')
return formatted_date
id_filter = [True for _ in range(MAX_NUM_OF_ALARM_ID)]
def xalarm_callback(alarm_info: Xalarm) -> None:
id_number = xalarm_getid(alarm_info)
if id_number == 0:
print("Recv unexpected alarm id 0.")
return
level = xalarm_getlevel(alarm_info)
type_number = xalarm_gettype(alarm_info)
time_msec = xalarm_gettime(alarm_info)
desc = xalarm_getdesc(alarm_info)
print(f"Recv from id: {id_number}: Level={level}, Type={type_number}, Time={milliseconds_to_formatted_date(time_msec)}, Desc={desc}")
if __name__ == "__main__":
client_id = xalarm_register(xalarm_callback, id_filter)
if client_id < 0:
print("connect xalarmd service error!")
sys.exit(1)
sleep(10)
xalarm_unregister(client_id)
c代码注册并获取告警内容
需要安装libxlaram软件包
[root@openEuler ~]# yum install -y libxlaram
开发环境还需要安装libxalarm-devel包(构建依赖,非运行依赖)
[root@openEuler ~]# yum install -y libxalam-devel
struct alarm_info {
unsigned short usAlarmId;
unsigned char ucAlarmLevel;
unsigned char ucAlarmType;
struct timeval AlarmTime;
char pucParas[ALARM_INFO_MAX_PARAS_LEN];
};
接口一 注册告警
| 接口 | int xalarm_Register(alarm_callback_func callback, struct alarm_subscription_info id_filter) |
|---|---|
| 描述 | sysSentry告警转发子系统xalarmd告警注册接口 |
| 参数 | callback -- 用户自定义的告警信息处理函数回调 id_filter -- 用户需要注册接收的告警id列表 - alarm_subscription_info.id_list:保存告警id的数组,长度为128;数组中一个元素对应用户订阅的一个告警id;支持的告警id范围为[1001, 1128],共128种 - alarm_subscription_info.len:用户自定义需要接收的告警id个数,不超过128。len的大小需与用户填充到id_list数组的告警id个数一致。如果len小于用户实际填充id_list的元素个数,仅数组中下标为[0, len)的告警id生效 |
| 返回值 | client_id,返回值为整型数字,该值为保留参数,仅做结果判断,用于取消告警、更新告警时回传;失败时返回-1 |
接口二 取消告警订阅
| 接口 | void xalarm_UnRegister(int client_id) |
|---|---|
| 描述 | sysSentry告警转发子系统xalarmd告警取消订阅接口 |
| 参数 | client_id -- 注册订阅告警时返回的用户唯一标识 |
接口三 更新告警订阅
| 接口 | bool xalarm_Upgrade(struct alarm_subscription_info id_filter, int client_id) |
|---|---|
| 描述 | sysSentry告警转发子系统xalarmd告警更新接口,用于更新用户需要订阅的告警类型 |
| 参数 | id_filter -- 用户需要订阅的告警id列表,定义及用法与xalarm_Register接口中的id_filter参数一致;新的列表将覆盖刷新当前已有的告警id列表 client_id -- 用户调用xalarm_Register注册时返回的用户标识 |
| 返回值 | 布尔型,表示本次更新订阅告警类型是否成功 |
用户自定义callback回调函数,回调函数定义:
typedef void (*alarm_callback_func)(struct alarm_info *palarm);
下述接口四至接口八可以被回调函数触发,用于辅助用户获取告警信息。
接口四 获取告警id信息
| 接口 | unsigned short xalarm_getid(const struct alarm_info *palarm); |
|---|---|
| 描述 | 获取告警id接口 |
| 参数 | alarm_info -- 请参考:结构体 告警消息结构体定义 |
| 返回值 | 告警ID,异常情况下返回值为0 |
接口五 获取告警类型信息
| 接口 | unsigned short xalarm_gettype(const struct alarm_info *palarm); |
|---|---|
| 描述 | 获取告警类型接口 |
| 参数 | alarm_info -- 请参考:结构体 告警消息结构体定义 |
| 返回值 | 整数类型,告警类型,取值为ALARM_TYPE_OCCUR(告警产生)和ALARM_TYPE_RECOVER(告警修复) |
接口六 获取告警等级信息
| 接口 | unsigned short xalarm_getlevel(const struct alarm_info *palarm); |
|---|---|
| 描述 | 获取告警级别接口。 |
| 参数 | alarm_info -- 请参考:结构体 告警消息结构体定义 |
| 返回值 | 整数类型,告警级别,取值如下: 1. 返回值为1,代表MINOR_ALM,即巡检任务结束,存在系统存在异常,并且已经尝试自动隔离等方式完成修复 2. 返回值为2,代表MAJOR_ALM,即巡检任务结束,系统存在异常,需要通过重启等方式修复 3. 返回值为3,代表CRITICAL_ALM,即巡检任务结束,系统存在致命告警,系统或硬件存在无法修复问题,建议更换 4. 异常情况下返回值为0,表示获取不到告警级别 |
接口七 获取告警时间信息
| 接口 | long long xalarm_gettime(const struct alarm_info *palarm); |
|---|---|
| 描述 | 获取告警时间接口 |
| 参数 | alarm_info -- 请参考:结构体 告警消息结构体定义 |
| 返回值 | long long类型的正整数,表示UTC时间,单位毫秒(ms);异常情况下返回值为0 |
接口八 获取告警描述信息
| 接口 | char * xalarm_getdesc(const struct alarm_info *palarm); |
|---|---|
| 描述 | 获取描述信息接口 |
| 参数 | alarm_info -- 请参考:结构体 告警消息结构体定义 |
| 返回值 | 正常:字符串,最长为8191个字符;异常情况下返回值为NULL |
示例:
[root@openEuler ~]# cat regi_xalarm.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <xalarm/register_xalarm.h>
#define SLEEP_TIME 10
#define ALARM_ID_1 1001
#define ALARM_ID_2 1002
#define ALARM_ID_3 1003
#define ID_LIST_LENGTH 3
void RefreshOutput(void)
{
int ret = fflush(stdout);
if (ret != 0) {
printf("failed to fflush\n");
}
}
void callback(struct alarm_info *param)
{
int alarmid, alarmlevel, alarmtype;
long long alarmtime;
char *pucParas;
alarmid = xalarm_getid(param);
alarmlevel = xalarm_getlevel(param);
alarmtype = xalarm_gettype(param);
alarmtime = xalarm_gettime(param);
pucParas = xalarm_getdesc(param);
printf("[alarmid:%d] [alarmlevel:%d] [alarmtype:%d] [alarmtime:%lld ms] [msg:%s]\n",
alarmid, alarmlevel, alarmtype, alarmtime, pucParas);
RefreshOutput();
}
int main(int argc, char **argv)
{
int clientId;
int ret;
struct alarm_subscription_info id_filter;
printf("demo start\n");
clientId = xalarm_Register(callback, id_filter);
if (clientId < 0) {
printf("demo register failed\n");
return -1;
} else {
printf("xalarm register success, client id is %d\n", clientId);
}
printf("demo waiting alarm\n");
RefreshOutput();
sleep(SLEEP_TIME);
xalarm_UnRegister(clientId);
printf("unregister xalarm success\n");
RefreshOutput();
return 0;
}
[root@openEuler ~]# gcc regi_xalarm.c -o regi_xalarm -lxalarm
使用巡检插件
sysSentry目前对openEuler-20.03-LTS-SP4版本提供两个巡检插件:
- 平均阈值慢io检测插件(avg_block_io),通过平均阈值算法实现系统慢io检测,请参考《平均阈值慢盘检测插件》
- AI阈值慢io检测插件(ai_block_io),通过AI阈值算法实现系统慢io检测,请参考《AI阈值慢盘检测插件》
除sysSentry已提供的插件外,用户也可以使用sysSentry提供的对外接口开发新的插件,开发方法请参考《二次开发指南》
sysSentry使用限制
- sysSentry主软件支持x86_64和aarch64两种架构,巡检插件支持的环境请参考具体插件的使用限制。
- sysSentry中含有三个后台常驻服务进程,其中sysSentry.service服务为必需启动的进程,xalarmd.service和sentryCollector.service均非必选服务,可根据巡检插件要求启动。





