为 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.14.3

主机目录 ~/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.14.3

或者,可以挂载单个文件

docker run --rm -it -v ~/settings/logstash.yml:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:8.14.3

绑定挂载的配置文件将在容器内保留它们在主机系统上的相同权限和所有权。请确保设置权限,以便容器的 logstash 用户(UID 1000)可以读取这些文件,并且理想情况下不能写入这些文件。

自定义镜像编辑

绑定挂载配置自然不是唯一的选择。如果您更喜欢 *不可变基础设施* 方法,则可以使用像这样的 Dockerfile 来准备包含配置的自定义镜像

FROM docker.elastic.co/logstash/logstash:8.14.3
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 设置

PIPELINE_WORKERS

pipeline.workers

LOG_LEVEL

log.level

MONITORING_ENABLED

monitoring.enabled

通常,设置文档 中列出的任何设置都可以使用此技术进行配置。

使用环境变量定义设置会导致 logstash.yml 被修改到位。如果 logstash.yml 是从主机系统绑定挂载的,则此行为可能是不受欢迎的。因此,不建议将绑定挂载技术与环境变量技术结合使用。最好选择一种方法来定义 Logstash 设置。

Docker 默认值编辑

使用 Docker 镜像时,以下设置具有不同的默认值

http.host

0.0.0.0

monitoring.elasticsearch.hosts

http://elasticsearch:9200

-oss 镜像中未定义设置 monitoring.elasticsearch.hosts

这些设置在默认的 logstash.yml 中定义。可以使用 自定义 logstash.yml 或通过 环境变量 覆盖它们。

如果用自定义版本替换 logstash.yml,请确保将上述默认值复制到自定义文件中(如果要保留它们)。否则,它们将被新文件“屏蔽”。

日志记录配置编辑

在 Docker 下,Logstash 日志默认输出到标准输出。要更改此行为,请使用上述任何一种技术替换 /usr/share/logstash/config/log4j2.properties 中的文件。