Logstash安装与使用
尽量安装当前最新版本,提供的功能和插件较多。
1.1环境
查看Java版本(logstash-6.0.0需要Java8)
Java –version
1.2安装
安装的方式有以下两种:
//下载
sudo curl -O https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz
//解压并进入该目录
sudo tar zxvf logstash-6.0.0.tar.gz
cd logstash-5.6.0
//简单测试
sudo bin/logstash -e 'input { stdin { } } output { stdout {} }'
//命令行下输入一些字符,然后我们将看到logstash的输出内容与输出一致
hello world
2013-11-21T01:22:14.405+0000 0.0.0.0 hello world
2)通过package repositories安装(参考官网)
概念:logstash是一个数据采集、加工处理以及传输(输出)的工具。
特点:
- 所有类型的数据集中处理
- 不同模式和格式数据的正常化
- 自定义日志格式的迅速扩展
- 为自定义数据源轻松添加插件
logstash三种启动方式:
-e //sting类型启动
-f //指定配置文件启动
service logstash start //服务启动
其他参数:
--config.test_and_exit:解析配置文件并报告错误
--config.reload.automatic:自动重载配置,不用每次修改配置文件时都关闭并重启logstash
每次启动是都会警告,logstash ignoring the pipelines.yml file,可以忽略该条警告!pipelines.yml文件用于在一个logstash中运行多个管道。
2.3 logstash配置语句详解
logstash配置文件包含三个配置部分,分别为:input{}、filter{}、output{}。
{} 定义区域,区域内可以定义一个或多个插件,通过插件对数据进行收集,加工处理,输出。
数据类型:
布尔值类型: ssl_enable => true
字节类型: bytes => "1MiB"
字符串类型: name => "xkops"
数值类型: port => 22
数组: match => ["datetime","UNIX"]
哈希: options => {key1 => "value1",key2 => "value2"}
编码解码: codec => "json"
路径: file_path => "/tmp/filename"
注释: #
条件判断:
等于: ==
不等于: !=
小于: <
大于: >
小于等于: <=
大于等于: >=
匹配正则: =~
不匹配正则: !~
包含: in
不包含: not in
与: and
或: or
非与: nand
非或: xor
复合表达式: ()
取反符合: !()
2.4 logstash常用插件
input插件,常用的插件:file、tcp、udp、syslog,beats
filter插件,常用的插件:json、grok
output插件,常用的插件:file; tcp/udp; redis/kfaka; elasticsearch
codec类插件,常用的插件:plain、json、json_lines、rubydebug、multiline等
2.5 logstash使用小结
2.5.1. logstash的sting类型启动
sudo /bin/logstash -e 'input{ stdin{} } output{ stdout{} }'
sudo bin/logstash -e 'input { udp{ port => 514 } } output { stdout {codec => "json_lines"} }'
这种方式将配置信息以字符串形式给出,一般用于简单测试
2.5.2. logstash的指定配置文件启动
当配置信息较为复杂时,不建议采用2.5.1的方法,应该以指定配置文件方式启动,如下:
sudo bin/logstash -f /home/sdn/logstash-6.0.0/conf.d/dev_syslog_kafka.conf
这种方式将配置信息写入dev_syslog_kafka.conf 文件,然后再调用
2.5.3 配置文件创建过程中的一些细节
2.5.3.1 @timestamp比当前系统时间早8小时:
@timestamp为UTC时间,无论怎么设置,其值不会改变,解决方法:在filter中 设置字段timestamp = @timestamp + 8小时,并删除字段@timestamp。
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
2.5.3.2添加字段和删除字段
需要将输入的某个字段中的多个信息分为多个字段输出,或者需要删除一些logstash字段生成或者不需要的字段时,都是在filter的mutate(格式转换,可以多个)中完成:
//将字段切片
mutate{
split=>["message",","]
}
//判断并添加字段
if [message][0] == "FLOW" {
mutate{
add_field => {
"sampleType" => "%{[message][0]}"
"agentIp" => "%{[message][1]}"
…
}
}
}
//删除字段
mutate{
remove_field => ["message"]
remove_field => ["@version"]
…
}
2.5.3.4 运行多个配置文件
1.将多个文件放入同一个文件夹,运行时指定文件夹如conf3.d文件夹:
sudo bin/logstash -f /home/sdn/logstash-6.0.0/conf3.d
注意:此时只是把多个的.conf文件的内容完全合并为了一个配置文件,需要通过添加
tag或type字段进行判断处理;也可将多个配置文件写成一个。
2.运行文件夹中的部分配置文件
bin/logstash --debug -f '/tmp/{one,two,three}'
Command-Line Flags
Logstash提供了以下的命令行标志,可以通过 –help查看
--node.name NAME
指定这个Logstash实例的名称。如果没有赋值,它将默认为当前的主机名。
-f, --path.config CONFIG_PATH
加载配置文件,可以是一个特定的文件或目录。如果一个目录,该目录中的所有文件将按词法顺序连接,然后作为一个单独的配置文件进行解析。不支持多次指定,如果指定这个标志多次,Logstash使用最后一个指定(例如,- f foo –f bar等同于-f bar)。
可以使用通配符功能加载特定的文件的名字:
bin/logstash --debug -f '/tmp/{one,two,three}'
上面的命令,logstash会加载三个配置文件,one、two和three,将它们解析为一个配置文件。
-e, --config.string CONFIG_STRING
将使用指定的字符串作为配置文件。语法与配置文件相同。如果没有指定input,会使用默认的input { stdin { type => stdin } },如果没有指定output,会使用默认的output { stdout { codec => rubydebug } }.如果两个都想使用默认的,使用-e空字符串。默认为nil。
--module
启动指定的模块。通常与- M选项一起使用,指定模块中的变量值。如果在命令行上使用该选项,会忽略logstash.yml文件中的所有模块和任何设置。这个标志与- f和- e标志互斥。只能指定三者中的一个。可以指定多个模块,通过逗号分隔,或通过调用多次标志。
-M, --modules.variable
指定模块变量,格式为:
-M "MODULE_NAME.var.PLUGIN_TYPE.PLUGIN_NAME.KEY_NAME=value"
或者:
-M "MODULE_NAME.KEY_NAME.SUB_KEYNAME=value"
-M可以使用多次,没有-M参数,则使用默认值,只能和 –-module一起使用,否则会被忽略。
-w, --pipeline.workers COUNT
设定管道 workers(进程?)个数,该标志同时作用于管道中的filter,output阶段。当cpu使用率不高时,可以适当增加该值,更好地利用机器的处理能力。默认值为cpu核的数量
-b, --pipeline.batch.size SIZE
管道批大小。该选项指定worker线程每次读取事件个数的最大值。默认值为125个事件,更大的批大小通常更有效率,代价是增加了内存开销。可能需要增加JVM堆大小,从而使该选项更加有效。
-u, --pipeline.batch.delay DELAY_IN_MS
在创建管道批次时,下个事件轮循时需要多长时间。这个选项定义了多少毫秒后轮询下个事件,在传输一个小批处理给filters之前。默认是250 ms。
--pipeline.unsafe_shutdown
强制logstash退出,即使内存中还有事件。默认情况下,Logstash将拒绝退出,直到所有收到事件被送往输出。启用这个选项在关闭期间可能导致数据丢失。
-p, --path.plugins PATH
指定自定义插件的路径,多个路径时可以指定多次。插件需要指定具体路径:
PATH/logstash/TYPE/NAME.rb
其中TYPE为input,filter,outputs或者codecs,NAME为插件名
-l, --path.logs PATH
指定logstash内部log的路径
--log.level LEVEL
设置log等级,可能的值有:
fatal: 非常严重错误消息,通常紧随其后的是应用程序异常终止
frror: 错误日志
warn: 警告日志
info: 详细信息(默认值)
debug: 记录调试信息(开发人员)
trace:调试信息外更细粒度的信息
--config.debug
显示一个debug日志信息的具体配置(需要设置为debug等级)。警告:该log信息会明文传递任何密码选项到插件配置,可能导致明文密码出现在日志!
-i--