前言
logstach是一个采集日志的框架,本文介绍如何在docker上部署logstash系统。更多信息请参考官方文档。
管道配置
必须将管道配置放在Logstash可以找到的位置。默认情况下,容器将在/usr/share/logstash/pipeline/中查找管道配置文件。
在本例中,我们使用绑定装载的卷通过docker run命令提供配置:
docker run --rm -it -v ~/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:7.9.2
然后,Logstash将解析主机目录~/pipeline/中的每个文件作为管道配置。
如果您不为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。但是也可以使用环境变量来定义设置。
绑定装载设置文件
设置文件也可以通过绑定挂载提供。Logstash希望在/usr/share/logstash/config/
上找到它们。
有可能提供一个完整的目录,包含所有需要的文件:
docker run --rm -it -v ~/settings/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:7.9.2
或者,可以挂载单个文件:
docker run --rm -it -v ~/settings/logstash.yml:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:7.9.2
绑定装载的配置文件将在容器中保留与它们在主机系统上相同的权限和所有权。确保设置权限,使文件具有可读性,理想情况下,容器的logstash用户(UID 1000)不可写。
自定义镜像
当然,绑定装载的配置并不是唯一的选择。如果你喜欢不可变的基础设施的方法,你可以准备一个自定义镜像包含你的配置使用Dockerfile像这样:
FROM docker.elastic.co/logstash/logstash:7.9.2
RUN rm -f /usr/share/logstash/pipeline/logstash.conf
ADD pipeline/ /usr/share/logstash/pipeline/
ADD config/ /usr/share/logstash/config/
一定要替换或删除自定义映像中的logstash.conf,这样就不会从基本映像保留示例配置。
环境变量配置
在Docker下,可以通过环境变量配置Logstash设置。当容器启动时,一个助手进程检查环境中可以映射到Logstash设置的变量。在环境中找到的设置将合并到logstash中。作为容器启动。
为了与容器编排系统兼容,这些环境变量都以大写字母书写,并以下划线作为分隔符
下面是一些翻译示例:
表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 |
设置monitoring.elasticsearch.hosts未在-oss镜像中定义。
这些设置在默认的logstash.yml中定义。可以使用自定义logstash.yml或通过环境变量覆盖它们。
如果用自定义版本替换
logstash.yml
,请确保将上述默认值复制到自定义文件中,如果您想保留它们的话。如果没有,它们将被新文件“屏蔽”。
日志配置
在Docker下,Logstash日志默认为标准输出。要改变这种行为,请使用上面的任何技术替换/usr/share/logstash/config/log4j2.properties
上的文件。