总字符数: 4.91K

代码: 3.39K, 文本: 0.33K

预计阅读时间: 16 分钟

修改Nginx配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 修改日志模式
 # json 为规则名字 escape=json 设置日志文件格式为json
log_format json escape=json '{"@timestamp":"$time_iso8601",'
'"domain":"$host",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"request_method":"$request_method",'
'"uri":"$uri",'
'"request_time":"$request_time",'
'"status":"$status",'
'"http_referrer":"$http_referer",'
'"body_bytes_sent":"$body_bytes_sent",'
'"xff":"$http_x_forwarded_for",'
'"http_user_agent":"$http_user_agent",'
'"upstream_addr":"$upstream_addr",'
'"upstream_response_time":"$upstream_response_time"}';
 # 将上方的规则名称写到最后
 access_log /var/log/nginx/access.log json;

添加高德地图

1.编辑kibana配置文件kibana.yml,最后面添加

1
2
# 默认情况下kibana使用"Elastic Maps Service"显示地图模块,要使用其他服务提供商的模块可以通过修改"map.tilemap.url"实现,下面是修改为高德地图
 map.tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

配置logstash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 进入工作目录
cd /opt
# 下载GeoLite2数据库
wget https://raw.githubusercontent.com/texnikru/GeoLite2-Database/master/GeoLite2-City.mmdb.gz
# 解压文件
gunzip GeoLite2-City.mmdb.gz
# 将GeoLite2移动到logstash目录下
mv GeoLite2-City.mmdb /usr/local/elk/logstash/config/
# 修改logstash配置文件
vim /usr/local/elk/logstash/default.conf

# 监听5044端口作为输入
input {
beats {
  port => "5044"
}
}
# 数据过滤
filter {
json {
   source => "message"
  remove_field => [ "message" ]
   #删除重复的message收集.
}
mutate {
    split => { "request" => " " }
}
mutate {
  add_field => {
 "httpversion" => "%{[request][2]}"
  }
}
mutate {                           #这里应该是选取xff,这里没有可以删掉,
    split => { "xff" => "," }
}
mutate {
  add_field => {
       "realip" => "%{[xff][0]}"
  }
}
geoip {
   source => "clientip"
    target => "geoip"
   #填写自己的GeoLite2数据库目录
  database => "/usr/local/elk/logstash/config/GeoLite2-City.mmdb"
   #获取经纬度
    add_field => ["[geoip][coordinates]","%{[geoip][longitude]}"]
    add_field => ["[geoip][coordinates]","%{[geoip][latitude]}"]
 }
 mutate {
   convert => [ "[geoip][coordinates]", "float" ]
 }
}
# 这是ElasticSerach服务的监听端口
output {
elasticsearch {
  hosts => ["192.168.10.129:9200"]
  index =>  "nginx-%{+YYYY.MM.dd}"
  #根据项目名称动态创建索引
}
}

geoip

geoip 是 object 类型,它有几个子字段,含义如下:

  • geoip.city_name:城市
  • geoip.continent_name:大陆名称
  • geoip.country_iso_code:国家编码
  • geoip.location:经纬度坐标,必须是:geo_point 类型
  • geoip.region_iso_code:地域编码
  • geoip.region_name:地域名称

扩展程序是谷歌的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 创建一个名为geoip的模板
http://192.168.10.129:9200/_template/geoip/

# index_patterns:索引名称
# ignore_malformed 如果true,格式错误的地理位置被忽略.如果false(默认),格式错误的地理位置引发异常并拒绝整个文档
此字段需要配置成true,以防地理格式错误导致文档被拒绝

{
"index_patterns": [
"nginx*"
],
"order": 10,
"mappings": {
"properties": {
"clientip": {
"type": "ip"
},
"geoip": {
"dynamic": true,
"type": "object",
"properties": {
"location": {
"type": "geo_point",
"ignore_malformed": "true"
},
"coordinates": {
"type": "geo_point",
"ignore_malformed": "true"
},
"ip": {
"type": "ip"
}
}
}
}
},
"aliases": {
"nginx": {}
}
}

以下就代表模板创建成功

Kibana加载地图