前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >learning:Syslog protocol support

learning:Syslog protocol support

作者头像
dpdk-vpp源码解读
发布2023-03-07 17:31:18
2.2K0
发布2023-03-07 17:31:18
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

VPP 提供RFC5424 syslog 协议日志记录,用于跨网络传输事件消息。VPP 目前已支持基于 RFC5426的 UDP 传输。

系统日志消息具有以下格式:* header * structured data * free-form message。

标头包含优先级、版本、时间戳、主机名、应用程序、进程 ID 和消息 ID。紧随其后的是结构化数据,它提供了一种以易于解析的格式表达事件数据的机制。结构化数据可以包含零个、一个或多个结构化数据元素。结构化数据元素包含名称-值对。结构化数据后面可以跟指定长度消息内容。下面是抓取vpp发送到syslog服务器的报文内容抓包显示如下:

接下来说明一下验证过程。

第一步:搭建syslog服务器

1、ubuntu系统安装rsyslog服务器

代码语言:javascript
复制
sudo apt-get install rsyslog

2、修改/etc/rsyslog.conf配置文件,将udp端口绑定的行放开注释

代码语言:javascript
复制
#provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

3、创建用于接收远程消息的新模板 让我们创建一个模板,指示rsyslog服务器如何存储传入的syslog消息,在GLOBAL DIRECTIVES部分之前添加模板:

代码语言:javascript
复制
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.*  ?RemoteLogs
& stop

收到的日志将使用上面的模板进行解析并存储在目录/var/log/remote中,文件命名遵循约定:%HOSTNAME% and %PROGRAMNAME%变量,即:客户端主机名和生成日志消息的客户端工具。 & stop指示rsyslog守护程序仅将日志消息存储到指定的文件(也有人使用& ~)。 可以使用的其它变量包括: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %y e a r year%, %yearmonth%, %$day%

第二步:配置vpp syslog系统日志接收服务器及设置过滤条件

1、vpp中设置syslog接收服务器并查询

代码语言:javascript
复制
set syslog sender collector 192.168.1.4 src 192.168.1.20

vpp# show syslog sender
collector 192.168.1.4:514, src address 192.168.1.20, VRF ID -1, max-msg-size 480

2、设置syslog日志过滤器,默认是info信息。

代码语言:javascript
复制
vpp# set syslog filter severity debug
vpp# show syslog filter
severity-filter: debug

第三步:使用vpp自带测试命令行来验证。

1、发送syslog消息

代码语言:javascript
复制
vpp# test syslog local0 debug vpp 100  sa-id 10 sd-param jinsh  111 "helloworld"
vpp# test syslog local0 debug vpp 100  sa-id 10 sd-param jinsh  111 "helloworld1122"

2、在服务器上查询消息内容 syslog日志生成路径:/var/log/remote/192.168.1.20/vpp.log

代码语言:javascript
复制
root@jinsh:/var/log/remote/192.168.1.20# cat vpp.log
2023-02-19T07:54:04.536534Z 192.168.1.20 vpp[2355] "helloworld"
2023-02-19T07:54:05.541047Z 192.168.1.20 vpp[2355] message repeated 3 times: ["helloworld"]
2023-02-19T07:56:19.171524Z 192.168.1.20 vpp[2355] sa-id 10 sd-param jinsh  111 "helloworld"
2023-02-19T08:20:25.321593Z 192.168.1.20 vpp[2355] message repeated 6 times: [sa-id 10 sd-param jinsh  111 "helloworld"]
2023-02-19T08:20:29.446796Z 192.168.1.20 vpp[2355] sa-id 10 sd-param jinsh  111 "helloworld1122"

目前syslog模块主要用于nat模块会话信息的存储,后续再进行nat会话信息的验证。下面是syslog在nat模块使用的举例:

代码语言:javascript
复制
#include <vnet/syslog/syslog.h>

...

syslog_msg_t syslog_msg;

/* Check if syslog logging is enabled */
if (!syslog_is_enabled ())
  return;

/* Severity filer test */
if (syslog_severity_filter_block (severity))
  return;

/* Initialize syslog message header */
syslog_msg_init (&syslog_msg, facility, severity, "NAT", "SADD");

/* Create structured data element */
syslog_msg_sd_init (&syslog_msg, "nsess");
/* Add structured data element parameters (name-value pairs) */
syslog_msg_add_sd_param (&syslog_msg, "SSUBIX", "%d", ssubix);
syslog_msg_add_sd_param (&syslog_msg, "SVLAN", "%d", svlan);
syslog_msg_add_sd_param (&syslog_msg, "IATYP", "IPv4");
syslog_msg_add_sd_param (&syslog_msg, "ISADDR", "%U",
                         format_ip4_address, isaddr);
syslog_msg_add_sd_param (&syslog_msg, "ISPORT", "%d", isport);
syslog_msg_add_sd_param (&syslog_msg, "XATYP", "IPv4");
syslog_msg_add_sd_param (&syslog_msg, "XSADDR", "%U",
                         format_ip4_address, xsaddr);
syslog_msg_add_sd_param (&syslog_msg, "XSPORT", "%d", xsport);
syslog_msg_add_sd_param (&syslog_msg, "PROTO", "%d", proto);

/* Send syslog message */
syslog_msg_send (&syslog_msg);

上面的示例生成以下系统日志消息:<134>1 2018-11-12T11:25:30.252715Z 172.16.4.1 NAT 5901 SADD [nsess SSUBIX=“0” SVLAN=“0” IATYP=“IPv4” ISADDR=“172.16.1.2 ” ISPORT=“6303” XATYP=“IPv4” XSADDR=“10.0.0.3” XSPORT=“16253” PROTO=“6”]

参考资料:

1、https://blog.csdn.net/chenwr2018/article/details/121742978

2、https://blog.csdn.net/SweetHeartHuaZai/article/details/128330473

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档