如何在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
相关产品推荐
相关产品推荐

