当前位置: 首页>编程语言>正文

logstash中ruby组装event对象 logstash event

一、logstash的一些名词介绍

Pipeline

  • input-filter-output 的 3个阶段的处理流程。
  • 队列管理。
  • 插件生命周期管理。

Logstash Event

  • 他是logstash内部流转的数据的表现形式。
  • 原始数据在input 阶段被转换成 Event,在 output阶段 event 被转换成目标格式数据。
  • 在配置文件中可以对 Event 中的属性进行增删改查。

架构图如下:

logstash中ruby组装event对象 logstash event,logstash中ruby组装event对象 logstash event_elasticsearch,第1张

二、queue

1、分类(2类)

In Memory:无法处理进程 crash、机器宕机等情况,会导致数据丢失

Persistent Queue In Disk

  • 可处理进程crash 等情况,保证数据不会丢失
  • 保证数据至少消费一次
  • 充当缓冲区,可以替代kafka等消息队列的作用

2、Persistent Queue

logstash中ruby组装event对象 logstash event,logstash中ruby组装event对象 logstash event_elasticsearch_02,第2张

流程如下:

  • 1->input将data传给persistent queue
  • 2->persistent queue 将data 存储一份到 disk
  • 3,4->disk告诉input已经接收到信息(此处目的是input可以随时调整,避免数据进出过于不平衡的情况)
  • 5->persistent queue将data传给output
  • 6->output传送ack 信息给 persistent queue
  • 7->persistent queue将信息传送给disk,如果正常,此时disk就可以删除data 了

基本配置:

  • queue.type: persisted(默认是memory)
  • queue.max_bytes: 4gb(队列存储最大的数据量,默认是1gb)

三、启动参数

注:Visual VM 工具可以查看jvm情况。

  • pipeline.workers:pipeline线程数,即 filter_output 的处理线程数,默认是cpu核数(启动时 -w即可指定)
  • pipeline.batch.size:batcher 一次批量获取的待处理文档数,默认是125,可以根据输出进行调整,越大会 占用越多的heap 空间,可以通过 jvm.options 调整(启动时 -b即可指定)
  • pipeline.batch.delay:batcher 等待的时长,单位是 ms(启动时 -u即可指定)
  • config.string:指定pipeline 内容(启动时 -e即可指定,指定conf配置文件的位置)
  • –path.data:持久化村塾数据的文件夹,默认是logstash根目录下的data(persistent queue才用到)
  • –debug:日志等级
  • –config.test_and_exit:顾名思义,检测conf文件内容是否正确并退出(启动时 -t 即可指定)

四、pipeline的配置(conf文件的配置)

在配置中引用logstash event 的属性(字段),主要有2中方式:直接引用字段值和在字符串中以sprintf方式应用

  • 直接引用字段值:使用[] 即可,嵌套字段写多层 [] (中括号)即可。
  • 字符串中引用字段值(sprintf):使用%{} 来实现。

五、常见问题

1、查看已安装插件

bin/logstash-plugin list --verbose

2、logstash 输入 elasticsearch 时间的处理
Elasticsearch原生支持date类型,json格式通过字符来表示date类型。所以在用json提交日期至elasticsearch的时候,es会隐式转换,把es认为是date类型的字符串直接转为date类型。
date类型是包含时区信息的,如果我们没有在json代表日期的字符串中显式指定时区,对es来说没什么问题,但是如果通过kibana显示es里的数据时,就会出现问题,数据的时间会晚8个小时。因为kibana从es里读取的date类型数据,没有时区信息,kibana会默认当作0时区来解析,但是kibana在通过浏览器展示的时候,会通过js获取当前客户端机器所在的时区,也就是东八区,所以kibana会把从es得到的日期数据减去8小时。这里就会导致kibana经常遇到的“数据时间延迟8小时”的问题。
所以最佳实践方案就是:我们在往es提交日期数据的时候,直接提交带有时区信息的日期字符串,如:“2016-07-15T12:58:17.136+0800”。
索引中定义的日期格式与提交数据的日期格式要一致,否则会报错。
格式化时间有2种方法:
(1)存入 elasticsearch 前,将数据格式化好

创建索引是指定date format示例:
PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "date": {
          "type":   "date",
          "format": "yyyy-MM-dd"
        }
      }
    }
  }
}

(2)使用 elasticsearch-sql 查询时调用 date_format(date, param)函数
使用 elasticsearch-sql 查询时调用 date_format(date, param)函数。
此方法只针对一对一的date类型,对于 nested(一对多)的内部的date 类型无效(无法格式化)

六、filebeat之module

filebeat 提供了众多开箱即用的 module。

./filebeat modules list 查看 module列表

./filebeat modules enable nginx 启用 nginx module

配置位于 module 文件夹中。

七、metricbeat介绍

1、module

metricbeat 收集指标的对象,比如linux、windows、mysql 等

2、metricset

  • metricbeat 收集指标的集合,该集合以减少收集指标调用次数为划分依据。
  • 1个module 可以有多个 metricset



https://www.xamrdz.com/lan/5tx1963015.html

相关文章: