Syslog RELP协议定制指导

RELP协议介绍

RELP(Reliable Event Logging Protocol)是基于TCP封装的可靠日志消息传输协议,是为了解决TCP 与 UDP 协议的缺点而在应用层实现的传输协议。

与其他协议不同,RELP需要多安装rsyslog-relp(omrelp)以支持该协议。

omrelp安装方式

可以通过rsyslog官方获取,BMC支持RELP需要分别安装omrelplibrelp,下面对安装方法进行介绍

conan_index添加依赖包的编译

使用conan_index安装omrelplibrelp,需要在代码仓中添加如下文件

.
└── recipes
    ├── omrelp 
    │   ├── all
    │   │   ├── conanfile.py 
    │   │   ├── conandata.yml
    │   │   └── permission.ini
    │   └── config.yml 
    └── librelp 
        ├── all
        │   ├── conanfile.py 
        │   ├── conandata.yml
        │   └── permission.ini
        └── config.yml 

依赖开源软件获取方式

omrelp构建脚本conanfile.py内容

可以参考libyaml的构建脚本,build方法中autotools_dynamic.configure步骤使用参数如下:

--enable-relp=yes
--enable-generate-man-pages=no
--disable-Werror
--enable-libgcrypt=no

前置执行方法:

autoreconf -i

package方法中,使用copy将源文件plugins/omrelp/.libs路径下的omrelp.so放置到BMC的usr/lib64/rsyslog路径下

librelp构建脚本conanfile.py内容

可以参考libyaml的构建脚本,build方法中autotools_dynamic.configure步骤使用参数如下:

--enable-tls=no

前置执行方法:

sudo apt-get install byacc -y
autoreconf -i

package方法中,使用copy将源文件src/.libs路径下的librelp.solibrelp.so.0librelp.so.0.5.1放置到BMC的usr/lib64路径下

其他配置文件

  • permissions.ini中,限制获取到的文件权限全部为755
  • conandata.yml中,声明引用开源软件的来源,如果遇到无法获取的情况,可以尝试将开源软件引入个人仓,再通过引用个人仓进行编译构建
  • config.yml中,声明使用的版本,版本号需要与conandata.yml中的版本号相同

manifest引入编译好的开源软件包

manifest仓manifest.yml文件的dependencies中声明刚刚编译完成的omrelplibrelp与版本

  - conan: "librelp/x.x.x@openUBMC.dev/dev"
  - conan: "omrelp/x.x.x@openUBMC.dev/dev"

定制化北向接口与资源协作接口

接口相关信息可参考评审链接

资源协作接口处理逻辑

优先判断是否为RELP(需要同时打开RELPSupportedRELPEnabled
若不为RELP,则判断资源协作接口属性Protocol

设置syslog支持RELP协议

添加设置逻辑前确保已安装omrelplibrelp

在定制仓中的初始化阶段,设置资源树属性RELPSupported为true( path/bmc/kepler/Managers/1/Sysloginterfacebmc.kepler.Managers.Syslog

为确保设置成功,建议添加重试逻辑(避免组件启动时序依赖导致设置失败)

北向接口定制

裁剪原有的syslog协议类型属性,添加如下图所示的逻辑

配置项与定制项

若有相关方面诉求,需要在定制仓中,添加新的配置项与定制项,用于设置RELPEnabled属性,设置后,只要确保了RELPSupportedRELPEnabled均为true,资源协作接口属性Protocol不生效

syslog接收端支持RELP

首先,确保接收端的/usr/lib64/rsyslog路径下,有文件imrelp.so

修改配置文件/etc/rsyslog.d/remote.conf 后重启rsyslog,配置文件如下:

#加载RELP模块
$ModLoad imrelp

#服务端侦听端口,必须确保处于侦听状态,并不被其他进程占用
#本例使用11412端口,实际使用时,将端口号改为实际需要的端口号
$InputRELPServerRun 11412

#日志存放位置,可定义配置日志存放路径
$template Remote,"/var/log/relp.log"

#排除本地IP的日志记录,只记录远程日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
4 个赞