一、简介
Logstash 是一个功能强大的工具,可与各种部署集成。 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据。 如果你的数据需要 Beats中 没有的其他处理,则需要将 Logstash 添加到部署中。
Logstash 是 Elastic 栈非常重要的一部分,但是它不仅仅为 Elasticsearch 所使用。它可以接受广泛的各种数据源。Logstash 可以帮利用它自己的 Filter 帮我们对数据进行解析,丰富,转换等。
最后,它可以把自己的数据输出到各种需要的数据储存地,这其中包括 Elasticsearch。
二、安装 Logstash
注意:在这里,我们以安装版本7.3为例。如果你想安装其它的版本,请把下面的数字改为相应的版本信息进行下载及安装。 我们必须安装和 Elasticsearch 版本一致的 Logstash。除了下面的命令之外,我们也可以在地址 Download Logstash Free | Get Started Now | Elastic 直接下载安装。在下面我们使用 7.3.0 版本为例来进行安装。如果你想安装其它的版本,直接在命令行中替换命令行中的 7.3.0 为你想要的版本号码。
deb:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.deb
sudo dpkg -i logstash-7.3.0.deb
rpm:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.rpm
sudo rpm -i logstash-7.3.0.rpm
mac and linux:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz
tar -xzvf logstash-7.3.0.tar.gz
Logstash 管道有两个必需元素,输入和输出,以及一个可选元素 filter。 输入插件使用来自源的数据,过滤器插件在你指定时修改数据,输出插件将数据写入目标。
要测试 Logstash 安装,请运行最基本的 Logstash 管道。 例如:
cd logstash-7.3.0
bin/logstash -e 'input { stdin { } } output { stdout {} }'
等 Logstash 完成启动后,我们在 stdin 里输入一下文字,我们可以看到如下的输出:
也可以创建一个自己的 logstash.conf 文件,并存于你的文件系统的一个目录下。这个 logstash.conf 的文件内容如下:
logstash.conf
input {
stdin{ }
}
output {
stdout {
codec => rubydebug
}
}
可以使用如下的命令来运行 logstash:
./bin/logstash -f path_to_logstash_conf_file
通过这样的 -f 选项,可以启动任何一个我们喜欢路径的 longstash 配置文件。这个文件可能并不存在于当前的 Logstash 的安装目录中。以后 Logstash 整个安装目录被删除,那么配置文件也将在这里。
也可以通过如下的配置文件,把我们在 terminal 上输入的信息输出到一个文件中:
input {
stdin{}
}
output {
file {
path => "path_to_log_file/output.log"
}
}
比如,创建一个如下的 heartbeat.conf 文件:
heartbeat.conf
input {
heartbeat {
interval => 10
type => "heartbeat"
}
}
output {
stdout {
codec => rubydebug
}
}
可以使用如下的命令来运行:
./bin/logstash -f heartbeat.conf
可以看到如下的输出:
{
"@version" => "1",
"@timestamp" => 2020-05-04T23:10:15.893Z,
"type" => "heartbeat",
"host" => "liuxg",
"message" => "ok"
}
{
"@version" => "1",
"@timestamp" => 2020-05-04T23:10:25.885Z,
"type" => "heartbeat",
"host" => "liuxg",
"message" => "ok"
}
存在的配置文件:
ogstash.yml 配置Logstash的yml。
pipelines.yml 包含在单个Logstash实例中运行多个管道的框架和说明。
jvm.options 配置Logstash的JVM,使用此文件设置总堆空间的初始值和最大值,此文件中的所有其他设置都被视为专家设置。
log4j2.properties 包含log4j 2库的默认设置。
三、logstash.yml 配置详解
Logstash配置选项可以控制Logstash的执行。如:指定管道设置、配置文件位置、日志记录选项等。运行Logstash时,大多数配置可以命令行中指定,并覆盖文件的相关配置。
node.name
默认值:计算机的主机名
节点的名称。path.data
默认值:计算机的主机名
Logstash及其插件用于任何持久需求的目录。pipeline.id
默认值:main
管道的ID。pipeline.workers
默认值:主机cpu数
设置output或filter插件的工作线程数。pipeline.batch.size
默认值:125
单个工作线程从输入收集的最大事件数。pipeline.batch.delay
默认值:50
创建管道事件批处理时,在将较小的批处理发送给管道工作人员之前,等待每个事件的时间(毫秒)。pipeline.unsafe_shutdown
默认值:false
logstash在关闭时,默认会等到所有被处理的event都通过output输出后再执行关闭操作;如果设置为true,则允许强制关闭,而不必等待event处理完毕,此时可能会丢失数据。pipeline.plugin_classloaders
默认值:false
在独立的类加载器中加载Java插件以隔离它们的依赖项。
ipeline.ordered
auto
设置管道事件顺序。有效选项包括:
auto-如果是管道,则自动启用排序。workers设置为1,否则禁用。
true-在管道上强制排序,如果有多个工作线程则阻止Logstash启动。
false-禁用保持顺序所需的处理。pipeline.ecs_compatibility
disabled
为ecs_compatibility设置管道的默认值,该设置可用于实现ecs兼容模式的插件,以便与Elastic Common Schema一起使用。path.config
LOGSTASH_HOME/config
Logstash的配置路径。config.string
N/A
用于主管道的管道配置的字符串。config.test_and_exit
false
设置为true时,检查配置是否有效,然后退出。请注意,使用此设置不会检查grok模式的正确性。Logstash可以从一个目录中读取多个配置文件。如果将此设置与日志相结合。level:debug,Logstash将记录组合的配置文件,并用源文件注释每个配置块。config.reload.automatic
false
当设置为true时,定期检查配置是否已更改,并在更改时重新加载配置。这也可以通过SIGHUP信号手动触发。config.reload.interval
3s
Logstash检查配置文件更改的频率(以秒为单位)。请注意,单元限定符是必需的。config.debug
false
设置为true时,将完全编译的配置显示为调试日志消息。还必须设置日志。级别:调试。警告:日志消息将包括以明文形式传递给插件配置的任何密码选项,并可能导致明文密码出现在日志中!config.support_escapes
false
当设置为true时,带引号的字符串将处理以下转义序列:\n成为文字换行符(ASCII 10)。\r变成文字回车符(ASCII 13)。\t变为文字选项卡(ASCII 9)。\变成文字反斜杠\“变为文字双引号。'变为文字引号。queue.type
memory
用于事件缓冲的内部队列模型。可选项:memory -内存,persisted-持久化。path.queue
path.data/queue
启用持久队列时存储数据文件的目录路径(queue.type:persisted)。queue.page_capacity
64mb
启用持久队列时使用的页面数据文件的大小(queue.type:persisted)。队列数据由仅追加数据文件组成,这些文件被分隔成页面。queue.max_events
0 (unlimited)
启用持久队列时队列中未读事件的最大数量(queue.type:persisted)。queue.max_bytes
1024mb (1g)
队列的总容(queue.type:persisted)(字节数)。queue.checkpoint.acks
1024
启用持久队列时,强制检查点之前确认的最大事件数(queue.type:persisted)。指定queue.checkpoint。acks:0将此值设置为无限制。queue.checkpoint.writes
1024
启用持久队列时,在强制检查点之前写入的最大事件数(queue.type:persisted)。指定queue.checkpoint。写入:0以将此值设置为无限制。queue.checkpoint.retry
true
启用后,对于任何失败的检查点写入,Logstash将在每次尝试检查点写入时重试四次。不会重试任何后续错误。对于只有在Windows平台、具有非标准行为(如SAN)的文件系统上才能看到的失败的检查点写入,这是一种解决方法,除非在这些特定情况下,否则不建议使用。(queue.type:持久化)queue.drain
false
启用后,Logstash会等待持久队列(queue.type:persisted)清空后再关闭。dead_letter_queue.enable
false
指示Logstash启用插件支持的DLQ功能的标志。dead_letter_queue.max_bytes
1024mb
每个死信队列的最大大小。如果条目会将死信队列的大小增加到超过此设置,则会删除这些条目。dead_letter_queue.storage_policy
drop_newer
定义在执行dead_letter_queue时要执行的操作。达到maxbytes设置:dropnewer停止接受会使文件大小超过限制的新值,dropolder删除最旧的事件,为新事件腾出空间。path.dead_letter_queue
path.data/dead_letter_queue
为死信队列存储数据文件的目录路径。api.enabled
true
默认情况下启用HTTP API。它可以被禁用,但依赖它的功能将无法按预期工作。api.environment
production
API返回所提供的字符串作为其响应的一部分。设置环境可能有助于消除生产环境和测试环境中名称相似的节点之间的歧义。api.http.host
"127.0.0.1"
HTTP API端点的绑定地址。默认情况下,Logstash HTTP API仅绑定到本地环回接口。安全配置后(api.ssl.enabled:true和api.auth.type:basic),HTTP api绑定到所有可用接口。api.http.port
9600-9700
HTTP API端点的绑定端口。api.ssl.enabled
false
设置为true可在HTTP API上启用SSL。这样做需要同时使用api.ssl.keystore。路径和api.ssl.keystore。要设置的密码。api.ssl.keystore.path
N/A
用于保护Logstash API的有效JKS或PKCS12密钥库的路径。密钥库必须受密码保护,并且必须包含单个证书链和私钥。除非api.ssl,否则将忽略此设置。enabled设置为true。api.ssl.keystore.password
N/A
api.ssl.keystore.path提供的密钥库密码。除非api.ssl,否则将忽略此设置。enabled设置为true。api.auth.type
none
设置为basic以要求使用随API.auth.basic.username和API.auth.basic.password提供的凭据在API上进行HTTP basic身份验证。api.auth.basic.username
N/A
HTTP Basic身份验证所需的用户名已忽略,除非是api.auth。type设置为basic。api.auth.basic.password
N/A
HTTP Basic身份验证所需的密码。除非api.auth,否则忽略。type设置为basic。它应该符合默认密码策略,该策略要求非空的最少8个字符字符串,包括数字、大写字母和小写字母。可以通过以下选项自定义默认密码策略:
设置api.auth.basic.password_policy.include。digit REQUIRED(默认)只接受包含至少一个数字的密码,或OPTIONAL(可选)从要求中排除。
设置api.auth.basic.password_policy.include。upper REQUIRED(默认)只接受包含至少一个大写字母的密码,或OPTIONAL(可选)从要求中排除。
设置api.auth.basic.password_policy.include。较低的REQUIRED(默认)只接受包含至少一个小写字母的密码,或OPTIONAL(可选)不接受要求。
设置api.auth.basic.password_policy.include。symbol REQUIRED只接受包含至少一个特殊字符的密码,或OPTIONAL(默认)不接受要求。
设置api.auth.basic.password_policy.length。如果希望密码的默认设置超过8个字符,则最小值为9到1024。api.auth.basic.password_policy.mode
WARN
当不满足密码要求时,引发WARN或ERROR消息。log.level
info
日志级别。有效选项包括:
fatal
error
warn
info
debug
tracelog.format
plain
日志格式。设置为json以json格式登录,或设置为plain以使用Object#.inspect。path.logs
LOGSTASH_HOME/logs
Logstash将其日志写入的目录。pipeline.separate_logs
false 这是一个布尔设置,用于在不同的日志文件中按管道分隔日志。如果启用,Logstash将使用管道为每个管道创建不同的日志文件。id作为文件名。目标目录取自`path。日志设置。当Logstash中配置了许多管道时,如果您需要对单个管道中发生的情况进行故障排除,而不受其他管道的干扰,那么将每个管道中的日志行分开可能会很有帮助。path.plugins
插件路径。allow_superuser
true
设置为true允许或false阻止以超级用户身份运行Logstash。
评论