Logstash输出到Elasticsearch笔记

2023-11-14



output配置中elasticsearch配置

action

  • index 给一个文档建立索引
  • delete 通过id值删除一个文档(这个action需要指定一个id值)
  • create 插入一条文档信息,如果这条文档信息在索引中已经存在,那么本次插入工作失败
  • update 通过id值更新一个文档。更新有个特殊的案例upsert,如果被更新的文档还不存在,那么就会用到upsert

示例:

action => "index"

index

写入事件所用的索引。可以动态的使用%{foo}语法,它的默认值是:
“logstash-%{+YYYY.MM.dd}”,以天为单位分割的索引,使你可以很容易的删除老的数据或者搜索指定时间范围内的数据。

索引不能包含大写字母。推荐使用以周为索引的ISO 8601格式,例如logstash-%{+xxxx.ww}

示例:

 index => "tomcat_logs_index_%{+YYYY.MM.dd}"

hosts

是一个数组类型的值

意http协议使用的是http地址,端口是9200,示例:

hosts => ["192.168.102.209:9200", "192.168.102.216:9200"]

document_type

定义es索引的type,一般你应该让同一种类型的日志存到同一种type中,比如debug日志和error日志存到不同的type中

如果不设置默认type为logs

template

如果你愿意,你可以设置指向你自己模板的路径。如果没有设置,那么默认的模板会被使用

template_name

这个配置项用来定义在Elasticsearch中模板的命名

注意删除旧的模板

curl -XDELETE <http://localhost:9200/_template/OldTemplateName?pretty>

template_overwrite

布尔类型 默认为false
设置为true表示如果你有一个自定义的模板叫logstash,那么将会用你自定义模板覆盖默认模板logstash

manage_template

布尔类型 默认为true
设置为false将关闭logstash自动管理模板功能
比如你定义了一个自定义模板,更加字段名动态生成字段,那么应该设置为false

order参数

ELK Stack 在入门学习过程中,必然会碰到自己修改定制索引映射(mapping)乃至模板(template)的问题。
这时候,不少比较认真看 Logstash 文档的新用户会通过下面这段配置来制定自己的模板策略:

output {
    elasticsearch {
        host => "127.0.0.1"
        manage_template => true
        template => "/path/to/mytemplate"
        template_name => "myname"
    }
}

然而随后就发现,自己辛辛苦苦修改出来的模板,通过 curl -XGET ‘http://127.0.0.1:9200/_template/myname’ 看也确实上传成功了,但实际新数据索引创建出来,就是没生效!

这个原因是:Logstash 默认会上传一个名叫 logstash 的模板到 ES 里。如果你在使用上面这个配置之前,曾经运行过 Logstash(一般来说都会),那么 ES 里就已经存在这么一个模板了。你可以curl -XGET ‘http://127.0.0.1:9200/_template/logstash’ 验证。

这个时候,ES 里就变成有两个模板,logstash 和 myname,都匹配 logstash-* 索引名,要求设置一定的映射规则了。

ES 会按照一定的规则来尝试自动 merge 多个都匹配上了的模板规则,最终运用到索引上

其中要点就是:template 是可以设置 order 参数的!而不写这个参数,默认的 order 值就是 0。order 值越大,在 merge 规则的时候优先级越高。

所以,解决这个问题的办法很简单:在你自定义的 template 里,加一行,变成这样:

{
    "template" : "logstash-*",
    "order" : 1,
    "settings" : { ... },
    "mappings" : { ... }
}

当然,其实如果只从 Logstash 配置角度出发,其实更简单的办法是:直接修改原来默认的 logstash 模板,然后模板名称也不要改,就好了:

output {
    elasticsearch {
        host => "127.0.0.1"
        manage_template => true
        template_overwrite => true
    }
}

为elasticsearch配置模板

在使用logstash收集日志的时候,我们一般会使用logstash自带的动态索引模板,虽然无须我们做任何定制操作,就能把我们的日志数据推送到elasticsearch索引集群中

但是在我们查询的时候,就会发现,默认的索引模板常常把我们不需要分词的字段,给分词了,这样以来,我们的比较重要的聚合统计就不准确了:

所以这时候,就需要我们自定义一些索引模板了

在logstash与elasticsearch集成的时候,总共有如下几种使用模板的方式:

  1. 使用默认自带的索引模板 ,大部分的字段都会分词,适合开发和时候快速验证使用

  2. 在logstash收集端自定义配置模板,因为分散在收集机器上,维护比较麻烦

  3. 在elasticsearc服务端自定义配置模板,由elasticsearch负责加载模板,可动态更改,全局生效,维护比较容易

使用默认自带的索引模板

ElasticSearch默认自带了一个名字为”logstash”的模板,默认应用于Logstash写入数据到ElasticSearch使用

优点:最简单,无须任何配置

缺点:无法自定义一些配置,例如:分词方式

在logstash收集端自定义配置模板

使用第二种,适合小规模集群的日志收集

需要在logstash的output插件中使用template指定本机器上的一个模板json路径, 例如 template => “/tmp/logstash.json”

优点:配置简单

缺点:因为分散在Logstash Indexer机器上,维护起来比较麻烦

在elasticsearc服务端自定义配置模板

manage_template => false//关闭logstash自动管理模板功能  
template_name => "xxx"//映射模板的名字  

第三种需要在elasticsearch的集群中的config/templates路径下配置模板json,在elasticsearch中索引模板可分为两种

静态模板

适合索引字段数据固定的场景,一旦配置完成,不能向里面加入多余的字段,否则会报错

优点:scheam已知,业务场景明确,不容易出现因字段随便映射从而造成元数据撑爆es内存,从而导致es集群全部宕机,维护比较容易,可动态更改,全局生效。

缺点:字段数多的情况下配置稍繁琐

一个静态索引模板配置例子如下:

{  
  "xxx" : {  
      "template": "xxx-*",  
        "settings": {  
            "index.number_of_shards": 3,  
            "number_of_replicas": 0   
        },  
    "mappings" : {  
      "logs" : {  
        "properties" : {  
          "@timestamp" : { //这是专门给kibana用的一个字段,时间索引
            "type" : "date",  
            "format" : "dateOptionalTime",  
            "doc_values" : true  
          },  
          "@version" : {  
            "type" : "string",  
            "index" : "not_analyzed",  
            "doc_values" : true      
          },  
          "id" : {  
            "type" : "string",  
            "index" : "not_analyzed"  
          },  
          "name" : {  
            "type" : "string",  
            "index" : "not_analyzed"  
          }
        }  
      }  
    }  
  }  
}  

【声明:转载请注明出处
独立:http://wangnan.tech
简书:http://www.jianshu.com/u/244399b1d776
CSDN:http://blog.csdn.net/wangnan9279

动态模板

适合字段数不明确,大量字段的配置类型相同的场景,多加字段不会报错

优点:可动态添加任意字段,无须改动scheaml,

缺点:如果添加的字段非常多,有可能造成es集群宕机

一个动态索引模板配置例子如下:

{  
  "template" : "xxx-*",  
  "settings" : {  
   "index.number_of_shards": 5,  
   "number_of_replicas": 0    

},  
  "mappings" : {  
    "_default_" : {  
      "_all" : {"enabled" : true, "omit_norms" : true},  
      "dynamic_templates" : [ {  
        "message_field" : {  
          "match" : "message",  
          "match_mapping_type" : "string",  
          "mapping" : { "type" : "string", "index" : "analyzed", "omit_norms" : true, "fielddata" : { "format" : "disabled" } } }  
      }, {  
        "string_fields" : {  
          "match" : "*",  
          "match_mapping_type" : "string",  
          "mapping" : { "type" : "string", "index" : "not_analyzed", "doc_values" : true } }  
      } ],  
      "properties" : {  
        "@timestamp": { "type": "date" },  
        "@version": { "type": "string", "index": "not_analyzed" }, 
        "geoip"  : {  
          "dynamic": true,  
          "properties" : { "ip": { "type": "ip" }, "location" : { "type" : "geo_point" }, "latitude" : { "type" : "float" }, "longitude" : { "type" : "float" } } }  
      }  
    }  
  }  
}  

只设置message字段分词,其他的字段默认都不分词

模板结构

  • 通用设置 主要是模板匹配索引的过滤规则,影响该模板对哪些索引生效
  • settings:配置索引的公共参数,比如索引的replicas,以及分片数shards等参数
  • mappings:最重要的一部分,在这部分中配置每个type下的每个field的相关属性,比如field类型(string,long,date等等),是否分词,是否在内存中缓存等等属性都在这部分配置
  • aliases:索引别名,索引别名可用在索引数据迁移等用途上。

例子:

{
  "logstash" : {
    "order" : 0,
    "template" : "logstash-*",
    "settings" : {
      "index" : {
        "refresh_interval" : "5s"
      }
    },
    "mappings" : {
      "_default_" : {
        "dynamic_templates" : [ {
          "message_field" : { "mapping" : { "fielddata" : { "format" : "disabled" }, "index" : "analyzed", "omit_norms" : true, "type" : "string" }, "match_mapping_type" : "string", "match" : "message" } }, {
          "string_fields" : { "mapping" : { "fielddata" : { "format" : "disabled" }, "index" : "analyzed", "omit_norms" : true, "type" : "string", "fields" : { "raw" : { "ignore_above" : 256, "index" : "not_analyzed", "type" : "string" } } }, "match_mapping_type" : "string", "match" : "*" } } ],
        "_all" : {
          "omit_norms" : true,
          "enabled" : true },
        "properties" : {
          "@timestamp" : { "type" : "date" },
          "geoip" : { "dynamic" : true, "properties" : { "ip" : { "type" : "ip" }, "latitude" : { "type" : "float" }, "location" : { "type" : "geo_point" }, "longitude" : { "type" : "float" } } },
          "@version" : { "index" : "not_analyzed", "type" : "string" } }
      }
    },
    "aliases" : { }
  }
}

我们创建一个自定义Template动态模板,这个模板指定匹配所有以”go_logsindex“开始的索引,并且指定允许添加新字段,匹配所有string类型的新字段会创建一个raw的嵌套字段,这个raw嵌套字段类型也是string,但是是not_analyzed不分词的(主要用于解决一些analyzed的string字段无法做统计,但可以使用这个raw嵌套字段做统计)

{
  "template": "go_logs_index_*",
  "order":0,
  "settings": {
      "index.number_of_replicas": "1",
      "index.number_of_shards": "5",
      "index.refresh_interval" : "10s"
  },
  "mappings": {
    "_default_": {
      "_all": {
        "enabled": false
      },
      "dynamic_templates": [
        {
          "my_template": {
            "match_mapping_type": "string",
            "mapping": { "type": "string", "fields": { "raw": { "type": "string", "index": "not_analyzed" } } } }
        }
      ]
    },
    "go": {
      "properties": {
        "timestamp": {
          "type": "string",
          "index": "not_analyzed" },
        "msg": {
          "type": "string",
          "analyzer": "ik",
          "search_analyzer": "ik_smart" },
        "file": {
          "type": "string",
          "index": "not_analyzed" },
        "line": {
          "type": "string",
          "index": "not_analyzed" },
        "threadid": {
          "type": "string",
          "index": "not_analyzed" },
        "info": {
          "type": "string",
          "index": "not_analyzed" },
        "type": {
          "type": "string",
          "index": "not_analyzed" },
        "@timestamp": {
          "format": "strict_date_optional_time||epoch_millis",
          "type": "date" },
        "@version": {
          "type": "string",
          "index": "not_analyzed" }
      }
    }
  }
}

总结

第三种方式统一管理Template最好,推荐使用第三种方式,但是具体问题具体分析。例如场景是Logstash 和ElasticSearch都在一台服务器,第二种就比较好

定制索引模板,是搜索业务中一项比较重要的步骤,需要注意的地方有很多,比如:
1.字段数固定吗
2.字段类型是什么
3.分不分词
4.索引不索引
5.存储不存储
6.排不排序
7.是否加权

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Logstash输出到Elasticsearch笔记 的相关文章

  • Logstash 文件输入插件

    目前 我正在使用文件输入插件来检查我的日志存档 但文件输入插件对我来说不是正确的解决方案 因为文件输入插件本质上期望该文件是事件流而不是静态文件 现在 这给我带来了很大的问题 因为我的日志存档有 100 000 多个日志文件 而我的 Log
  • 在 ElasticSearch 中以微秒格式保存日期

    我正在尝试使用 jdbc 输入插件和 Logstash 将一组事件从 MySQL 数据库保存到弹性搜索中 数据库中的事件记录包含微秒格式的日期字段 实际上 数据库中存在几微秒之间的记录 导入数据时 Elasticsearch 会将微秒日期格
  • Logstash:如何将文件名添加为字段?

    我使用 Logstash Elasticsearch Kibana 来概览我的 Tomcat 日志文件 对于每个日志条目 我需要知道它来自的文件的名称 我想将其添加为字段 有办法做到吗 我用谷歌搜索了一下 只发现这个问题 https sta
  • Logstash 索引文本文件

    我想在 Elasticsearch 中导入一个文本文件 该文本文件每行包含 3 个值 经过几个小时的努力 我还是没有完成 非常感谢您的帮助 安装了 Logstash 的 Elasticsearch 5 4 0 样本数据 username e
  • Logstash 的 Django 日志记录格式

    我正在尝试将 django 应用程序配置为以 Logstash 易于使用的格式写入日志 受到 Node 的 Winston 日志记录包的启发 Logstash 需要一个 JSON 对象 其中包含键 message 和时间戳 timestam
  • 如何保持 Logstash 运行以便将数据从 RDBMS 同步到 ES?

    我是 ELK 堆栈的新手 所以请原谅我的无知 我已经能够让 Logstash 将数据从我的数据库发送到 Elasticsearch 但传输完成后它就会退出 我如何保持它运行以使它们保持同步 谢谢 您需要指定一个schedule https
  • Logstash:将 URL 参数获取到哈希值中

    我正在尝试使用 Logstash 和 ElasticSearch 来监视我的 Apache Web 服务器活动 目前 它工作得很好 但我需要有关我的请求字段的更多具体信息 此时我的logstash配置是 filter grok match
  • Logstash 与 log4j socketappender 不起作用

    我正在尝试通过 log4j 套接字附加程序流式传输我的日志 并尝试通过logstash log4j 输入插件检索相同的日志 我的logstash配置看起来像 input log4j type gt socketlogs port gt 19
  • 运行多个实例时无法启动logstash - path.data 设置

    你好 我是 ELK 堆栈内部的新手 在后台运行一个logstash进程 当它找到匹配的文件模式时 它如下所示 我想了解这里的重要性是什么path data选项 请帮帮我 FATAL logstash runner Logstash coul
  • kafka 主题中的唯一消息检查

    我们使用 Logstash 希望从 Oracle 数据库读取一张表并将这些消息 如下所示 发送到 Kafka Topic1 message1 name name 1 id fbd89256 12gh 10og etdgn1234njF si
  • 在logstash中使用grok解析多行JSON

    我有一个 JSON 格式 SOURCE Source A Model ModelABC Qty 3 我正在尝试使用 Logstash 解析此 JSON 基本上我希望logstash 输出是一个键 值对列表 我可以使用kibana 进行分析
  • Logstash 创建和访问数组

    我想在用于设备的 Logstash 配置文件中创建一个数组 然后通过我正在创建的新字段访问该数组值 例子 filter array devicetype gt Cisco ASA Cisco 3750 mutate add field gt
  • 测试完成后如何自动终止logstash代理?

    我有一个 Logstash 代理来监视我们的自动测试的日志转储 在每批测试开始时 都会启动一个代理 侦听特定文件夹 并在结束时停止 问题是在最后 我需要以某种方式向 Logstash 代理发出信号 表明测试已完成并杀死自己 我怎样才能做到这
  • Logstash doc_as_upsert Elasticsearch 中的交叉索引以消除重复

    我有一个logstash 配置 它在输出块中使用以下内容来尝试减少重复 output if type usage elasticsearch hosts gt elastic4 9204 index gt usage YYYY MM dd
  • 为什么 Elastic Cloud 部署中存在 Logstash 实例?

    我正在调查 Elastic Cloud 托管的 ELK 堆栈 https www elastic co cloud elasticsearch service https www elastic co cloud elasticsearch
  • Logstash创建管道但未创建索引

    我正在尝试使用 json 文件在 elasticsearch 云上创建索引 我已经创建了如下所示的配置 input file path gt root leads json start position gt beginning ignor
  • 将 CloudTrail 日志导入 Logstash

    我正在尝试将日志从 CloudTrail 获取到 ElasticSearch 中 以便我们可以更好地了解 AWS 账户中发生的情况 我已经在我的机器 Ubuntu 14 04 上设置了 Logstash 和 ElasticSearch 并且
  • wildfly-logstash 不将日志发送到logstash

    我正在使用 jboss keycloak 11 0 2 和 wildfly logstash https github com kifj wildfly logstash https github com kifj wildfly logs
  • 从logstash中的文件名获取事件的时间戳

    我们有一个将事件写入文件的进程 没有时间戳 文件名本身带有时间戳后缀 该时间戳应用于文件中的所有事件 现在 我尝试使用logstash的输入文件插件来解析该文件 有没有一种方法可以将文件名获取到字段 以便我可以使用 gsub 过滤器提取时间
  • 如何替换 Logstash 中字段中的字符串

    我的 Windows 事件日志中有一个 IP 地址字段 其中 IP 地址前面包含类似 fffff 的字符 我无法更改此处的源 因此我必须在 Logstash 中修复此问题 我一定很不擅长谷歌搜索 但我真的找不到一种简单的方法来从logsta

随机推荐

  • 知识蒸馏-Yolov3

    本人实验 利用上篇的 Learning Efficient Convolutional Networks Through Network Slimming论文阅读笔记 方法 成功将算力8 5G的darknet21 yolo模型 9个类别 m
  • ETSI最新边缘原生白皮书

    ETSI 6月底发布了由 ETSI 多接入边缘计算小组 ISG MEC 成员撰写的关于 MEC 对边缘原生设计的支持 的新白皮书 本白皮书提供了有关边缘原生方法的概述和愿景 作为云原生的自然演变 它详细解释了 Edge Native 的概念
  • Kotlin中标准库函数(apply、let、run、with、also、takeIf、takeUnless)的使用详解

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到教程 一 apply函数 apply apply函数可以看作是一个配置函数 你可以传入一个接收者 然后调用一系列函数来配置它以便使用 如果提供
  • 【FFmpeg】ffmpeg+nginx-rtmp实现视频流转发

    1 应用场景 目前的摄像头厂家能提供出来的视频流格式有限 且chrome已经禁止了对flash的支持 导致像硬盘录像机这种只能提供rtsp格式流地址的摄像头无法接入Web应用 所以不得不对视频的流地址进行分发 通过代码对流地址中的数据进行切
  • yolo 车辆测距+车辆识别+单目测距(双目测距)

    基于yolo目标检测算法实现的车前道路中的车辆和行人检测 并且可以估测出目标与本车之间的距离 一 视频展示 yolo车距1 订阅专栏获得源码 提供完整代码 无需看下文 二 单目测距原理 图中有一个车辆 且车辆在地面上 其接地点Q必定在地面上
  • JavaScript数据类型,包括原始类型和引用类型有哪些?

    问题 http bbs daxiangclass com thread 334 htm JavaScript数据类型 包括原始类型和引用类型有哪些 原始类型有五个 Number类型 专门保存数字的类型 可用于进行数学计算等的数值 Strin
  • HTTP2.0之我见

    概述 在讨论HTTP2 X 之前 先要搞清楚HTTP2 0的目的 HTTP 2 协议的主要目的是提高网页性能 以及 HTTP1 0 HTTP1 1 SPDY HTTPS之间的关系 参考 https cloud tencent com dev
  • 合批/批量渲染 (Batch)、实例化Instancing

    可以简单的理解为 批量渲染是通过减少CPU向GPU发送渲染命令 DrawCall 的次数 以及减少GPU切换渲染状态的次数 尽量让GPU一次多做一些事情 来提升逻辑线和渲染线的整体效率 但这是建立在GPU相对空闲 而CPU把更多的时间都耗费
  • 操作系统实验Ucore lab1

    lab1 前言 这是中山大学数据科学与计算机学院2019年操作系统实验中关于Ucore的项目以及实验报告 实验要求与Ucore手则有少量出入 所有源代码已经上传至github github个人主页 https starashzero git
  • vmware 进入虚拟机VMware的系统后鼠标不能点

    vmware 进入虚拟机VMware的系统后鼠标不能点 1 关闭虚拟机 重启win10 再打开虚拟机好了 2
  • JAVA经典算法40题(1)

    不多说直接上题 程序1 题目 古典问题 有一对兔子 从出生后第3个月起每个月都生一对兔子 小兔子长到第四个月后每个月又生一对兔子 假如兔子都不死 问每个月的兔子总数为多少 1 程序分析 兔子的规律为数列1 1 2 3 5 8 13 21 p
  • Java中的transient关键字

    前言 说实话学了一段时间java的朋友对于transient这个关键字依旧很陌生基本没怎么用过 但是transient关键字在java中却起到了不可或缺的地位 如果要说讲到 我觉得最可能出现的地方是IO流中对象流 也叫序列化流 的时候会讲到
  • 猫和老鼠服务器维修有问题,猫和老鼠:游戏中大范围的断网掉线问题 玩家:土豆服务器就这样...

    小伙伴们大家好 我是你们的老朋友小可 欢迎大家来到猫和老鼠手游小可堂的第57期 上一期我们讲了大佬对局中都在做什么 不要忽略有些细节哦 那也是致胜的关键点 本期我们要讲的内容有 折磨人的猫 四排牛仔欢乐多和土豆服务器等 折磨人的猫 面对敌方
  • ES recovery、主副分片复制会有一段时间block写入?

    先说结论 1 ES在主副本分片复制时候不会block写入 version gt 2 x 2 ES在recovery主分片时候会有一段时间block写入 全文 ES recovery 主副分片复制会有一段时间block写入 阿里云开发者社区E
  • 023货仓选址(绝对值不等式)

    题目描述 在一条数轴上有 N 家商店 它们的坐标分别为 A1 AN 现在需要在数轴上建立一家货仓 每天清晨 从货仓到每家商店都要运送一车商品 为了提高效率 求把货仓建在何处 可以使得货仓到每家商店的距离之和最小 输入格式 第一行输入整数N
  • 数字化转型提出新要求 新华三IT基础架构如何随需而变?

    企业数字化转型转型的加速 正在给新技术带来全新机遇 在这个过程中 IT架构该如何做好支撑 不妨看看新华三怎么做的 当我们还在探讨数字化转型过程中 企业应该遵循怎样的路径时 企业的IT基础架构早已开始了云化升级 并提出了一系列全新的要求 更高
  • Python抠图:使用OpenCV实现背景去除

    一 了解抠图和OpenCV库 抠图 Matting 是图像处理领域的重要任务之一 旨在将对象与其它部分分离 OpenCV是一个开源计算机视觉库 它提供了丰富的函数和工具进行图像编辑处理 可以简单而快速地实现抠图功能 同时可以进行更多的图像处
  • 数据挖掘竞赛预测模型——五折交叉验证

    使用catboost进行五折交叉验证 import numpy as np import pandas as pd import catboost as cbt from sklearn metric import f1 score fro
  • Pycharm生成Getter和Setter的代码模板

    Setting Live Templates Python Live Template property def field self return self field field setter def field self field
  • Logstash输出到Elasticsearch笔记

    output配置中elasticsearch配置 action index 给一个文档建立索引 delete 通过id值删除一个文档 这个action需要指定一个id值 create 插入一条文档信息 如果这条文档信息在索引中已经存在 那么