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

如何在Docker Compose中无卷挂载配置LogStash连接ElasticSearch

如何在Docker Compose中通过环境变量传入LogStash配置并转发日志到ElasticSearch

你可以通过以下几种方式实现不挂载配置文件,直接在Docker Compose中传入LogStash配置:

方法1:通过--config.string参数直接传递完整配置

LogStash支持通过命令行参数--config.string直接传入完整的管道配置,无需挂载文件。在Docker Compose的command字段中用多行字符串编写配置即可:

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - xpack.security.enabled=false
    ports:
      - "9200:9200"
    networks:
      - es-logstash-net
    healthcheck:
      test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -q '\"status\":\"green\"'"]
      interval: 10s
      timeout: 10s
      retries: 5

  logstash:
    image: docker.elastic.co/logstash/logstash:8.11.0
    environment:
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
    command: >
      logstash --config.string '
        input {
          # 替换为你的实际输入源,比如file、beats、tcp等
          stdin {}
        }
        filter {
          # 按需添加过滤规则,比如grok解析、mutate字段处理
        }
        output {
          elasticsearch {
            hosts => ["elasticsearch:9200"]
            index => "test-logs-%{+YYYY.MM.dd}"
          }
        }
      '
    depends_on:
      elasticsearch:
        condition: service_healthy
    networks:
      - es-logstash-net

networks:
  es-logstash-net:
    driver: bridge

方法2:结合环境变量拆分配置片段

如果配置较长,可将可变部分提取为环境变量,在配置中用${变量名}引用,提升可维护性:

version: '3.8'
services:
  elasticsearch:
    # 同方法1的ES配置...

  logstash:
    image: docker.elastic.co/logstash/logstash:8.11.0
    environment:
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ES_HOST=elasticsearch:9200
      - LOG_INDEX_PREFIX=test-logs
    command: >
      logstash --config.string '
        input {
          stdin {}
        }
        filter {}
        output {
          elasticsearch {
            hosts => ["${ES_HOST}"]
            index => "${LOG_INDEX_PREFIX}-%{+YYYY.MM.dd}"
          }
        }
      '
    depends_on:
      elasticsearch:
        condition: service_healthy
    networks:
      - es-logstash-net

方法3:使用LOGSTASH_CONF环境变量(部分镜像版本支持)

部分官方LogStash镜像允许通过LOGSTASH_CONF环境变量直接传入配置内容,适合短配置场景:

logstash:
  image: docker.elastic.co/logstash/logstash:8.11.0
  environment:
    - ES_JAVA_OPTS=-Xms512m -Xmx512m
    - LOGSTASH_CONF=input { stdin {} } filter {} output { elasticsearch { hosts => ["elasticsearch:9200"] index => "test-logs-%{+YYYY.MM.dd}" } }
  depends_on:
    elasticsearch:
      condition: service_healthy
  networks:
    - es-logstash-net

关键注意事项

  • 配置中的引号需正确处理:如果用单引号包裹--config.string的内容,内部可直接使用双引号,避免转义混乱。
  • 必须确保LogStash在ElasticSearch就绪后启动:通过healthcheck和service_healthy条件依赖,避免因ES未初始化导致连接失败。
  • 若使用ElasticSearch安全认证(开启xpack.security.enabled=true),需在LogStash配置中添加user和password参数,并通过环境变量传入认证信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:25:19