需要通过logstash中的grok筛选器自定义日志字段
我的系统上安装了logstash、kibana和elasticsearch,过滤器配置如下:需要通过logstash中的grok筛选器自定义日志字段,logstash,logstash-grok,Logstash,Logstash Grok,我的系统上安装了logstash、kibana和elasticsearch,过滤器配置如下: filter{ if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?:
filter{
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
mutate {
add_field => {
"timestamp" => "%{TIME} %{MONTH} %{monthday}"
}
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
在kibana上接收输出为:
但我需要一些字段,如下所示:
@时间戳
@版本
_身份证
_索引
_类型
_文件
日志级别
主机名
主机名称
进程名称
响应时间
我尝试添加时间戳,但它打印的是相同的字符串,而不是动态结果
您将模式与字段混淆了 模式是表示正则表达式的简写符号,例如%{WORD}作为“\b\w+\b”的快捷方式 字段是存储数据(包括模式匹配的信息)的地方。可以将模式放入如下字段:%%{WORD:my_field} 在grok{}中,匹配:%{SYSLOGTIMESTAMP:syslog\u timestamp},它将匹配的所有内容放入一个名为syslog\u timestamp的字段中。这是系统日志消息前面显示的月份、月日和时间 尽管SYSLOGTIMESTAMP本身被定义为“%{MONTH}+%{MONTHDAY}%{TIME}”,但它们没有“:name”语法,因此没有为MONTH、MONTHDAY和TIME创建字段 假设您确实希望以您描述的格式创建一个新字段,您需要:
grok {
match => { "syslog_timestamp" => "%{MONTH:month} +%{MONTHDAY:monthday} %{TIME:time}" }
}
应该这样做
请注意,您的字段将是一个字符串,因此它在范围查询等中没有任何用处。您应该使用日期{}过滤器将@timestamp替换为syslog\u时间戳信息
祝你好运。好的,我知道了,但是如何显示与日志级别、客户端IP、进程名称等相关的字段。如果要从日志中提取更多信息,您可以制作更多的grok{}节,制作匹配的模式并创建所需的字段。