Logstash安装与使用

  1. Logstash安装

尽量安装当前最新版本,提供的功能和插件较多。

1.1环境

查看Java版本(logstash-6.0.0需要Java8)

Java  –version

 

1.2安装

安装的方式有以下两种:

  1. 通过下载文件包安装(推荐,免安装)

//下载

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安装(参考官网)
1. Logstash 使用
1. logstash的概念及特点
概念:logstash是一个数据采集、加工处理以及传输(输出)的工具。
特点:
  - 所有类型的数据集中处理
  - 不同模式和格式数据的正常化
  - 自定义日志格式的迅速扩展
- 为自定义数据源轻松添加插件
 
1. 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--