接着前面ES的相关内容,本篇介绍下centos7.4使用tar.gz压缩包安装logstash6.5.0方法以及简单使用示例。
一、下载安装logstash
1.1 首先确认下java环境(因为我用的还是之前安装es那台虚拟机,已经配置过jdk了,这里就确认下即可)
1 2 3 4 5 6 |
[root@imzcy ~]# su - es [es@imzcy ~]$ java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) [es@imzcy ~]$ |
1.2 下载logstash
1 |
[es@imzcy ~]$ wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.tar.gz |
1.3 解压软件包
1 2 |
[es@imzcy ~]$ tar zxf logstash-6.5.0.tar.gz [es@imzcy ~]$ mv logstash-6.5.0 logstash |
1.4 查看压缩包下都有哪些文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[es@imzcy ~]$ cd logstash [es@imzcy logstash]$ ll 总用量 844 drwxrwxr-x 2 es es 4096 12月 6 04:32 bin drwxrwxr-x 2 es es 142 12月 6 04:32 config -rw-r--r-- 1 es es 2276 11月 10 03:40 CONTRIBUTORS drwxr-xr-x 2 es es 6 11月 10 03:40 data -rw-r--r-- 1 es es 4056 11月 10 03:43 Gemfile -rw-r--r-- 1 es es 21851 11月 10 03:43 Gemfile.lock drwxrwxr-x 6 es es 84 12月 6 04:32 lib -rw-r--r-- 1 es es 13675 11月 10 03:40 LICENSE.txt drwxrwxr-x 4 es es 90 12月 6 04:32 logstash-core drwxrwxr-x 3 es es 57 12月 6 04:32 logstash-core-plugin-api drwxrwxr-x 4 es es 55 12月 6 04:32 modules -rw-r--r-- 1 es es 808305 11月 10 03:40 NOTICE.TXT drwxrwxr-x 3 es es 30 12月 6 04:32 tools drwxrwxr-x 4 es es 33 12月 6 04:34 vendor drwxrwxr-x 10 es es 205 12月 6 04:35 x-pack [es@imzcy logstash]$ |
bin: 二进制脚本,包括logstash启动Logstash和logstash-plugin安装插件
config: 配置文件,包括logstash.yml和jvm.options。
data: logstash及其插件用于任何持久性需求的数据文件。
conf.d: 存放logstash启动时使用的配置信息。解压后好像没这个目录,等下自己创建一个吧。
二、测试启动logstash
因为logstash本身是用来做日志收集器的,所以我们需要配置指定下从哪个地方获取日志,然后要发送到哪个地方。
2.1 测试通过命令行运行logstash
我们这里测试在命令行直接通过-e选项指定配置。从标准输入获取输入stdin,并stdout以结构化格式将该输入移动到标准输出 。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[es@imzcy ~]$ cd logstash [es@imzcy logstash]$ ./bin/logstash -e 'input { stdin { } } output { stdout {} }' Sending Logstash logs to /home/es/logstash/logs which is now configured via log4j2.properties [2018-12-07T11:56:11,276][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/home/es/logstash/data/queue"} [2018-12-07T11:56:11,337][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/home/es/logstash/data/dead_letter_queue"} [2018-12-07T11:56:13,835][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified [2018-12-07T11:56:13,966][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.0"} [2018-12-07T11:56:14,075][INFO ][logstash.agent ] No persistent UUID file found. Generating new UUID {:uuid=>"62c5ef35-2c84-4d45-8784-bce4f48153b4", :path=>"/home/es/logstash/data/uuid"} [2018-12-07T11:56:26,305][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50} [2018-12-07T11:56:26,909][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x3a6c6e17 run>"} The stdin plugin is now waiting for input: [2018-12-07T11:56:27,121][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} [2018-12-07T11:56:28,322][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600} |
提示启动成功后,会发现终端在等待你输入。我们尝试输入 hello world! 看下会返回什么结果
1 2 3 4 5 6 7 8 |
[2018-12-07T11:56:28,322][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600} hello world! { "@version" => "1", "message" => "hello world!", "@timestamp" => 2018-12-07T03:57:49.183Z, "host" => "imzcy" } |
2.2 通过指定一个配置文件来启动logstash
直接通过命令行启动logstash当然很不方便,特别是当要指定的配置较多的时候。所以我们一般是将配置写在一个单独的配置文件里面,然后使用-f选项指定这个配置文件来启动logstash。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[es@imzcy logstash]$ mkdir conf.d [es@imzcy logstash]$ vi conf.d/test.conf input { stdin {} } output { stdout {} } [es@imzcy logstash]$ [es@imzcy logstash]$ ./bin/logstash -f ./conf.d/test.conf Sending Logstash logs to /home/es/logstash/logs which is now configured via log4j2.properties [2018-12-07T13:19:23,866][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified [2018-12-07T13:19:23,914][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.0"} [2018-12-07T13:19:31,605][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50} [2018-12-07T13:19:32,030][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x254d3691 run>"} The stdin plugin is now waiting for input: [2018-12-07T13:19:32,193][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} [2018-12-07T13:19:32,918][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600} hello logstash! { "@version" => "1", "@timestamp" => 2018-12-07T05:20:20.646Z, "host" => "imzcy", "message" => "hello logstash!" } |
2.3 结束运行logstash直接使用快捷键 Ctrl + D 即可
1 2 |
[2018-12-07T19:16:16,917][INFO ][logstash.pipeline ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x7fc3ccee run>"} [es@imzcy logstash]$ |
三、logstash配置文件logstash.yml常用参数以及可用选项介绍
我们在单实例测试logstash的时候,配置文件logstash.yml基本上不需要做任何调整就可以直接启动logstash来使用,因为一些默认的配置就能满足我们测试需求了。例如:如果我们不在logstash.yml配置文件中定义Logstash实例的名称,则默认实例名称就是当前主机名等。但是有时候可能我们需要自定义某些配置,例如不想让logstash的实例名显示为当前的主机名,而是想单独指定一个名称,就可以在logstash.yml配置文件中找到 node.name: NAME
配置项修改为指定即可。也可以直接在启动logstash的时候命令行中使用 --node.name NAME
选项来定义实例名。在命令行中设置的任何选项都会覆盖logstash.yml中的相应设置,但文件本身不会更改。接下来我们来分别介绍下logstash.yml文件可用参数及相关选项!
3.1 logstash.yml配置文件可用设置处如下表所示
设置项 | 描述 | 默认值 |
---|---|---|
node.name | 节点的描述性名称 | 机器的主机名 |
path.data | Logstash及其插件用于满足任何持久需求的目录。 | LOGSTASH_HOME/data |
pipeline.id | 管道的ID | main |
pipeline.workers | 并行执行管道的过滤器和输出阶段的工作器数量。如果发现事件正在备份,或者CPU未饱和,请考虑增加此数量以更好地利用机器处理能力。 | 主机CPU核心数 |
pipeline.batch.size | 在尝试执行其过滤器和输出之前,单个工作线程将从输入收集的最大事件数。较大的批量通常更有效,但代价是增加了内存开销。您可能需要在jvm.options配置文件中增加JVM堆空间。 | 125 |
pipeline.batch.delay | 创建管道事件批处理时,在将小型批处理分派给管道工作者之前等待每个事件的时间长度(以毫秒为单位)。 | 50 |
pipeline.unsafe_shutdown | 设置true为时,强制Logstash在关闭期间退出,即使内存中仍有飞行事件。默认情况下,Logstash将拒绝退出,直到所有已接收的事件都被推送到输出。启用此选项可能会导致关闭期间数据丢失。 | false |
path.config | 主管道的Logstash配置的路径。如果指定目录或通配符,则按字母顺序从目录中读取配置文件。 | 不同平台不一样 |
config.string | 一个字符串,包含用于主管道的管道配置。使用与配置文件相同的语法。 | 没有 |
config.test_and_exit | 设置为时true,检查配置是否有效,然后退出。请注意,使用此设置不会检查grok模式的正确性。Logstash可以从目录中读取多个配置文件。如果将此设置与之结合使用log.level: debug,Logstash将记录组合的配置文件,使用它来自的源文件注释每个配置块。 | false |
config.reload.automatic | 设置true为时,定期检查配置是否已更改,并在配置发生更改时重新加载配置。这也可以通过SIGHUP信号手动触发。 | false |
config.reload.interval | 几秒钟内Logstash会检查配置文件中的更改。 | 3s |
config.debug | 设置为时true,将完全编译的配置显示为调试日志消息。你还必须设置log.level: debug。警告:日志消息将包含作为纯文本传递给插件配置的任何密码选项,并可能导致明文密码出现在您的日志中! | false |
config.support_escapes | 设置true为时,带引号的字符串将处理以下转义序列:\n成为文字换行符(ASCII 10)。\r成为文字回车(ASCII 13)。\t成为文字标签(ASCII 9)。\\成为一个字面反斜杠\。\"成为字面双引号。\'成为字面引号。 | false |
modules | 配置时,modules必须在此表中描述的嵌套YAML结构中。 | 没有 |
queue.type | 用于事件缓冲的内部排队模型。指定memory遗留的基于内存的排队,或persisted基于磁盘的ACKed排队(持久队列)。 | memory |
path.queue | 启用持久队列时将存储数据文件的目录路径(queue.type: persisted)。 | path.data/queue |
queue.page_capacity | 启用持久队列时使用的页面数据文件的大小(queue.type: persisted)。队列数据由分成页面的仅附加数据文件组成。 | 64M |
queue.max_events | 启用持久队列时队列中未读事件的最大数量(queue.type: persisted)。 | 0(无限制) |
queue.max_bytes | 队列的总容量,以字节数表示。确保磁盘驱动器的容量大于此处指定的值。如果同时指定了两者queue.max_events,queue.max_bytes则Logstash将使用先达到的标准。 | 1024mb(1g) |
queue.checkpoint.acks | 启用持久队列时强制检查点之前的最大ACK响应事件数(queue.type: persisted)。指定queue.checkpoint.acks: 0将此值设置为无限制。 | 1024 |
queue.checkpoint.writes | 启用持久队列时强制检查点之前写入事件的最大数量(queue.type: persisted)。指定queue.checkpoint.writes: 0将此值设置为无限制。 | 1024 |
queue.drain | 启用后,Logstash将等待直到持久队列耗尽,然后才能关闭。 | false |
dead_letter_queue.enable | 用于指示Logstash启用插件支持的DLQ功能的标志。 | false |
dead_letter_queue.max_bytes | 每个死信队列的最大大小。如果条目超出此设置会增加死信队列的大小,则会删除条目。 | 1024mb |
path.dead_letter_queue | 将为死信队列存储数据文件的目录路径。 | path.data/dead_letter_queue |
http.host | 度量标准REST端点的绑定地址。 | "127.0.0.1" |
http.port | 度量标准REST端点的绑定端口。 | 9600 |
log.level | 日志级别。有效选项包括: fatal error warn info debug trace |
info |
log.format | 日志格式。设置为json登录JSON格式,或plain使用Object#.inspect。 | plain |
path.logs | Logstash将其日志写入的目录。 | LOGSTASH_HOME/logs |
path.plugins | 哪里可以找到自定义插件。您可以多次指定此设置以包含多个路径。插件预计将在一个特定的目录层次结构: PATH/logstash/TYPE/NAME.rb其中TYPE是inputs,filters,outputs,或codecs,并且NAME是插件的名称。 | 不同平台不一样 |
3.2 logstash命令行中可用选项如下表所示
选项 | 作用 |
---|---|
--node.name NAME | 指定此Logstash实例的名称。如果没有给出值,则默认为当前主机名。 |
-f --path.config CONFIG_PATH |
从特定文件或目录加载Logstash配置。如果给出了目录,则该目录中的所有文件将按字典顺序连接,然后作为单个配置文件进行解析。不支持多次指定此标志。如果多次指定此标志,则Logstash将使用最后一次出现(例如,-f foo -f bar 与-f bar 效果相同)。
您可以指定通配符(globs),任何匹配的文件将按上述顺序加载。例如,您可以使用通配符功能按名称加载特定文件:bin/logstash --debug -f'/tmp/{one,two,three}' |
-e --config.string CONFIG_STRING |
使用给定的字符串作为配置数据。与配置文件的语法相同。如果未指定任何输入,则以下内容用作默认输入: input { stdin { type => stdin } }如果未指定输出,则以下内容用作默认输出:output { stdout { codec => rubydebug } }。如果您希望同时使用两个默认值,请使用空字符串作为-e标志。默认值为nil |
-t --config.test_and_exit | 检查配置是否有效语法,然后退出。请注意,使用此标志不会检查grok模式的正确性。Logstash可以从目录中读取多个配置文件。如果将此标志组合在一起--log.level=debug,Logstash将记录组合的配置文件,使用它来自的源文件注释每个配置块。 |
--modules | 启动命名模块。与-M为指定模块的默认变量赋值的选项一起使用。如果--modules在命令行中使用,logstash.yml则将忽略任何模块,其中的任何设置都将被忽略。该标志与-f和-e标志互斥。只有一个-f,-e或者--modules可以指定。可以通过用逗号分隔多个模块,或者--modules多次调用该标志来指定多个模块。 |
-M --modules.variable | 为模块的可配置选项指定值。分配变量的格式适用 -M "MODULE_NAME.var.PLUGIN_TYPE.PLUGIN_NAME.KEY_NAME=value"于Logstash变量。对于其他设置,它将是-M "MODULE_NAME.KEY_NAME.SUB_KEYNAME=value"。-M可以根据需要多次使用该标志。如果未-M指定任何选项,则将使用该设置的默认值。该-M标志仅与--modules 标志一起使用。如果没有--modules标志,将被忽略。 |
--pipeline.id ID | 设置管道的ID。默认是main。 |
-w --pipeline.workers COUNT | 设置要运行的管道工程数。此选项设置将并行执行管道的过滤器和输出阶段的工作器数。如果发现事件正在备份,或者CPU未饱和,请考虑增加此数量以更好地利用机器处理能力。默认值是主机CPU核心的数量。 |
-b --pipeline.batch.size SIZE | 管道要使用的批处理大小。此选项定义在尝试执行其过滤器和输出之前,单个工作线程将从输入收集的最大事件数。默认值为125个事件。较大的批量通常更有效,但代价是增加了内存开销。您可能需要在jvm.options配置文件中增加JVM堆空间。有关详细信息,请参阅Logstash配置文件。 |
-u --pipeline.batch.delay DELAY_IN_MS | 创建管道批次时,轮询下一个事件需要等待多长时间。此选项定义在将较小的批处理调度到筛选器和输出之前轮询下一个事件时等待的时间长度(以毫秒为单位)。默认值为50毫秒。 |
--pipeline.unsafe_shutdown | 强制Logstash在关闭期间退出,即使内存中仍有飞行事件。默认情况下,Logstash将拒绝退出,直到所有已接收的事件都被推送到输出。启用此选项可能会导致关闭期间数据丢失。 |
--path.data PATH | 这应该指向一个可写目录。Logstash将在需要存储数据时使用此目录。插件也可以访问此路径。默认值是dataLogstash home 下的目录。 |
-p --path.plugins PATH | 找到自定义插件的路径。可以多次给出该标志以包括多个路径。插件预计将在一个特定的目录层次结构: PATH/logstash/TYPE/NAME.rb其中TYPE是inputs,filters,outputs,或codecs,并且NAME是插件的名称。 |
-l --path.logs PATH | 将Logstash内部日志写入的目录。 |
--log.level LEVEL | 设置Logstash的日志级别。可能的值是: fatal:记录应用程序中止后通常会出现的非常严重的错误消息 error:记录错误 warn:日志警告 info:log verbose info(这是默认值) debug:日志调试信息(面向开发人员) trace:记录除调试信息之外的更细粒度的消息 |
--config.debug | 将完全编译的配置显示为调试日志消息(您还必须已--log.level=debug启用)。警告:日志消息将包含作为纯文本传递给插件配置的任何密码选项,并可能导致明文密码出现在您的日志中! |
-i --interactive SHELL | 下降到shell而不是正常运行。有效的shell是"irb"和"pry"。 |
-r --config.reload.automatic | 监视配置更改并在配置更改时重新加载。注意:使用SIGHUP手动重新加载配置。默认值为false。 |
--config.reload.interval RELOAD_INTERVAL | 轮询配置位置以进行更改的频率。默认值为“3s”。 |
--http.host HTTP_HOST | Web API绑定主机。此选项指定度量标准REST端点的绑定地址。默认值为"127.0.0.1"。 |
--http.port HTTP_PORT | Web API http端口。此选项指定度量标准REST端点的绑定端口。默认值为9600-9700。此设置接受格式9600-9700的范围。Logstash将获取第一个可用端口。 |
--log.format FORMAT | 指定Logstash是否应以JSON格式(每行一个事件)或纯文本(使用Ruby的Object#inspect)编写自己的日志。默认为“plain”。 |
--path.settings SETTINGS_DIR | 设置包含logstash.yml 设置文件的目录以及log4j日志记录配置。这也可以通过LS_SETTINGS_DIR环境变量设置。默认值是configLogstash home 下的目录。 |
-V --version | 发出Logstash及其好友的版本,然后退出。 |
-h --help | 打印帮助 |
参考链接如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
logstash下载地址: https://www.elastic.co/downloads/past-releases logstash相关文档导航页: https://www.elastic.co/guide/en/logstash/current/index.html logstash安装文档: https://www.elastic.co/guide/en/logstash/current/installing-logstash.html logstash.yml配置文件相关设置: https://www.elastic.co/guide/en/logstash/current/logstash-settings-file.html logstash命令行相关选项: https://www.elastic.co/guide/en/logstash/current/running-logstash-command-line.html |