上个月被领导的暗示下，需要用新的日志收集系统替代老旧的 Kiwi Syslog，有一说一确实，公司的 kiwisyslog 还停留在 09 年的版本，不然以后写季报和年报都没什么新花样了。 目前还在部署 ELK 作为公司的新日志收集平台，收集日志的 logstash 使用传统的 `UDP 514` 端口主动收信息。看网上的教程基本每个交换机用的 logstash 都是不同交换机不同端口，写 grok 就很方便，而我们的设备已经运作了多年，一台一台交换机改端口实在是麻烦，只能一股脑塞进去过滤。 但网上的匹配规则可能只有中高端交换机的匹配规则，而我们的设备有 S2600 系列的入门交换机，直接使用那些规则可能会无法匹配仅输出原生文本，这就很麻烦，还好 logstash 可以匹配多条规则，第一条不能匹配就用第二条规则。根据交换机日志的组成和配置好 info-center 的多台交换机我写了华三和华为交换机通用的规则。 ## 分析日志 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 根据官方讲解，可以这样理解日志的每项的意义。 ![图片1.png](https://cos.lowb.ren/typecho/uploads/2020/07/307642717.png) 因此上面的日志信息可以这样转换规则： ` %% //([信息计数]):` ## 规则 使用官方提供的预设的正则，运作了半个月暂未看到未转换的日志。 filter { if [type] == "system-syslog"{ grok { match => [ "message" , "%{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 可以成功匹配 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 ![gork1.jpg](https://cos.lowb.ren/typecho/uploads/2020/07/2476519764.jpg) 第二条，部分华三设备的日志无法用第一条匹配，毕竟多出了 `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. ![grok2.jpg](https://cos.lowb.ren/typecho/uploads/2020/07/1070141824.jpg) 下面两条规则是给连 `DevIP` 也没有的日志使用，区别就是详情信息前多了个 `-`，暂时找不到相关日志来示例。