ELK 通过地理位置显示访问来源

  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
  • Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

Elasticsearch Logstash Kibana的安装都比较简单,到官网下最新版本,我所用的版本是5.2.2,这里就不详细讲解安装过程,不会的可以网上找。

1, 将地图更改成高德使用中文显示

[[email protected] config]# vim /usr/local/kibana-5.2.2-linux-x86_64/config/kibana.yml

tilemap.url: ‘http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}‘

将日志格式定义为json格式

# vim /usr/local/nginx/conf/nginx.conf

log_format logstash_json ‘{"@timestamp":"$time_iso8601",‘

‘"host":"$server_addr",‘

‘"clientip":"$remote_addr",‘

‘"size":$body_bytes_sent,‘

‘"responsetime":$request_time,‘

‘"upstreamtime":"$upstream_response_time",‘

‘"upstreamhost":"$upstream_addr",‘

‘"http_host":"$host",‘

‘"url":"$uri",‘

‘"xff":"$http_x_forwarded_for",‘

‘"referer":"$http_referer",‘

‘"agent":"$http_user_agent",‘

‘"status":"$status"}‘;

2,查看nginx的访问日志信息

# less /usr/local/nginx/logs/access.log

3,GeoLite2下载地址

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz

4,配置nginx log的匹配方式

#vim /opt/logstash/vendor/bundle/jruby/1.9/gems/logstah-patterns-core-0.3.0/patterns/grok-patterns

URIPARM1 [A-Za-z0-9$.+!*‘|(){},[email protected]#%&/=:;_?\-\[\]]*URIPATH1 (?:/[A-Za-z0-9$.+!*‘(){},~:;[email protected]#%&_\- ]*)+URI1 (%{URIPROTO}://)?(?:%{USER}(?::[^@]*)[email protected])?(?:%{URIHOST})?(?:%{URIPATHPARAM})?NGINXACCESS %{IPORHOST:remote_addr} - (%{USERNAME:user}|-) \[%{HTTPDATE:log_timestamp}\] %{HOSTNAME:http_host} %{WORD:request_method} \"%{URIPATH1:uri}\" \"%{URIPARM1:param}\" %{BASE10NUM:http_status} (?:%{BASE10NUM:body_bytes_sent}|-) \"(?:%{URI1:http_referrer}|-)\" (%{BASE10NUM:upstream_status}|-) (?:%{HOSTPORT:upstream_addr}|-) (%{BASE16FLOAT:upstream_response_time}|-) (%{BASE16FLOAT:request_time}|-) (?:%{QUOTEDSTRING:user_agent}|-) \"(%{IPV4:client_ip}|-)\" \"(%{WORD:x_forword_for}|-)\"

5,编写logstash的脚本文件,将Nginx日志往Redis写

# vim /usr/local/logstash-5.2.2/conf.d/logstash-nginx.conf

input {

file {

path => ["/usr/local/nginx/logs/access.log"]

type => "logstash-prod-nginx"

start_position => "beginning"

codec => json

}

}

filter {

grok {

match => { "message" => "%{NGINXACCESS}" }

}

}

output {

stdout { codec => rubydebug }

redis {

host => "1.1.1.1"

port => "6379"

data_type => ‘list‘

key => ‘logstash-prod-nginx‘

}

}

6,将Nginx的日志从Redis写入到ES中

# vim /usr/local/logstash-5.2.2/conf.d/logstash-es.conf

input {

redis {

host => "1.1.1.1"

port => "6379"

data_type => "list"

key => "logstash-prod-nginx"

type => "redis-input"

#codec => "json"

}

}

filter {

if [type] == "logstash-prod-nginx" {

geoip {

source => "clientip"

target => "geoip"

database => "/usr/local/logstash-5.2.2/etc/GeoLite2-City.mmdb"

add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]

add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]

}

mutate {

convert => [ "[geoip][coordinates]", "float"]

}

}

}

output {

# stdout { codec => rubydebug }

if [type] == "logstash-prod-nginx" {

elasticsearch {

hosts => "1.1.1.1:9200"

manage_template => true

index => "logstash-prod-nginx-%{+YYYY.MM.dd}"

}

}

}

7,登陆kibana页面输入地址:http://127.0.0.1:5601,可见如下图片

填入在logstash里写的index

添加好后,就可以看下如下图片,日志就已被收集

添加访问来源地理位置

就可以看到我们的应用来自各个区域的访问来源

时间: 2024-07-31 19:55:14

ELK 通过地理位置显示访问来源的相关文章

nali——linux显示IP来源的工具

nali包含一组命令行程序,其主要功能就是把一些网络工具的输出的IP字符串,附加上地理位置信息(使用纯真数据库).目前包括以下几个命令: nali nali-dig nali-nslookup nali-ping nali-tracepath nali-traceroute 使用这些命令时,后面跟的dig.ping...命令必须存在.它们的用法和原始命令时一样的,即nali-dig的用法和dig是一样的. 下载地址: wget http://qqwry.googlecode.com/files/

thinkphp 检测访问来源是来自手机还是PC

/** * 判断访问是不是来自手机 * @param * @author Julian */function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $useragent_commentsblock=preg_match('|\(.*?\)|',$useragent,$matches)>0?$matches[0]:''; function Check

nginx 获取源IP 获取经过N层Nginx转发的访问来源真实IP

1. nginx 配置文件中获取源IP的配置项 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #一般的web服务器用这个 X-Real-IP 来获取源IP proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; #如果nginx 服务器是作为反向代理服务器的,则这个配置项是必须的:否则看不到源IP 2. nginx 代理服务器的模块ngi

Android ListView显示访问WebServices返回的JSON结果

1.WebServices的返回结果 2.ListView内容布局代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_heigh

Mac 不显示未知来源选项的解决办法

原文来自百度经验: http://jingyan.baidu.com/article/eae078278b37d41fec5485b2.html 灰常感谢原作 在 macOS Sierra 系统的「安全与隐私」设置,在允许从以下位置下载的应用中,只有 App Store 与 App Store 和被认可的开发者二个选项,唯独任何来源这个选项不见了. 只为传播正能量,还请去对方的网页查看解决办法,下面的东西是个人备忘?? 打开了 Terminal 终端后 ,在命令提示后输入 sudo spctl

JS DOM:显示文献来源链接表

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Explaining the Ddocument Ob Model</title> <link href="style08.css" type="text/css" rel="stylesheet&qu

Nginx 使用IP限制访问来源

在 server {... 下, 或者在 location xxx {... 下, 都可以添加如下的IP访问限制 allow 10.57.22.172; allow 127.0.0.0/24; allow 192.168.0.0/16; allow 10.10.0.0/16; deny all; 如果只需要禁止某些IP访问, 可以使用 deny 8.8.0.0/16;

mac显示任何来源

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Microsoft YaHei"; color: #333333; background-color: #ffffff } span.s1 { } 进这帖子的人应该都知道,在升级了macOS Sierra (10.12)版本后在"安全性与隐私"中不再有"任何来源"选项,如下图: p.p1 { margin: 0.0px 0.0px 0.0p

php获得访问来源(手机wap访问、电脑web访问)

为了更好的用户体验,本主题默认支持wap和web两种访问样式,wap访问将不包含任何脚本.样式也是重新撰写,不支持更多页面,只支持首页.详情页, 评论框.登录等内容将陆续更新到wap内容里.如果想测试,您可以使用手机访问http://qianduanblog.com试试看,是不是效果和电脑 访问不一样? 下面贴出获得访问类型的函数(来源于互联网): 经测试,下面判断是错误的. /*************************************************** ** 返回访问