咱们的ELK架构以下图所示,各个应用节点日志直接经过rsyslog实时传输到Logstash节点,Logstash对生成的各节点日志文件作处理后传输到Elashticsearch。git
input { file { type => "apache_log" path => [ "/opt/data/logs/idca-web1-172.16.3.2/apache_access.log", "/opt/data/logs/idca-web1-172.16.3.2/apache_ssl_request.log" ] stat_interval => 1 discover_interval => 1 start_position=>"end" sincedb_path => "/dev/null" } }
filter { if [type] == "apache_log" { grok { patterns_dir => ["/usr/local/logstash/etc/conf.d/patterns/httpd"] match => { "message" => "%{HTTPDLOG}" } } geoip { source => "clientip" target => "geoip" add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"] add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"] remove_field => ["[geoip][longitude]","[geoip][latitude]"] } mutate { convert => [ "[geoip][coordinates]", "float" ] convert => [ "response","integer" ] convert => [ "bytes","integer" ] convert => [ "usetime","integer" ] remove_field => "message" } date { match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"] } mutate { remove_field => "timestamp" } } }
#geiop配置部分使用add_field添加了一个坐标字段,使用remove_field删除了多余的经度、纬度坐标。
#第一个mutate配置使用convert转换了部分字段的类型,使用remove_filed删除了message字段,message字段是原日志内容,已经分配到了各个字段,因此是多余的直接删除。
#GeoIP 库数据较多,若是你不须要这么多内容,能够经过 fields 选项指定本身所须要的。下例为所有可选内容:github
geoip { fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"] }
output { if [type] == "apache_log" { elasticsearch { hosts => ["172.16.1.25","172.16.1.26","172.16.1.27"] index => 'logstash-apache-%{+YYYY-MM-dd}' codec=>plain{charset=>"UTF-8"} } }
#注意:index索引的名称要以logstash开头,不然kibana在生成地图选择field类型时会报“No Compatible Fields: The “[*****]YYYY-MM” index pattern does not contain any of the following field types: geo_point”的错误。web
HTTPDLOG %{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"%{DATA:referrer}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{NUMBER:usetime} \"%{DATA:agent}\"
#根据日志格式造成正则表达式,logstash有大量的内置变量,直接套用便可,若是某些字段不能正确匹配,可使用DATA变量(表明任意字符)。
#logstash默认pattern目录为/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns,在里面也可找到logstash自带的正则表达式。正则表达式
Elashticsearch不须要其余额外配置,重启Logstash后,Kibana中即可发现日志,利用以上配置文件,获得的字段包括:apache
例1:统计日访排名前5的城市ruby
例2:统计排名前5的城市访问对多的URI架构
例3:访问排名前10位外国国家以及对应IPelasticsearch
最后,将绘制的visualize都添加到dashboard中,作统一展现:ide