自定义索引模板未应用

时间:2019-07-13 18:17:59

标签: elasticsearch logstash

我有一个项目,用于分析和可视化访问日志数据。我使用Logstash将数据发送到Elasticsearch,然后使用Kibana可视化一些东西。
一切工作正常,直到我发现需要路径层次分析器来显示我想要的东西。现在,我有了一个自定义模板(JSON),并更改了Logstash配置的out部分。但是,当我为数据建立索引时,不会应用我的模板。

(Elasticseach和Logstash的5.2版无法更新,因为这是我工作的地方正在使用的版本)。

我的JSON文件有效。就输入和过滤器而言,我的Logstash配置也很好。我想我在输出中犯了一个错误。

我已经尝试将manage_template设置为false。我也尝试过template_overwrite =>“ false”。

我尝试首先创建索引(Kibana Dev Tools),然后填充它。我创建了索引模板,然后创建了索引。这样就可以应用我的模板,并且当我创建索引模式时,一切似乎都正确。然后,我索引了一个日志文件。我最终遇到了信使提取错误。 http://localhost:9200/_all/_mapping?pretty=1向我显示,在索引数据时,使用的是默认模板,而不是自定义模板。与添加自定义模板之前没有什么不同。

我在网上搜索并阅读了我在stackoverflow和弹性论坛中可以找到的有关未应用自定义模板的所有信息。我尝试了那里提供的所有解决方案,这就是为什么我最终选择了本地保存的自定义模板,并在logstash输出中提供路径的原因。但是我现在全都没主意了。

这是我的logstash配置的输出:

output {

        elasticsearch { 

                hosts => ["localhost:9200"] 
                template => "/etc/logstash/conf.d/template.json" 
                index => "beam-%{+YYYY.MM.dd}"   
                manage_template => "true" 
                template_overwrite => "true" 
                document_type => "beamlogs"
        } 

        stdout {  
                codec => rubydebug 
        } 

}

这是我的自定义模板:

{
"template": "beam_custom",
"index_patterns": "beam-*",
"order" : 5,
"settings": {
    "number_of_shards": 1,
    "analysis": {
      "analyzer": {
        "custom_path_tree": {
          "tokenizer": "custom_hierarchy"
        },
        "custom_path_tree_reversed": {
          "tokenizer": "custom_hierarchy_reversed"
        }
      },
      "tokenizer": {
        "custom_hierarchy": {
          "type": "path_hierarchy",
          "delimiter": "/"
        },
        "custom_hierarchy_reversed": {
          "type": "path_hierarchy",
          "delimiter": "/",
          "reverse": "true"
        }
      }
    }
  },
  "mappings": {
    "beamlogs": {
    "properties": {
      "object": {
        "type": "text",
        "fields": {
          "tree": {
            "type": "text",
            "analyzer": "custom_path_tree"
          },
          "tree_reversed": {
            "type": "text",
            "analyzer": "custom_path_tree_reversed"
          }
        }
      },
      "referral": {
        "type": "text",
        "fields": {
          "tree": {
            "type": "text",
            "analyzer": "custom_path_tree"
          },
          "tree_reversed": {
            "type": "text",
            "analyzer": "custom_path_tree_reversed"
          }
        }
      },
      "@timestamp" : {
            "type" : "date"
      },
      "action" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "datetime" : {
            "type" : "date",
            "format": "time_no_millis",
            "fields" : {
              "keyword" : {
                "type": "keyword"
              }
            }
          },
          "id" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "info" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "message" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "page" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "path" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "result" : {
            "type" : "long"
          },
          "s_direct" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "s_limit" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "s_mobile" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "s_terms" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "size" : {
            "type" : "long"
          },
          "sort" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          }
      }
    }
  }
}

将数据编入索引后,这就是我从http://localhost:9200/_all/_mapping?pretty=1获得的内容

"datetime" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
"object" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },

datetime不应具有文本类型。但更糟糕的是,甚至没有创建objet.tree之类的字段。

我真的不关心日期时间的错误映射,但是我需要使Path Hierarchy Analyzer起作用。我就是不知道该怎么办。


所以。我刚刚尝试的是在Kibana中创建索引模板。

PUT _template/beam_custom
/followed by what is in my template.json

然后我检查模板是否已创建。

GET _template/beam_custom

输出为:

    {
      "beam_custom": {
        "order": 100,
        "template": "beam_custom",
        "settings": {
          "index": {
            "analysis": {
              "analyzer": {
                "custom_path_tree_reversed": {
                  "tokenizer": "custom_hierarchy_reversed"
                },
                "custom_path_tree": {
                  "tokenizer": "custom_hierarchy"
                }
              },
              "tokenizer": {
                "custom_hierarchy": {
                  "type": "path_hierarchy",
                  "delimiter": "/"
                },
        ...

所以我想创建模板是可行的。

然后我创建了一个索引

    PUT beam-2019-07-15

但是当我检查索引时,我得到了:

    {
  "beam-2019.07.15": {
    "aliases": {},
    "mappings": {},
    "settings": {
      "index": {
        "creation_date": "1563044670605",
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "uuid": "rGzplctSQDmrI_NSlt47hQ",
        "version": {
          "created": "5061699"
        },
        "provided_name": "beam-2019.07.15"
      }
    }
  }
}

是否应该识别索引模式?我认为这是问题的核心。我以为可以使用我的模板,而输出应该是这样的:

{
  "beam-2019.07.15": {
    "aliases": {},
    "mappings": {
      "logs": {
        "properties": {
          "@timestamp": {
            "type": "date"
          },
          "action": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword"
              }
            }
          },...

为什么无法识别模式?

1 个答案:

答案 0 :(得分:1)

所以,我发现了错误。

当我查找如何构建自己的模板时,有时会查看当前版本的文档。但是在5.2中,“ index_patterns =>”不存在。

"template": "beam_custom",
"index_patterns": "beam-*",

那当然不起作用。

相反,我放下了“ index_patterns”行,并在模板参数中定义了我的模式。

"template": ["beam-*"],
//rest

这解决了问题。之后,我的模式被识别。

但是,我现在面临另一个问题。路径层次分析器无法正常工作。没有创建object.tree和我想要的其余字段。

GET beam-*/_search
{
"query": {
"term": {
"object.tree": "/belletristik/"
}
}
}

什么也没产生,尽管我应该有几百次点击。查看我的数据,我的路径没有分析的字段。有什么想法吗?