ELK7.10.1绘制热力地图Kibana无法识别geo_point

前言

ELK分析日志非常强大,而相关的资料又非常少,并且随着版本升级,旧版配置不兼容新版导致很多坑,本文提供解决访问IP热力地图绘制问题方案。
更多参考win搭建ELK7.10.1分析Nginx日志绘制图表

操作

■ 选用高德地图

默认是英文地图看着很不习惯,改用高德地图。
配置config下的kibana.yml。
添加配置

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

如果高德api改变了,就得修改该配置。

■ 创建地图

很多教程都会提到选择区域地图、坐标地图、Coordinate Map之类,这些在新版中已经全部去除,新版中独立的一个Maps。
在这里插入图片描述
然后==>创建地图

在这里插入图片描述

■ 创建geo_point

① 查看

添加图层 ==》热图 ==》 选择索引模式,会发现没有可以选择的索引。
然后打开索引模式,选择一个索引,点进去查看,会发现没有geo_point类型的字段,这就需要我们去创建一个geo_point类型。

② 修改数据格式

geo_point类型的格式是坑点,在7.10.1中,为如下格式。
在这里插入图片描述
所以在logstash.conf中,我们要配置创建这种类型的数据
filter中添加

geoip {
    
    
            source => "remote_addr"
			target => "geoip"
			add_field => [ "[coordinates]", "%{[geoip][latitude]},%{[geoip][longitude]}" ]
        }

经纬度顺序不能反,source为你自己的Nginx下游ip(也就是客户ip)字段。

③ 设置数据类型

有了coordinates字段,但它的类型仍然是文本,ELK是不会将它字段转换为geo_point类型的。


  1. 新建文件nginx-logstash.json

创建模板设置coordinates为geo_point类型。

{
    
    
    "order": 1,
    "version": 60001,
    "index_patterns": [
        "nginx-*"
    ],
    "settings": {
    
    
        "index": {
    
    
            "number_of_shards": "1",
            "refresh_interval": "5s"
        }
    },
    "mappings": {
    
    
        "dynamic_templates": [
            {
    
    
                "message_field": {
    
    
                    "path_match": "message",
                    "mapping": {
    
    
                        "norms": false,
                        "type": "text"
                    },
                    "match_mapping_type": "string"
                }
            },
            {
    
    
                "string_fields": {
    
    
                    "mapping": {
    
    
                        "norms": false,
                        "type": "text",
                        "fields": {
    
    
                            "keyword": {
    
    
                                "ignore_above": 256,
                                "type": "keyword"
                            }
                        }
                    },
                    "match_mapping_type": "string",
                    "match": "*"
                }
            }
        ],
        "properties": {
    
    
                    "coordinates": {
    
    
                        "type": "geo_point"
                    }
                }
    },
    "aliases": {
    
    }
}

  1. 修改logstash.conf
output{
    
    
	elasticsearch {
    
    
	#这里记得写的是hosts,因为可能会是集群的 elasticsearch,但是配置的之后只要写上主节点就行了	
        hosts => "localhost:9200"
	#规定存储日志的索引规则,动态配置,方便管理
        index => "nginx-%{type}=%{+YYYY.MM.dd}"
	# 淘汰 type 里的参数 就是上面配置的	
	#	document_type => "%{type}"
		template => "路径。。。/ELK/logstash-7.10.1/config/template/nginx-logstash.json"
		template_name => "nginx-logstash"
		template_overwrite => true
    }
	stdout{
    
    
		codec => rubydebug
	}
}

  1. 启动后查看

成功的话,Elasticsearch中就能搜索的到这个模板。
在这里插入图片描述
索引信息如下
在这里插入图片描述
模板生效,字段类型就会对应上,数据格式正确,采集才会成功。

④ 重新创建索引模式

在这里插入图片描述

■ 添加图层

再添加图层,成功。
在这里插入图片描述

最后

logstash的索引规则不能乱配,必须在elasticsearch有对应的索引才能成功,像网上文章什么logstash-*、logstash_*之类,ES get请求_template就能获得全部索引,默认自带的索引即便对应上了也一般和自己的数据格式对不上,所以需要自建模板。

猜你喜欢

转载自blog.csdn.net/qq_24054301/article/details/113388541
今日推荐