长期支持版本

    社区创新版本

      sysSentry软件安装与使用

      安装sysSentry巡检框架

      环境准备

      • 安装openEuler-20.03-LTS-SP4系统,安装方法参考 《安装指南》。
      • 安装sysSentry需要使用root权限。

      安装操作

      1. 配置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
        
      2. 安装sysSentry

        [root@openEuler ~]# yum install -y sysSentry pyxalarm
        

      启动sysSentry巡检框架

      sysSentry巡检框架提供三个相互独立的服务:

      1. xalarmd服务,用于汇总巡检插件的告警信息,并向已注册告警的用户转发告警信息。
      2. sentryCollector服务,用于周期性采集系统数据并提供给巡检插件。
      3. sysSentry服务,用于管理巡检插件的服务。

      三个服务均由systemd进行控制,用户在启动sysSentry时可仅启动需要的系统服务即可。

      启动xalarmd服务

      适用场景

      1. 当巡检插件使用libxalarm或pyxalarm软件提供的接口,进行告警上报时,需要启动xalarmd服务;
      2. 如需使用以下sysSentry提供的插件,请启动xalarmd服务:
        • 平均阈值慢io检测插件 -- avg_block_io
        • AI阈值慢io检测插件 -- ai_block_io

      xalarmd服务配置介绍

      xalarmd服务配置的路径位于/etc/sysSentry/xalarm.conf,以下为配置参数:

      配置段配置项配置项说明默认值必选
      [filter]id_mask需要上报的告警类型id,不同id使用","分割,也可以用"-"连接连续的告警范围1001-1128Y
      [log]level日志打印等级,分为debug/info/warning/error/critical五级infoY

      用户可自行调整参数配置,或直接采用默认配置,默认配置内容如下:

      [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服务

      适用场景

      1. 当巡检插件使用pysentry_collect软件提供的接口采集系统数据时,需要启动sentryCollector服务,目前sentryCollector仅支持io数据采集,默认使用ebpf采集方式,详细信息可参考《二次开发指南》;
      2. 如需使用以下sysSentry提供的插件,请启动sentryCollector服务:
        • 平均阈值慢io检测插件 -- avg_block_io
        • AI阈值慢io检测插件 -- ai_block_io

      sentryCollector服务配置介绍

      sentryCollector服务配置文件路径是/etc/sysSentry/collector.conf,以下为配置参数:

      配置段配置项配置项说明默认值必选
      [common]modules采集哪些模块的数据,多个模块可用逗号拼接,如io、network、memory等,当前仅支持ioioY
      [io]period_timeIO数据的采集周期,整形类型,单位为秒,默认值为1,范围为1~300,仅在modules配置io时生效1N
      [io]max_save最多保存多少组IO数据,整形类型,默认值为10,范围为1~300,仅在modules配置io时生效10N
      [io]disk需要采集数据的磁盘名称,由逗号分隔,default表示当前环境上所有盘,仅在modules配置io时生效defaultN
      [log]level日志打印等级,分为debug/info/warning/error/critical五级infoY

      用户可自行调整参数配置,或直接采用默认配置,默认配置内容如下:

      [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默认周期类型巡检任务间隔时间,单位秒3Y
      [log]level日志打印等级,分为debug/info/warning/error/critical五级infoY

      用户可自行调整参数配置,或直接采用默认配置,默认配置内容如下:

      [inspect]
      Interval=3
      
      [log]
      level=info
      

      启动方式

      [root@openEuler ~]# systemctl start sysSentry
      

      启动后可查询运行状态,状态为running即为成功:

      [root@openEuler ~]# systemctl status sysSentry
      

      (可选)设置开机启动

      [root@openEuler ~]# systemctl enable sysSentry
      

      使用sysSentry巡检框架

      sysSentry巡检框架的主要向用户提供两部分能力:

      1. 管理巡检插件 -- 通过sentryctl命令同时管理多款巡检插件的生命周期、查看告警信息等能力。
      2. 注册/订阅巡检插件告警事件 -- 通过对外接口订阅插件的告警,实时接收插件上报的告警内容。

      管理巡检插件

      管理插件配置介绍

      sysSentry可同时管理一款或多款巡检插件,每一款巡检插件都有自己的配置文件,配置文件路径为/etc/sysSentry/tasks/[插件名].mod,以下为配置参数:

      配置段配置项配置项说明必选是否支持reload指令
      [common]enabled插件是否使能,类型为yes/no,分别对应使能和不使能YY
      [common]task_start插件任务拉起时执行的命令YY
      [common]task_stop插件任务中止任务时执行的命令YY
      [common]type插件任务类型,类型为oneshot/period,分别对应单次/周期执行YN
      [common]interval插件任务间隔,该配置仅对period类型任务有效,表示该巡检任务周期性拉起的时间间隔,单位秒NY
      [common]heartbeat_interval任务心跳检查间隔,单位秒。当框架收到该巡检任务的心跳间隔超过设定值时,框架判定巡检任务状态已失败,并停止巡检任务;不配置该字段时,框架默认关闭对该模块的心跳检查,仅配置时使能心跳检查NY
      [common]onstart是否在sysSentry服务启动时拉起该任务,值为yes/no,未配置时period任务默认启动,oneshot任务默认不启动NN
      [common]env_file指定环境变量的文件路径,该文件内容应为key=value的格式,如配置该参数,在启动任务前会将该文件中的值导入环境变量NN
      [common]conflict如果当前环境已存在与task_start进程同样的进程时如何处理,非必选配置参数,参数为up/down/kill:
      1. up:当前环境已存在同样的进程时,正常拉起巡检任务;配置为up与不配置conflict参数行为一致
      2. down:当前环境已存在同样的进程时,不再拉起巡检任务
      3. kill:当前环境已存在同样的进程时,先将现有进程杀死,随后拉起巡检任务
      NN
      [common]alarm_id告警上报id,id数值为整型,未配置则无法通过get_alarm查询告警信息,范围1001~1128NN
      [common]alarm_clear_time告警清理时间,单位秒,数值为整型,超时告警信息将被清除,未配置则无法通过get_alarm查询告警信息,范围0~2^31 – 1。 注:0代表每秒都清理告警,是无效值,同样无法通过get_alarm查看到有效信息NN

      示例:

      # 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,可以用于启动/停止巡检插件任务、查看巡检插件运行状态、查看巡检插件上报信息等功能。

      1. 启动指定巡检任务

        [root@openEuler ~]# sentryctl start <module_name>
        
      2. 终止指定巡检任务

        [root@openEuler ~]# sentryctl stop <module_name>
        
      3. 列出所有已加载的巡检任务及状态

        [root@openEuler ~]# sentryctl list
        
      4. 查询指定巡检任务的状态

        [root@openEuler ~]# sentryctl status <module_name>
        

        巡检任务共存在四种状态,每种状态的回显信息及对应介绍如下:

        状态描述
        RUNNING巡检任务正在运行
        WAITING仅period类型巡检任务可设置此状态,表示period巡检任务等待下一次被调度执行
        EXITED巡检任务尚未执行,或者oneshot类型的巡检任务执行结束处于此状态
        FAILED巡检任务未拉起成功,或者巡检任务未正常退出
      5. 重载指定巡检任务的配置

        当用户修改了巡检任务的配置文件/etc/sysSentry/tasks/<module_name>.mod时,可通过以下命令重载配置文件:

        [root@openEuler ~]# sentryctl reload <module_name>
        
      6. 查询指定任务的告警信息

        [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"字段时展示
      7. 查询指定巡检任务的巡检结果

        [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两种语言的对外接口。

      使用限制

      1. 一个进程仅可订阅一次,不支持一个进程订阅多次告警。
      2. 支持订阅的告警id范围为1001-1128,其中1001为内存巡检告警事件,1002为慢IO告警事件,其他告警id为用户自定义插件告警事件。
      3. 告警模块目前支持多用户订阅,最大支持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版本提供两个巡检插件:

      除sysSentry已提供的插件外,用户也可以使用sysSentry提供的对外接口开发新的插件,开发方法请参考《二次开发指南》

      sysSentry使用限制

      1. sysSentry主软件支持x86_64和aarch64两种架构,巡检插件支持的环境请参考具体插件的使用限制。
      2. sysSentry中含有三个后台常驻服务进程,其中sysSentry.service服务为必需启动的进程,xalarmd.service和sentryCollector.service均非必选服务,可根据巡检插件要求启动。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份