我想启动ELK堆栈以从我的所有网络设备(思科,F5,华为,CheckPoint等)收集syslog。在尝试Logstash的同时编写grok模式。
以下是来自Cisco ASR的消息示例:
<< 191> Oct 30 16:30:10 evlogd:[local-60sec10.950] [cli 30000 debug] [8/0/30501 cliparse.c:367] [上下文:本地,contextID:1] [内部软件system syslog] CLI命令[用户root,模式[本地] ASR5K]:show ims-authorization policy-control statistics \ u0000
<< 190> 10月30日16:30:10 evlogd:[local-60sec10.959] [cli 30005信息] [8/0/30501 _commands_cli.c:1792] [软件内部系统syslog]安全管理员的CLI会话已结束设备上的root / dev / pts / 7 \ u0000
<< 190> 10月30日16:30:10 evlogd:[local-60sec10.981] [snmp 22002 info] [8/0/4550 trap_api.c:930] [软件内部系统syslog]内部陷阱通知53(CLISessEnd )用户root特权级别安全管理员ttyname / dev / pts / 7 \ u0000
<< 190> 10月30日16:30:12 evlogd:[local-60sec12.639] [cli 30004信息] [8/0/30575 cli_sess.c:127] [软件内部系统syslog]为Security Administrator启动了CLI会话从192.168.1.1 \ u0000在设备/ dev / pts / 7上的根目录>
<190> 10月30日16:30:12 evlogd:[local-60sec12.640] [snmp 22002信息] [8/0/30575 trap_api.c:930] [软件内部系统syslog]内部陷阱通知52(CLISessStart )用户root特权级别安全管理员ttyname / dev / pts / 7 \ u0000
<%{POSINT:syslog_pri}>%{DATA:month} %{DATA:monthday} %{TIME:time} %{WORD:device}: \[%{WORD:facility}\-%{HOSTNAME}\] \[%{WORD:service} %{POSINT} %{WORD:priority}\] \[%{DATA}\] ?(\[context: %{DATA:context}, %{DATA}\])?%{SPACE}?(\[%{DATA}\] )%{GREEDYDATA:message}\\u0000
但是我简单的logstash配置返回标签
_grokparsefailure
(如果我在系统日志输入插件中使用GROK,则返回_grokparsefailure_sysloginput
,并且不解析我的日志。
使用GROK过滤器进行配置
input { udp { port => 5140 type => syslog } } filter { if [type] == "syslog" { grok { match => ["message", "<%{POSINT:syslog_pri}>%{DATA:month} %{DATA:monthday} %{TIME:time} %{WORD:device}: \[%{WORD:facility}\-%{HOSTNAME}\] \[%{WORD:service} %{POSINT} %{WORD:priority}\] \ [%{DATA}\] ?(\[context: %{DATA:context}, %{DATA}\])?%{SPACE}?(\[%{DATA}\] )%{GREEDYDATA:response}\\u0000"] } } } output { stdout { codec => rubydebug } }
输出:
{ "@version" => "1", "host" => "172.17.0.1", "@timestamp" => 2018-10-31T09:46:51.121Z, "message" => "<190>Oct 31 15:46:51 evlogd: [local-60sec51.119] [snmp 22002 info] [8/0/4550 <sitmain:80> trap_api.c:930] [software internal system syslog] Internal trap notification 53 (CLISessEnd) user kiwi privilege level Security Administrator ttyname /dev/pts/7\u0000", "type" => "syslog", "tags" => [ [0] "_grokparsefailure" ] }
Config syslog-input-plugin:
input { syslog { port => 5140 grok_pattern => "<%{POSINT:syslog_pri}>%{DATA:month} %{DATA:monthday} %{TIME:time} %{WORD:device}: \[%{WORD:facility}\-%{HOSTNAME}\] \[%{WORD:service} %{POSINT} %{WORD:priority}\] \[%{DATA }\] ?(\[context: %{DATA:context}, %{DATA}\])?%{SPACE}?(\[%{DATA}\] )%{GREEDYDATA:response}\\u0000" } } output { stdout { codec => rubydebug } }
输出:
{ "severity" => 0, "@timestamp" => 2018-10-31T09:54:56.871Z, "@version" => "1", "host" => "172.17.0.1", "message" => "<191>Oct 31 15:54:56 evlogd: [local-60sec56.870] [cli 30000 debug] [8/0/22400 <cli:8022400> cliparse.c:367] [context: local, contextID: 1] [software internal system syslog] CLI command [user kiwi, mode [local]ALA3_ASR5K]: show subscribers ggsn-only sum apn osmp\u0000", "tags" => [ [0] "_grokparsefailure_sysloginput" ], }
我做错了什么?有人可以帮忙解决吗?
PS在logstash 2.4.1和5上测试
我想启动ELK堆栈以从我的所有网络设备(思科,F5,华为,CheckPoint等)收集syslog。在尝试Logstash的同时编写grok模式。下面是一个示例...
与在线调试器不同,logstash的GROK不喜欢我的\\ u0000模式结尾。使用单个反斜杠,一切正常。
我也遇到过类似的问题。解决方法是仅从路由器/防火墙/交换机接收这些日志到syslog-ng
服务器,然后转发到logstash。