首页 > 解决方案 > Fluentd Elasticsearch Kibana 记录动态索引 GEOPOINT 映射

问题描述

我正在使用 EFK 日志堆栈,并设法设置了 fluentd 过滤器和匹配配置,以便在 Kibana 中收集的 tomcat 访问日志所有需要的字段都在那里:IP、纬度、经度、城市、国家代码等。

我有curl -XPUT -H "Content-Type: application/json" --data @fluentd_mapping.json http://$host/fluentd/fluentd/_mapping,但它只影响流利的索引。不是动态创建的每日日志索引<foo>.access.logs.*

所以我的问题是如何应用映射,以便 geo_point 类型对每日日志索引有效?谢谢。

我重新启动了 ES 容器,curl -XPUT以下 mapping.json 由 fluentd 索引而不是日常日志索引拾取:

{
    "fluentd": {
        "location_array": {
          "type": "geo_point"
        },
        "location_properties": {
          "type": "geo_point"
        },
        "location_string": {
          "type": "geo_point"
        },
    }
}

现有模板:

                "dynamic_templates": [{
    "kibana_index_template:.kibana": {
                "dynamic_templates": [{
    "security-index-template": {
                "dynamic_templates": [{
                        "path_match": "result\\.(input(\\..+)*|(transform(\\..+)*)|(actions\\.transform(\\..+)*))\\.search\\.request\\.(body|template)",
    "logstash-index-template": {

现有的索引模式:

        "index_patterns": [".monitoring-logstash-6-*"],
        "index_patterns": [".monitoring-kibana-6-*"],
        "index_patterns": [".ml-anomalies-*"],
        "index_patterns": [".kibana"],
        "index_patterns": [".ml-state"],
        "index_patterns": [".watches*"],
        "index_patterns": [".monitoring-beats-6-*"],
        "index_patterns": [".monitoring-es-6-*"],
        "index_patterns": [".security_audit_log*"],
        "index_patterns": [".ml-meta"],
        "index_patterns": [".security-*"],
        "index_patterns": [".triggered_watches*"],
        "index_patterns": [".watcher-history-9*"],
        "index_patterns": [".monitoring-alerts-6"],
        "index_patterns": [".ml-notifications"],
        "index_patterns": [".logstash"],

我添加了以下模板,但无济于事:

        "fluentd": {
                "order": 0,
                "index_patterns": ["myapp.access.logs*"],
                "settings": {},
                "mappings": {
                        "fluentd": {
                                "properties": {
                                        "location_array": {
                                                "type": "geo_point"
                                        },
                                        "location_properties": {
                                                "type": "geo_point"
                                        },
                                        "location_string": {
                                                "type": "geo_point"
                                        }
                                }
                        }
                },
                "aliases": {}
        },

它没有被 myapp.access.logs 拾取-

标签: elasticsearchkibanafluentdgeopoints

解决方案


为清楚起见,请指定 fluentd_mapping.json 的内容,但看起来索引具有不同的名称模式,这就是映射不适用于所有索引的原因。

您应该使用 elasticsearch 模板来配置 geoip 映射。在模板中查看描述索引匹配条件的“index_patterns”。https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

一旦 index_patterns 正则表达式将匹配您需要的所有索引(包括访问日志索引),那么 GEOIP 映射和所有其余的都将按预期应用。


推荐阅读