Hi folks, using ELK 5.6.16.
I'm attempting to geoip iptables logs. I'm seeing geoip fields being populated, but tags
field shows _geoip_lookup_failure
as well as the tags I apply in my grok.
Input is provided by filebeat with document_type
set to dawvpn-iptables
.
Filter:
filter {
if [document_type] == "dawvpn-iptables" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} kernel: '%{USERNAME:ipt_rule}: 'IN=ens3 OUT= MAC=%{DATA} SRC=%{IP:ipt_src} DST=%{IP:ipt_dst} LEN=%{INT:ipt_len:int} %{GREEDYDATA} PROTO=%{WORD:ipt_proto} SPT=%{INT:ipt_spt} DPT=%{INT:ipt_dpt} %{GREEDYDATA}"
}
add_tag => [ "DAWVPN_IPT","DAWVPN_%{ipt_rule}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
geoip {
source => "ipt_src"
target => "geoip"
database => "/etc/logstash/GeoLite2-City_20171003/GeoLite2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float"]
}
}
JSON ouput of parsed event:
{
"_index": "dawvpn-iptables-2019.08.14",
"_type": "log",
"_id": "AWyRxgOrXUAjfYImHJWh",
"_version": 1,
"_score": null,
"_source": {
"geoip": {
"timezone": "Europe/Rome",
"ip": "217.61.20.209",
"latitude": 43.4167,
"coordinates": [
11.8833,
43.4167
],
"continent_code": "EU",
"city_name": "Arezzo",
"country_name": "Italy",
"country_code2": "IT",
"country_code3": "IT",
"region_name": "Province of Arezzo",
"location": {
"lon": 11.8833,
"lat": 43.4167
},
"postal_code": "52100",
"region_code": "AR",
"longitude": 11.8833
},
"offset": 23328,
"input_type": "log",
"ipt_dpt": "22",
"source": "/var/log/filebeat-dawvpn-iptables.log",
"message": "Aug 13 22:25:35 daw kernel: 'TL0G_SSH: 'IN=ens3 OUT= MAC=00:16:3c:0e:7c:89:00:12:f2:91:b8:00:08:00 SRC=217.61.20.209 DST=xxx.xxx.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=54321 PROTO=TCP SPT=58282 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0 ",
"type": "log",
"ipt_src": "217.61.20.209",
"tags": [
"_geoip_lookup_failure",
"DAWVPN_IPT",
"DAWVPN_TL0G_SSH"
],
"ipt_dst": "xxx.xxx.xxx.xxx",
"ipt_proto": "TCP",
"@timestamp": "2019-08-14T02:25:35.000Z",
"syslog_hostname": "daw",
"syslog_timestamp": "Aug 13 22:25:35",
"@version": "1",
"beat": {
"name": "str002",
"hostname": "str002",
"version": "5.6.16"
},
"host": "str002",
"ipt_rule": "TL0G_SSH",
"ipt_spt": "58282",
"document_type": "dawvpn-iptables",
"ipt_len": 40
},
"fields": {
"@timestamp": [
1565749535000
]
},
"highlight": {
"geoip.postal_code": [
"@kibana-highlighted-field@52100@/kibana-highlighted-field@"
]
},
"sort": [
1565749535000
]
}
There is no _grokparsefailure
, the log message is successfully parsed by the grok configuration. The ipt_src field is populated and apparently looked up by geoip based on the contents of the geoip field data. Nothing in logstash logs indicating a problem either.
I'm at a loss to understand why all events are getting tagged _geoip_lookup_failure
.
I have a very similar, working filter, using json input instead, and there are no _geoip_lookup_failure
tags on those events.
What else can I look at to troubleshoot this?
Thanks