上个月被领导的暗示下,需要用新的日志收集系统替代老旧的 Kiwi Syslog,有一说一确实,公司的 kiwisyslog 还停留在 09 年的版本,不然以后写季报和年报都没什么新花样了。
目前还在部署 ELK 作为公司的新日志收集平台,收集日志的 logstash 使用传统的 UDP 514
端口主动收信息。看网上的教程基本每个交换机用的 logstash 都是不同交换机不同端口,写 grok 就很方便,而我们的设备已经运作了多年,一台一台交换机改端口实在是麻烦,只能一股脑塞进去过滤。
但网上的匹配规则可能只有中高端交换机的匹配规则,而我们的设备有 S2600 系列的入门交换机,直接使用那些规则可能会无法匹配仅输出原生文本,这就很麻烦,还好 logstash 可以匹配多条规则,第一条不能匹配就用第二条规则。根据交换机日志的组成和配置好 info-center 的多台交换机我写了华三和华为交换机通用的规则。
分析日志
<164>Jun 2 2020 01:53:27 LSW1 %%01LLDP/4/BAD_PACKET(l)[10261]:5 invalid packets were received after latest notification. The last invalid packet came from interface XGigabitEthernet1/0/1
根据官方讲解,可以这样理解日志的每项的意义。
因此上面的日志信息可以这样转换规则:
<时间戳><月> <日> <年> <时间> <交换机名字> %%<版本号> <模块名>/<日志级别>/<日志模块>(<日志标识>[信息计数]):<详情信息>
规则
使用官方提供的预设的正则,运作了半个月暂未看到未转换的日志。
filter {
if [type] == "system-syslog"{
grok {
match => [
"message" , "<%{BASE10NUM:syslog_pri}>%{DATA:month} %{MONTHDAY:day} %{YEAR:year} %{TIME:time} %{DATA:hostname} %%%{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:brief}:%{GREEDYDATA:message}",
"message" , "%{DATA:hostname} %%%{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:digest}: -DevIP=%{IPV4:DevIP}; %{GREEDYDATA:message}",
"message" , "%{DATA:hostname} %%%{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:digest}: %{GREEDYDATA:message}",
"message" , "%{DATA:hostname} %%%{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:digest}:- %{GREEDYDATA:message}"
]
remove_field => ["%{month}","%{day}","%{year}","%{time}"]
#add_field => {"syslog_time" => "%{month} %{day} %{year} %{time}"}
add_field => {"severity_code" => "%{severity}"}
overwrite => ["message"]
}
}
mutate {
gsub => [
"severity", "0", "Emergency",
"severity", "1", "Alert",
"severity", "2", "Critical",
"severity", "3", "Error",
"severity", "4", "Warning",
"severity", "5", "Notice",
"severity", "6", "Informational",
"severity", "7", "Debug"
]
}
}
测试
接回上面的分析日志的那条命令,使用 grok debugger 可以成功匹配
<164>Jun 2 2020 01:53:27 LSW1 %%01LLDP/4/BAD_PACKET(l)[10261]:5 invalid packets were received after latest notification. The last invalid packet came from interface XGigabitEthernet1/0/1
第二条,部分华三设备的日志无法用第一条匹配,毕竟多出了 DevIP
,而且本身 logstash 会自动加上当前时间戳到 elasticsearch,所以下面的规则已经不会先匹配日志时间了。
LSW2 %%10ARP/5/ARP_DUPLICATE_IPADDR_DETECT(l): -DevIP=10.100.100.100; Detected an IP address conflict. The device with MAC address X-X-X-X connected to GigabitEthernet1/0/24 in VLAN 12 and the device with MAC address X-X-X-X connected to GigabitEthernet1/0/24 in VLAN 12 are using the same IP address 1.2.3.4.
下面两条规则是给连 DevIP
也没有的日志使用,区别就是详情信息前多了个 -
,暂时找不到相关日志来示例。
发表评论