RELP协议介绍
RELP(Reliable Event Logging Protocol)是基于TCP封装的可靠日志消息传输协议,是为了解决TCP 与 UDP 协议的缺点而在应用层实现的传输协议。
与其他协议不同,RELP需要多安装rsyslog-relp(omrelp)以支持该协议。
omrelp安装方式
可以通过rsyslog官方获取,BMC支持RELP需要分别安装omrelp与librelp,下面对安装方法进行介绍
在conan_index添加依赖包的编译
使用conan_index安装omrelp与librelp,需要在代码仓中添加如下文件
.
└── recipes
├── omrelp
│ ├── all
│ │ ├── conanfile.py
│ │ ├── conandata.yml
│ │ └── permission.ini
│ └── config.yml
└── librelp
├── all
│ ├── conanfile.py
│ ├── conandata.yml
│ └── permission.ini
└── config.yml
依赖开源软件获取方式
- omrelp:从https://github.com/rsyslog/rsyslog中提取omrelp.so
- librelp:依赖https://github.com/rsyslog/librelp进行构建
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.so、librelp.so.0、librelp.so.0.5.1放置到BMC的usr/lib64路径下
其他配置文件
permissions.ini中,限制获取到的文件权限全部为755conandata.yml中,声明引用开源软件的来源,如果遇到无法获取的情况,可以尝试将开源软件引入个人仓,再通过引用个人仓进行编译构建config.yml中,声明使用的版本,版本号需要与conandata.yml中的版本号相同
manifest引入编译好的开源软件包
在manifest仓中manifest.yml文件的dependencies中声明刚刚编译完成的omrelp与librelp与版本
- conan: "librelp/x.x.x@openUBMC.dev/dev"
- conan: "omrelp/x.x.x@openUBMC.dev/dev"
定制化北向接口与资源协作接口
接口相关信息可参考评审链接
资源协作接口处理逻辑
优先判断是否为RELP(需要同时打开RELPSupported与RELPEnabled)
若不为RELP,则判断资源协作接口属性Protocol
设置syslog支持RELP协议
添加设置逻辑前确保已安装omrelp与librelp
在定制仓中的初始化阶段,设置资源树属性RELPSupported为true( path :/bmc/kepler/Managers/1/Syslog,interface :bmc.kepler.Managers.Syslog)
为确保设置成功,建议添加重试逻辑(避免组件启动时序依赖导致设置失败)
北向接口定制
裁剪原有的syslog协议类型属性,添加如下图所示的逻辑
配置项与定制项
若有相关方面诉求,需要在定制仓中,添加新的配置项与定制项,用于设置RELPEnabled属性,设置后,只要确保了RELPSupported与RELPEnabled均为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
