Logstash Grok 过滤器 key/value 对
Logstash Grok Filter key/value pairs
正在努力将我们的 ESET 日志文件(json 格式)导入 elasticsearch。我将日志传送到我们的系统日志服务器 (syslog-ng),然后传送到 logstash 和 elasticsearch。一切都在按预期进行。我的问题是试图在 logstash 中处理日志...我似乎无法将 key/value 对分成单独的字段。
这是一个示例日志条目:
Jul 8 11:54:29 192.168.1.144 1 2016-07-08T15:55:09.629Z era.somecompany.local ERAServer 1755 Syslog {"event_type":"Threat_Event","ipv4":"192.168.1.118","source_uuid":"7ecab29a-7db3-4c79-96f5-3946de54cbbf","occured":"08-Jul-2016 15:54:54","severity":"Warning","threat_type":"trojan","threat_name":"HTML/Agent.V","scanner_id":"HTTP filter","scan_id":"virlog.dat","engine_version":"13773 (20160708)","object_type":"file","object_uri":"http://malware.wicar.org/data/java_jre17_exec.html","action_taken":"connection terminated","threat_handled":true,"need_restart":false,"username":"BATHSAVER\sickes","processname":"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"}
这是我的 logstash 配置文件:
input {
udp {
type => "esetlog"
port => 5515
}
tcp {
type => "esetlog"
port => 5515
}
filter {
if [type] == "esetlog" {
grok {
match => { "message" => "%{DATA:timestamp}\ %{IPV4:clientip}\ <%{POSINT:num1}>%{POSINT:num2}\ %{DATA:syslogtimestamp}\ %{HOSTNAME}\ %{IPORHOST}\ %{POSINT:syslog_pid\ %{DATA:type}\ %{GREEDYDATA:msg}" }
}
kv {
source => "msg"
value_split => ":"
target => "kv"
}
}
}
output {
elasticsearch {
hosts => ['192.168.1.116:9200']
index => "eset-%{+YYY.MM.dd}"
}
}
当数据在 kibana 中显示时,除了数据和时间之外,所有内容都集中在 "message" 字段中,没有单独的 key/value 对。
我已经阅读和搜索了一个星期了。我对其他日志文件做过类似的事情,完全没有问题,所以不确定我遗漏了什么。非常感谢任何 help/suggestions。
你能试试下面的 logstash 配置吗
grok {
match => {
"message" =>["%{CISCOTIMESTAMP:timestamp} %{IPV4:clientip} %{POSINT:num1} %{TIMESTAMP_ISO8601:syslogtimestamp} %{USERNAME:hostname} %{USERNAME:iporhost} %{NUMBER:syslog_pid} Syslog %{GREEDYDATA:msg}"]
}
}
json {
source => "msg"
}
它正在 http://grokconstructor.appspot.com/do/match#result
中运行和测试
此致。
正在努力将我们的 ESET 日志文件(json 格式)导入 elasticsearch。我将日志传送到我们的系统日志服务器 (syslog-ng),然后传送到 logstash 和 elasticsearch。一切都在按预期进行。我的问题是试图在 logstash 中处理日志...我似乎无法将 key/value 对分成单独的字段。
这是一个示例日志条目:
Jul 8 11:54:29 192.168.1.144 1 2016-07-08T15:55:09.629Z era.somecompany.local ERAServer 1755 Syslog {"event_type":"Threat_Event","ipv4":"192.168.1.118","source_uuid":"7ecab29a-7db3-4c79-96f5-3946de54cbbf","occured":"08-Jul-2016 15:54:54","severity":"Warning","threat_type":"trojan","threat_name":"HTML/Agent.V","scanner_id":"HTTP filter","scan_id":"virlog.dat","engine_version":"13773 (20160708)","object_type":"file","object_uri":"http://malware.wicar.org/data/java_jre17_exec.html","action_taken":"connection terminated","threat_handled":true,"need_restart":false,"username":"BATHSAVER\sickes","processname":"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"}
这是我的 logstash 配置文件:
input {
udp {
type => "esetlog"
port => 5515
}
tcp {
type => "esetlog"
port => 5515
}
filter {
if [type] == "esetlog" {
grok {
match => { "message" => "%{DATA:timestamp}\ %{IPV4:clientip}\ <%{POSINT:num1}>%{POSINT:num2}\ %{DATA:syslogtimestamp}\ %{HOSTNAME}\ %{IPORHOST}\ %{POSINT:syslog_pid\ %{DATA:type}\ %{GREEDYDATA:msg}" }
}
kv {
source => "msg"
value_split => ":"
target => "kv"
}
}
}
output {
elasticsearch {
hosts => ['192.168.1.116:9200']
index => "eset-%{+YYY.MM.dd}"
}
}
当数据在 kibana 中显示时,除了数据和时间之外,所有内容都集中在 "message" 字段中,没有单独的 key/value 对。
我已经阅读和搜索了一个星期了。我对其他日志文件做过类似的事情,完全没有问题,所以不确定我遗漏了什么。非常感谢任何 help/suggestions。
你能试试下面的 logstash 配置吗
grok {
match => {
"message" =>["%{CISCOTIMESTAMP:timestamp} %{IPV4:clientip} %{POSINT:num1} %{TIMESTAMP_ISO8601:syslogtimestamp} %{USERNAME:hostname} %{USERNAME:iporhost} %{NUMBER:syslog_pid} Syslog %{GREEDYDATA:msg}"]
}
}
json {
source => "msg"
}
它正在 http://grokconstructor.appspot.com/do/match#result
中运行和测试此致。