Docker化Logstash生成超大日志文件,如何从Logstash侧禁用?
解决Logstash 5.5.3在AWS ECS中默认输出日志到stdout的问题
这个问题我碰到过,Logstash 5.x的官方Docker镜像藏了个小坑——默认会加载一个带stdout输出的配置文件,哪怕你自己的配置里没写stdout插件,它也会把所有事件输出到控制台,最终导致容器日志文件暴涨。结合你的情况,给你两个可行的解决方案:
方案1:替换默认配置,让Logstash只加载你的自定义配置
官方镜像的/usr/share/logstash/pipeline目录下默认有个logstash.conf,内容是最简单的stdin输入+stdout输出。只要这个文件存在,Logstash就会自动加载它,和你的自定义配置合并执行,自然就会多出stdout输出。
解决步骤:
- 在你的ECS任务定义里,把你的
logstash.conf直接挂载到/usr/share/logstash/pipeline/logstash.conf,覆盖掉默认的配置文件。这样Logstash启动时就只会加载你写的配置,不会再加载默认的stdout输出。 - 验证:容器启动后,查看Logstash的启动日志,找类似
Loading config file {path=>"/usr/share/logstash/pipeline/logstash.conf"}的条目,确认只加载了你自己的配置。
方案2:修改logstash.yml,指定单个配置文件路径
如果挂载方式受限,没法直接覆盖默认配置,你可以修改logstash.yml里的配置路径,让Logstash只加载你指定的单个文件:
修改你的logstash.yml内容:
http.host: "0.0.0.0" # 把path.config从目录改成你的配置文件绝对路径 path.config: /usr/share/logstash/config/logstash.conf xpack.monitoring.elasticsearch.url: http://elasticsearch:9200 xpack.monitoring.elasticsearch.username: logstash_system xpack.monitoring.elasticsearch.password: changeme xpack.monitoring.enabled: false log.level: error
然后把你的logstash.conf挂载到/usr/share/logstash/config/logstash.conf路径下。这样Logstash就只会加载你指定的这个配置文件,完全忽略默认pipeline目录下的内容。
额外说明
你设置的log.level: error只控制Logstash自身的系统日志(比如启动报错、插件异常),管不住事件的输出——事件输出是由output插件控制的,所以哪怕日志级别设为error,只要有stdout输出插件在运行,事件就会被打印到stdout。
内容的提问来源于stack exchange,提问作者lingxiao
相关产品推荐
相关产品推荐

