You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logstash管道执行完毕后关闭对应的Docker容器?

实现Logstash Docker容器处理完管道后自动关闭

要让Logstash处理完两个管道的任务后自动退出容器,核心是把Logstash从持续运行模式改成一次性批处理模式,具体步骤如下:

1. 调整两个管道的输入配置,让它们处理完数据后停止

MySQL查询管道(JDBC输入)

JDBC输入默认会按调度重复查询,要改成只执行一次并停止:

input {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://your-mysql-host:3306/your_db"
    jdbc_user => "db_user"
    jdbc_password => "db_pass"
    jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.30.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    # 设置一个永远不会重复的调度(仅执行一次)
    schedule => "0 0 0 0 0 ?"
    # 启用分页查询(适配大数据量场景)
    jdbc_paging_enabled => true
    statement => "SELECT * FROM your_target_table"
    # 查询完成后立即关闭数据库连接
    close_connections => true
  }
}

日志文件管道(File输入)

File输入默认会持续监听文件变化,要改成读完指定文件后停止:

input {
  file {
    path => "/path/to/your/logs/app.log"
    # 从文件开头开始读取
    start_position => "beginning"
    # 禁用sincedb(避免记录读取位置,确保每次读完整文件)
    sincedb_path => "/dev/null"
    # 文件读完后立即关闭输入,不再等待新内容
    close_older => 0
    ignore_older => 0
    # 缩短检查间隔,加快检测文件是否读完的速度
    stat_interval => 1
    discover_interval => 1
  }
}

2. 配置Logstash全局参数,确保所有管道完成后退出

在logstash.yml中添加以下配置,让Logstash在所有输入都关闭后自动退出:

# 启用Java执行引擎(提升性能,可选但推荐)
pipeline.java_execution: true
# 所有输入关闭后,等待指定时间(确保剩余事件处理完成)再退出
shutdown_timeout: 30

也可以在启动容器时通过环境变量传递这些参数,无需修改配置文件:

-e "LS_OPTS=--shutdown_timeout 30 --pipeline.java_execution true"

3. 启动Docker容器的正确命令

使用--rm参数,让容器在Logstash进程退出后自动删除,同时挂载你的配置目录和管道目录:

docker run --rm \
  -v /host/path/to/logstash/config:/usr/share/logstash/config \
  -v /host/path/to/logstash/pipeline:/usr/share/logstash/pipeline \
  docker.elastic.co/logstash/logstash:8.11.3

4. 工作逻辑说明

  • MySQL管道:执行一次查询,处理完所有返回的数据后关闭JDBC输入
  • 日志文件管道:读完指定日志文件的全部内容后关闭File输入
  • 当两个输入都关闭后,Logstash等待shutdown_timeout秒(确保所有在处理中的事件都写入Elasticsearch),然后进程退出,Docker容器随之停止并被删除(因为使用了--rm参数)

内容的提问来源于stack exchange,提问作者barteloma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:20:24