首页 > 编程学习 > 2019/07/29 elastic stack geoip(05)

2019/07/29 elastic stack geoip(05)

发布时间:2022/1/17 12:49:28

之前讲的是如何从logstash从不同的数据源读取数据,以及如何使用grok,这样的filter来完成数据的正规化,json化,output配置将书数据输出何处,
logstash是配置将数据如何输出到集群中

除了grok显示正规化,还可以定义每一个对应的名称
filter {
grok {
match => {
“message” => “%{IPORHOST:clientip} [%{HTTPDATE:time}] “%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}” %{NUMBER:http_status_code} %{NUMBER:bytes} “(?<http_referer>\S+)” “(?<http_user_agent>\S+)” “(?<http_x_forwarded_for>\S+)””
}
remote_field: message 可以把message移除,只保留分片以后的
}
}

			nginx.remote.ip
			[nginx][remote][ip] 需要这么写来自定义

https://www.elastic.co/guide/en/logstash/current/logstash-config-for-filebeat-modules.html#parsing-apache2在这里插入图片描述input {
beats {
port => 5044
host => “0.0.0.0”
}
}
filter {
if [fileset][module] == “nginx” {
if [fileset][name] == “access” {
grok {
match => { “message” => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} [%{HTTPDATE:[nginx][access][time]}] “%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}” %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} “%{DATA:[nginx][access][referrer]}” “%{DATA:[nginx][access][agent]}”"] }
remove_field => “message”
}
mutate {
add_field => { “read_timestamp” => “%{@timestamp}” }
}
date { filter过滤器 完成日期转换
match => [ “[nginx][access][time]”, “dd/MMM/YYYY:HⓂ️s Z” ]
remove_field => “[nginx][access][time]”
}
useragent {
source => “[nginx][access][agent]”
target => “[nginx][access][user_agent]”
remove_field => “[nginx][access][agent]”
}
geoip {
source => “[nginx][access][remote_ip]” 把原来访问的地址,
target => “[nginx][access][geoip]” 转换成geoip,不是转换,只是新增一个字段,可以下载ip地址库放到geoip
}
}
else if [fileset][name] == “error” {
grok {
match => { “message” => ["%{DATA:[nginx][error][time]} [%{DATA:[nginx][error][level]}] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: (*%{NUMBER:[nginx][error][connection_id]} )?%{GREEDYDATA:[nginx][error][message]}"] }
remove_field => “message”
}
mutate {
rename => { “@timestamp” => “read_timestamp” } 完成字段名转换
}
date {
match => [ “[nginx][error][time]”, “YYYY/MM/dd HⓂ️s” ]
remove_field => “[nginx][error][time]”
}
}
}
}
output {
elasticsearch {
hosts => localhost
manage_template => false
index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”
}
}

https://www.elastic.co/guide/en/logstash/current/plugins-filters-geoip.html
会告诉你去哪里下载库在这里插入图片描述
els1.x版本用1版本,els5.x版本用2版本https://dev.maxmind.com/geoip/geoip2/geolite2/在这里插入图片描述
有精确到国家和城市的,整个文件每隔一段时间就更新,所以要及时更新在这里插入图片描述
数据库应该放在logstash主机上,被geoip来过滤使用在这里插入图片描述
把logstash停止服务,把之前的数据删除在这里插入图片描述
下面需要修改logstash的配置文件
在这里插入图片描述
将来可以输入多个源,然后输出的时候判定 哪个类型往哪里输出
filter {
grok {
match => { “message” => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} [%{HTTPDATE:[nginx
][access][time]}] “%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}
" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} “%{DATA:[nginx][access][referrer]}” "
%{DATA:[nginx][access][agent]}”"] }
remove_field => “message”
}
date {
match => [ “[nginx][access][time]”, “dd/MMM/YYYY:HⓂ️s Z” ]
remove_field => “[nginx][access][time]”
}
useragent {
source => “[nginx][access][agent]” 客户端浏览器
target => “[nginx][access][user_agent]”
remove_field => “[nginx][access][agent]”
}
geoip {
source => “[nginx][access][remote_ip]”
target => “geoip”
database => “/etc/logstash/GeoLite2-City.mmdb”
}

			}   
			
			output {                                                                                                     
				elasticsearch {                                                                                      
					hosts => ["node1:9200","node2:9200","node3:9200"]                                            
					index => "logstash-ngxaccesslog-%{+YYYY.MM.dd}"                                              
				}                                                                                                    
			}

下载数据库放到目录中,解压展开,展开后是个目录在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
启动之后正常访问应该会导出到els集群中在这里插入图片描述
基于kibana可以查看信息在这里插入图片描述
试试用x-forward-for伪装地址在这里插入图片描述
现在还都是固定的同一地址在这里插入图片描述
直接写日志试试
在这里插入图片描述在这里插入图片描述
有地址显示在这里插入图片描述
现在就可以添加图在这里插入图片描述在这里插入图片描述在这里插入图片描述
利用柱状图看下,删除在这里插入图片描述
重新创建一次在这里插入图片描述
可能是kibana对之前做了缓存,重启服务在这里插入图片描述
再次生成几行在这里插入图片描述在这里插入图片描述
确实有数据,geoip的解析没有问题在这里插入图片描述
先删除在这里插入图片描述
重新加一个在这里插入图片描述修改配置文件,重新生成索引在这里插入图片描述在这里插入图片描述在这里插入图片描述
之前假入的数据都echo,时间一样,所以显示不出来15分内的在这里插入图片描述在这里插入图片描述
之前假入的数据都echo,时间一样,所以显示不出来15分内的在这里插入图片描述在这里插入图片描述在这里插入图片描述filter {
grok {
match => { “message” => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} [%{HTTPDATE:[nginx
][access][time]}] “%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}
" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} “%{DATA:[nginx][access][referrer]}” "
%{DATA:[nginx][access][agent]}”"] }
remove_field => “message”
}
date {
match => [ “[nginx][access][time]”, “dd/MMM/YYYY:HⓂ️s Z” ]
remove_field => “[nginx][access][time]”
}
useragent {
source => “[nginx][access][agent]”
target => “[nginx][access][user_agent]”
remove_field => “[nginx][access][agent]”
}
geoip {
source => “[nginx][access][remote_ip]”
target => “geoip”
database => “/etc/logstash/GeoLite2-City.mmdb”
}

			}   
			
			output {                                                                                                     
				elasticsearch {                                                                                      
					hosts => ["node1:9200","node2:9200","node3:9200"]                                            
					index => "logstash-ngxaccesslog-%{+YYYY.MM.dd}"                   
				}                                                                                                    
			}

			注意:
				1、输出的日志文件名必须以“logstash-”开头,方可将geoip.location的type自动设定为"geo_point";
				2、target => "geoip"
			
	除了使用grok filter plugin实现日志输出json化之外,还可以直接配置服务输出为json格式;

修改下日志信息在这里插入图片描述在这里插入图片描述
暂时还是不行在这里插入图片描述
geohash找不到是因为把经纬度的字符串转换成了浮点型,这两个类型需要是geo_point的类型,必须是这种类型,否则识别不了在这里插入图片描述
对logstash创建一个可视化在这里插入图片描述在这里插入图片描述之前可以选择但是不显示,因为生成的索引必须以logstash开头在这里插入图片描述
类型必须是geopoint才能识别在这里插入图片描述
**对应的索引名必须以logstash开头2
2.对应的属性就是geoip_point
**
注意:
1、输出的日志文件名必须以“logstash-”开头,方可将geoip.location的type自动设定为"geo_point";
2、target => "geoip"

除了使用grok filter plugin实现日志输出json化之外,还可以直接配置服务输出为json格式;

调整下日志时间教近的,这些信息可以正常输出在这里插入图片描述在这里插入图片描述
保存一下在这里插入图片描述
每一次日志输出都靠grok日志转换的,事实上可以在nginx直接让日志输出成json格式

除了使用grok filter plugin实现日志输出json化之外,还可以直接配置服务输出为json格式;在这里插入图片描述在这里插入图片描述在这里插入图片描述
可以让直接日志信息输出为json格式,就不用grok进行转换,apache,tomcat,nginx都可以

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000