Logstash 入门

一、简介

  Logstash 是开源的服务器端数据处理管道,支持从不同来源采集数据,装换数据,并将数据发送到不同的存储库中。  

  Logstash 项目诞生于 2009 年 8 月 2 日。其作者是世界著名的运维工程师乔丹西塞(JordanSissel),乔丹西塞当时是著名虚拟主机托管商 DreamHost 的员工,还发布过非常棒的软件打包工具 fpm。

  2013年,Logstash 被 Elasticsearch 公司收购。

二、安装

  Logstash 开箱即用,所以你只要下载压缩文件,然后解压之后就能用了。

$ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz
$ tar -zxvf logstash-7.3.0.tar.gz
$ cd logstash-7.3.0

三、Hello World

  首先以输出一个 “Hello World” 的形式开始 Logstash 的学习。

  可以运行以下命令, stdin{} 表示从标准输入输入信息; -e 表示从命令行指定配置;然后 codec=>rubydebug 表示把结果输出到控制台。

$ bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

  此时在命令行输入 Hello World , 然后回车会看到如下结果:  

{
    "@version" => "1",
    "@timestamp" => 2019-08-09T08:52:29.790Z,
    "message" => "Hello World ",
    "host" => "chengshengzhangdeMacBook-Pro.local"
}

  如上显示,Logstash 会额外增加一些信息,比如 @timestamp 时间, host 主机名等。

四、运行流程

  使用过Linux的程序员都清楚,Linux 有一个管道符,类似于以下命令:

$ cat randdata | awk '{print $2}' | sort | uniq -c | tee sortdata

  Logstash 就像一个管道符一样,可以将输入,经过过滤,然后输出到不同的存储库中。Logstash 使用不同的线程来实现这些功能的,数据在线程之间以事件的形式流传, 而且 Logstash 可以处理多行的数据。

  Logstash 采用的可插拔的框架,目前已经有200多个插件。分为输入插件(input),编码插件(codec),过滤器插件(filter),输出插件(output)。

  Logstash 处理数据的整个流程: input | decode | filter | encode | output。

  • input 插件可以对接不同数据源
  • codec 插件,codec 来自 coder / decoder 两个单词的首字母缩写,主要用来decode、encode事件的,codec 使 Logstash 更方便的和其他自定义的数据格式对接,将相应格式的数据转化为Logstash事件
  • filter 插件可以解析各个事件,比如把非结构化数据结构化,从IP地址解析出地理坐标等
  • output 插件对接不同存储层,比如 ElasticSearch,HDFS,Kafka等。

五、命令行参数

5.1、-e

  意即执行。我们在 "Hello World" 的时候已经用过这个参数了。事实上你可以不写任何具体配置,直接运行 bin/logstash -e '' 达到相同效果。这个参数的默认值是下面这样:

input {
    stdin { }
}
output {
    stdout { }
}

5.2、--config 或 -f

  意即文件。真实运行中,我们会写很长的配置,甚至可能超过 shell 所能支持的 1024 个字符长度。所以我们必把配置固化到文件里,然后通过 bin/logstash -f agent.conf 这样的形式运行。

  此外,logstash 还提供一个方便我们规划和书写配置的小功能。你可以直接用 bin/logstash -f /etc/logstash.d/ 来运行。logstash 会自动读取 /etc/logstash.d/ 目录下所有的文本文件,然后在自己内存里拼接成一个完整的大配置文件,再去执行。

5.3、--configtest 或 -t

  意即测试。用来测试 Logstash 读取到的配置文件语法是否能正常解析。Logstash 配置语法是用 grammar.treetop 定义的。尤其是使用了上一条提到的读取目录方式的读者,尤其要提前测试。

5.4、--log 或 -l

  意即日志。Logstash 默认输出日志到标准错误。生产环境下你可以通过 bin/logstash -l logs/logstash.log 命令来统一存储日志。

5.5、--filterworkers 或 -w

   意即工作线程。Logstash 会运行多个线程。你可以用 bin/logstash -w 5 这样的方式强制 Logstash 为过滤插件运行 5 个线程。

  注意:Logstash目前还不支持输入插件的多线程。而输出插件的多线程需要在配置内部设置,这个命令行参数只是用来设置过滤插件的!

  提示:Logstash 目前不支持对过滤器线程的监测管理。如果 filterworker 挂掉,Logstash 会处于一个无 filter 的僵死状态。这种情况在使用 filter/ruby 自己写代码时非常需要注意,很容易碰上 NoMethodError: undefined method '*' for nil:NilClass 错误。需要妥善处理,提前判断。

5.6、--pluginpath 或 -P

  可以写自己的插件,然后用 bin/logstash --pluginpath /path/to/own/plugins 加载它们。

5.7、--verbose

  输出一定的调试日志。

  小贴士如果你使用的 Logstash 版本低于 1.3.0,你只能用 bin/logstash -v 来代替。

5.8、--debug

  输出更多的调试日志。

  小贴士:如果你使用的 Logstash 版本低于 1.3.0,你只能用 bin/logstash -vv 来代替。

六、参考资料

 

posted @ 2019-08-10 16:35  七步丶  阅读(2069)  评论(0编辑  收藏  举报