一、logstash的一些名词介绍
Pipeline
- input-filter-output 的 3个阶段的处理流程。
- 队列管理。
- 插件生命周期管理。
Logstash Event
- 他是logstash内部流转的数据的表现形式。
- 原始数据在input 阶段被转换成 Event,在 output阶段 event 被转换成目标格式数据。
- 在配置文件中可以对 Event 中的属性进行增删改查。
架构图如下:
二、queue
1、分类(2类)
In Memory:无法处理进程 crash、机器宕机等情况,会导致数据丢失
Persistent Queue In Disk:
- 可处理进程crash 等情况,保证数据不会丢失
- 保证数据至少消费一次
- 充当缓冲区,可以替代kafka等消息队列的作用
2、Persistent Queue
流程如下:
- 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