为 Docker 配置 Logstash
编辑为 Docker 配置 Logstash
编辑Logstash 区分两种类型的配置:设置和管道配置。
管道配置
编辑至关重要的是将您的管道配置放置在 Logstash 可以找到的位置。默认情况下,容器将在 /usr/share/logstash/pipeline/
中查找管道配置文件。
在此示例中,我们使用绑定挂载卷通过 docker run
命令提供配置。
docker run --rm -it -v ~/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:8.17.0
主机目录 ~/pipeline/
中的每个文件都将被 Logstash 解析为管道配置。
如果您不向 Logstash 提供配置,它将使用一个最小配置运行,该配置监听来自 Beats 输入插件的消息,并将接收到的任何消息回显到 stdout
。在这种情况下,启动日志将类似于以下内容
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties. [2016-10-26T05:11:34,992][INFO ][logstash.inputs.beats ] Beats inputs: Starting input listener {:address=>"0.0.0.0:5044"} [2016-10-26T05:11:35,068][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500} [2016-10-26T05:11:35,078][INFO ][org.logstash.beats.Server] Starting server on port: 5044 [2016-10-26T05:11:35,078][INFO ][logstash.pipeline ] Pipeline main started [2016-10-26T05:11:35,105][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
这是镜像的默认配置,在 /usr/share/logstash/pipeline/logstash.conf
中定义。如果您观察到这种行为,请确保您的管道配置被正确拾取,并且您正在替换 logstash.conf
或整个 pipeline
目录。
设置
编辑该镜像提供了几种配置设置的方法。传统方法是提供自定义的 logstash.yml
文件,但也可能使用环境变量来定义设置。
绑定挂载的设置文件
编辑设置文件也可以通过绑定挂载提供。Logstash 希望在 /usr/share/logstash/config/
中找到它们。
可以提供一个包含所有所需文件的完整目录
docker run --rm -it -v ~/settings/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:8.17.0
或者,可以挂载单个文件
docker run --rm -it -v ~/settings/logstash.yml:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:8.17.0
绑定挂载的配置文件将在容器内保留与主机系统上相同的权限和所有权。请确保设置权限,以便这些文件可读,并且理想情况下,容器的 logstash
用户(UID 1000)不可写。
自定义镜像
编辑当然,绑定挂载配置不是唯一的选择。如果您更喜欢不可变基础设施方法,您可以使用如下 Dockerfile
准备一个包含您配置的自定义镜像
FROM docker.elastic.co/logstash/logstash:8.17.0 RUN rm -f /usr/share/logstash/pipeline/logstash.conf COPY pipeline/ /usr/share/logstash/pipeline/ COPY config/ /usr/share/logstash/config/
请务必在您的自定义镜像中替换或删除 logstash.conf
,以便您不会保留基本镜像中的示例配置。
环境变量配置
编辑在 Docker 下,Logstash 设置可以通过环境变量配置。当容器启动时,一个辅助进程会检查环境中可以映射到 Logstash 设置的变量。在容器启动时,在环境中找到的设置将覆盖 logstash.yml
中的设置。
为了与容器编排系统兼容,这些环境变量以全部大写形式书写,并使用下划线作为单词分隔符。
此处显示了一些示例翻译
表 1. 示例 Docker 环境变量
环境变量 |
Logstash 设置 |
|
|
|
|
|
|
一般来说,设置文档中列出的任何设置都可以使用此技术进行配置。
使用环境变量定义设置会导致 logstash.yml
就地修改。如果 logstash.yml
是从主机系统绑定挂载的,则此行为可能是不希望的。因此,不建议将绑定挂载技术与环境变量技术结合使用。最好选择一种方法来定义 Logstash 设置。
Docker 默认值
编辑使用 Docker 镜像时,以下设置具有不同的默认值
|
|
|
|
在 -oss
镜像中未定义设置 monitoring.elasticsearch.hosts
。
这些设置在默认的 logstash.yml
中定义。可以使用自定义的 logstash.yml
或通过环境变量覆盖它们。
如果用自定义版本替换 logstash.yml
,请确保将上述默认值复制到自定义文件中,如果您想保留它们。如果不是,它们将被新文件“屏蔽”。
日志配置
编辑在 Docker 下,Logstash 日志默认输出到标准输出。要更改此行为,请使用上述任何技术替换 /usr/share/logstash/config/log4j2.properties
中的文件。