博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/07/29 elastic stack geoip(05)
阅读量:3924 次
发布时间:2019-05-23

本文共 6141 字,大约阅读时间需要 20 分钟。

之前讲的是如何从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都可以

转载地址:http://ickgn.baihongyu.com/

你可能感兴趣的文章
java 多线程简介
查看>>
docker架构
查看>>
Docker Client创建与命令执行
查看>>
springMVC学习笔记
查看>>
PageRank算法与特征向量和特征值(eigenvector和eigenvalue)
查看>>
HITS算法--从原理到实现
查看>>
MapReduce原理
查看>>
zookeeper原理
查看>>
MapReduce入门
查看>>
WEB服务器、应用程序服务器、HTTP服务器区别
查看>>
小白入门:大型网站技术架构负载均衡技术
查看>>
归并排序(JAVA)
查看>>
对Java Serializable(序列化)的理解和总结
查看>>
Netty Buffer(缓冲)
查看>>
Docker简单介绍
查看>>
.ftl文件 是什么文件
查看>>
数据结构与算法--栈、队列(队列)
查看>>
动态规划
查看>>
增强学习(一)——马尔科夫决策过程(MDP)
查看>>
增强学习(二)——策略迭代与值迭代
查看>>