教程——使用协议扩展对syslog消息进行负载平衡

Citrix ADC设备上可用的系统日志协议仅适用于Citrix ADC设备上生成的消息。它不会对来自外部节点的消息进行负载平衡。为了平衡这些消息,您需要使用协议扩展功能,并使用Lua 5.2编程语言编写syslog消息解析逻辑。

用于解析系统日志消息的代码

代码只定义了TCP客户端数据回调函数客户.on_data()。对于服务器数据,它不添加回调函数,服务器到客户端采用快速本机路径。代码基于尾随字符标识消息边界。如果TCP数据包包含多个syslog消息,那么我们根据尾随字符拆分数据包,并平衡每个消息的负载。

——[[TCP客户端Syslog事件处理程序数据ctxt - TCP客户端应用程序处理上下文。data - TCP接收的数据流。——]]功能客户端。On_data (ctxt, payload) local message = nil local data_len local data = payload. On_data (ctxt, payload)data local trailing_character = "\n"::split_message::——获取尾随字符的偏移量local new_line_character_offset = data:find(trailing_character)——如果尾随字符未找到,则等待更多数据。如果(不是new_line_character_offset)那么goto need_more_data结束,得到当前消息的长度data_len =数据:len(),检查是否有多于一个消息——通过比较落后于字符偏移量和当前数据长度如果(data_len > new_line_character_offset)——如果有多于一个消息,然后将数据分成两部分,第一部分将包含消息到尾随字符,第二部分将包含剩余的消息。message, data = data:split(new_line_character_offset) else message = data data = nil end——发送数据到后端服务器。ns.send (ctxt。goto done:: need_more_data::——Wait for more data ctxt:hold(data) data = nil goto done:: done::——如果我们有更多的数据要解析,——然后再次解析。 if (data) then goto split_message end end 
教程——使用协议扩展对syslog消息进行负载平衡