1.添加filter grok plugin 处理IIS 日志
logstash能成功收集IIS日志后,根据日志的格式,再次编辑前端logstash 的shipper.conf
文件,添加filter。
日志的格式为默认的IIS日志:
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2018-03-24 01:00:15 xx.xx.xxx.xxx HEAD / - 80 182.92.69.212 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) 200 0 0 169
2018-03-24 01:00:20 xx.xx.xx.xxx HEAD /download/index - 80 115.28.203.70 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) 200 0 0 102
根据格式,对应编辑 grok 中的规则 ,另外这边也加入了geoip的插件,让我们可以在KIBANA中获取到客户端IP的地理位置信息,用的都是默认的数据库
grok plugin 介绍
geoip plugin 介绍
date 插件介绍
filter{
if "iislog2" in [tags]{ #匹配对应filebeat配置文件 filebeat.yml 的tags配置
grok {
match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} (%{IPORHOST:s-ip}|-) (%{WORD:cs-method}|-) %{NOTSPACE:cs-uri-stem} %{NOTSPACE:cs-uri-query} (%{NUMBER:s-port}|-) (%{IPORHOST:c-ip}|-) %{NOTSPACE:cs-useragent} (%{NUMBER:sc-status}|-) (%{NUMBER:sc-substatus}|-) (%{NUMBER:sc-win32-status}|-) (%{NUMBER:time-taken}|-)"]
}
date { #修改@timestamp的时间为当前时区,如果你觉得使用UTC时间来做日志的操作没问题,查询,可以去掉这个date的配置
match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ]
timezone => "+00:00" #因为kibana显示日志的时候,会加上当前浏览器时区的时差,所以这边只需要+0000 就可以
}
geoip {
source => "c-ip" ##过滤内容来源
target => "geoip" ##属性设定值
}
}
}
2.修改后端logstash的indexer 配置
根据 前文 的配置,从redis读取数据,输出到elasticsearch 的时候,所用的索引名称是 iislog2-%{+YYYY.MM.dd}"
,这样的配置会造成一个问题,就是当我们创建kibana 的坐标图
coordinate map 的时候
会报一个错误:
No Compatible Fields: The “xxx-xxx*” index pattern does not contain any of the following field types: geo_point
kibana找不到一个类型是geo_point 的字段,所以没办法去创建这个坐标图,但是我们的确是使用了geoip插件,加入了对应地址位置的字段的,但是类型不对。
这里要说明一下elasticsearch的模板,由于我们创建索引的时候,名称是 iislog2-%{+YYYY.MM.dd}
并没有应用elasticsearch的模板,geoip插件创建的geoip.location字段的类型不是geo_point,所以生成坐标图的时候,kibana找不到我们的type 是geo_point 的字段,会创建失败。
如下图,我们创建索引的时候必须是 logstash-*
,当然我们也可以添加模板,自定义哪些索引应用模板 。
ps:改变一个模板将不会影响在已经存在的索引上。
这样我们的geo_ip.location的type就是geo_point 了,在创建kibana的坐标图的时候不会因为找不到type是geo_point的字段而报错
后端lostash indexer.conf
配置修改,调整index的名称为logstash-
开头
output{
if [type] == "iislog2" { #写入system 日志到 es
elasticsearch{
hosts => ["172.16.1.176:9200"]
index => "logstash-iislog2-%{+YYYY.MM.dd}" #使用system+ 日期,这个格式的索引
}
}
}
启动前端以及后端的logstash
3.验证日志
启动ELK ,grok 帮我们分拆好字段,同样geoip插件帮我们创建了地理位置的一些字段
4.创建Kibana看板
打开kibana ,点击Visualize 创建新的坐标地图,选择lostash-iis* 日志
选择使用geoip.location字段生成
点击上方保存后,可以将图形添加到Dashboard 看板中