ElasticSearch——自定义模板

output中配置

elasticsearch{
  action => "index"
  hosts => ["xxx"]
  index => "http-log-logstash"
  document_type => "logs"
  template => "opt/http-logstash.json"
  template_name => "http-log-logstash"
  template_overwrite => true
}

自定义模板示例

{
    "template" : "logstash-*",
    "order":1,
    "settings" : { "index.refresh_interval" : "60s" },
    "mappings" : {
        "_default_" : {
            "_all" : { "enabled" : false },
            "dynamic_templates" : [{
              "message_field" : {
                "match" : "message",
                "match_mapping_type" : "string",
                "mapping" : { "type" : "string", "index" : "not_analyzed" }
              }
            }, {
              "string_fields" : {
                "match" : "*",
                "match_mapping_type" : "string",
                "mapping" : { "type" : "string", "index" : "not_analyzed" }
              }
            }],
            "properties" : {
                "@timestamp" : { "type" : "date"},
                "@version" : { "type" : "integer", "index" : "not_analyzed" },
                "path" : { "type" : "string", "index" : "not_analyzed" },
                "host" : { "type" : "string", "index" : "not_analyzed" },
                "record_time":{"type":"date","format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},
                "method":{"type":"string","index" : "not_analyzed"},
                "unionid":{"type":"string","index" : "not_analyzed"},
                "user_name":{"type":"string","index" : "not_analyzed"},
                "query":{"type":"string","index" : "not_analyzed"},
                "ip":{ "type" : "ip"},
                "webbrower":{"type":"string","index" : "not_analyzed"},
                "os":{"type":"string","index" : "not_analyzed"},
                "device":{"type":"string","index" : "not_analyzed"},
                "ptype":{"type":"string","index" : "not_analyzed"},
                "serarch_time":{"type":"date","format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},
                "have_ok":{"type":"string","index" : "not_analyzed"},
                "legal":{"type":"string","index" : "not_analyzed"}
            }
        }
    }
}

关键设置

  • template for index-pattern

只有匹配 logstash-* 的索引才会应用这个模板。有时候我们会变更 Logstash 的默认索引名称,记住你也得通过 PUT 方法上传可以匹配你自定义索引名的模板。当然,我更建议的做法是,把你自定义的名字放在 "logstash-" 后面,变成 index => "logstash-custom-%{+yyyy.MM.dd}" 这样。

  • refresh_interval for indexing

Elasticsearch 是一个实时搜索引擎。它实际上是每 1 秒钟刷新一次数据。对于日志分析应用,我们用不着这么实时,所以 logstash 自带的模板修改成了 5 秒钟。你还可以根据需要继续放大这个刷新间隔以提高数据写入性能。

  • multi-field with not_analyzed

Elasticsearch 会自动使用自己的默认分词器(空格,点,斜线等分割)来分析字段。分词器对于搜索和评分是非常重要的,但是大大降低了索引写入和聚合请求的性能。所以 logstash 模板定义了一种叫"多字段"(multi-field)类型的字段。这种类型会自动添加一个 ".raw" 结尾的字段,并给这个字段设置为不启用分词器。简单说,你想获取 url 字段的聚合结果的时候,不要直接用 "url" ,而是用 "url.raw" 作为字段名。

  • geo_point

Elasticsearch 支持 geo_point 类型, geo distance 聚合等等。比如说,你可以请求某个 geo_point 点方圆 10 千米内数据点的总数。在 Kibana 的 bettermap 类型面板里,就会用到这个类型的数据。

  • order

如果你有自己单独定制 template 的想法,很好。这时候有几种选择:

  1. 在 logstash/outputs/elasticsearch 配置中开启 manage_template => false 选项,然后一切自己动手;
  2. 在 logstash/outputs/elasticsearch 配置中开启 template => "/path/to/your/tmpl.json" 选项,让 logstash 来发送你自己写的 template 文件;
  3. 避免变更 logstash 里的配置,而是另外发送一个 template ,利用 elasticsearch 的 templates order 功能。

这个 order 功能,就是 elasticsearch 在创建一个索引的时候,如果发现这个索引同时匹配上了多个 template ,那么就会先应用 order 数值小的 template 设置,然后再应用一遍 order 数值高的作为覆盖,最终达到一个 merge 的效果。

比如,对上面这个模板已经很满意,只想修改一下 refresh_interval ,那么只需要新写一个:

{
  "order" : 1,
  "template" : "logstash-*",
  "settings" : {
    "index.refresh_interval" : "20s"
  }
}

然后运行以下命令即可:

curl -XPUT http://localhost:9200/_template/template_newid -d ‘@/path/to/your/tmpl.json‘

原文地址:https://www.cnblogs.com/caoweixiong/p/11791438.html

时间: 2024-10-10 23:35:28

ElasticSearch——自定义模板的相关文章

elasticsearch 自定义_id

elasticsearch 自定义ID: curl -s -XPUT localhost:9200/web -d ' { "mappings": { "blog": { "_id": { "path": "uuid" }, "properties": { "title": { "type": "string", "in

RazorEngine在非MVC下的使用,以及使用自定义模板

---恢复内容开始--- RazorEngine模板引擎大大的帮助了我们简化字符串的拼接与方法的调用,开源之后,现在在简单的web程序,winform程序,甚至控制台程序都可以利用它来完成. 但如何在使用中调用方法和使用自定义模板呢?来看这样一个例子 1 string str="hello @Model.Name"; 2 string parse=Razor.Prase(str,new {Name="Tom"}); 3 Console.WriteLine(parse

WPF Step By Step 自定义模板

WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现的方案和最终的运行效果. 本文大纲 1.控件模板及数据模板 2.ListBox深度定制模板. 3.TreeView高级模板使用实例. 控件模板及数据模板 控件模板 什么是控件模板,指定可以在控件的多个实例之间共享 Control 的可视结构和性能方面的方面.控件模板其实就是我们在可视方面的自定义模板

Django 自定义模板标签和过滤器

1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和 models.py . views.py 等处于同一层次.例如: books/     __init__.py     models.py     templatetags/     views.py 在 templatetags 中创建两个空文件:一个 __init__.py (告诉Python这是一个包含了Python代码的包)和一个用来存放你自定义的

(转)ThinkPHP自定义模板标签详解

转之--http://www.thinkphp.cn/topic/6258.html 模板标签让网站前台开发更加快速和简单,这让本该由程序猿才能完成的工作,现在只要稍懂得HTM的人也能轻易做到,这也就是模板标签的强大之处.接触过dedecms或者phpcms等内容管理系统的人都知道,cms的前台都是使用模板标签来调用数据,如列表,内容.来看一个phpcms v9调用数据排行列表的标签: 1 {pc:content action="hits" catid="6" nu

sublime text插件emmet自定义模板

首先要找到 snippets.json这个文件,路径是preferences>browse packages,看看有没有emmet目录. 如果没有,可能是您没有安装emmet插件,或者您安装了但目录里没有这个文件夹,这时候您需要手动安装,下载地址 https://github.com/sergeche/emmet-sublime,再把下载的压缩包解压到 packages文件夹下,即可 如果有请打开 snippets.json这个文件,模板就是在这个文件里定义的,您可以自定义模板了.我加了一个vu

前端学PHP之自定义模板引擎

什么是网站模板?准确地说,是指网站页面模板,即每个页面仅是一个板式,包括结构.样式和页面布局,是创建网页内容的样板,也可以理解为已有的网页框架.可以将模板中原有的内容替换成从服务器端数据库中动态内容,目的是可以保持页面风格一致 PHP是一种HTML内嵌式的在服务器端执行的脚本语言,所以大部分PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程.虽然通过MVC设计模式可以把程序应用逻辑与网页呈现逻辑强制性分离,但也只是将应用程序的输入.处理和输出分开,网页呈现逻辑(视图)还会有HTML代

SublimeText插件Emmet的自定义模板

在前端界,作为快速生成代码的Emmet插件相当给力.最近在学bootstrap,需要频繁生成html头文件,我就想着自定义模板.国内只有基础教程,只好自己读英文文档了. Emmet国内基础教程地址: http://www.w3cplus.com/tools/emmet-cheat-sheet.html http://blog.wpjam.com/m/emmet/ 读了一些发现一个解决方案,原文是自定义emmet模板. 工具栏打开Preferences -> Package Settings ->

关于Xcode6 的自定义模板位置

自定义模板放置位置: Xode6 -> 打开App 后,?/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File 下