如何在Docker Compose中正确配置Elastic Docker Agent采集容器日志?
解决Elastic Docker Agent无法采集容器日志的问题
问题分析
从Elastic Agent的日志可明确两个核心问题:
- Docker Socket权限不足:Agent容器无法访问宿主机的
/var/run/docker.sock,导致无法获取Docker容器日志数据。 - Agent配置缺失采集规则:当前配置仅定义了输出到Elasticsearch的规则,未配置任何日志采集输入源,即便权限问题解决,也不会主动采集容器日志。
解决步骤
1. 修复Docker Socket访问权限
修改docker-compose.yml中的elastic-agent服务配置,挂载宿主机Docker Socket并赋予足够权限:
elastic-agent: image: docker.elastic.co/beats/elastic-agent:7.16.3 container_name: elastic-agent volumes: - ./elastic-agent.yml:/usr/share/elastic-agent/elastic-agent.yml - /var/run/docker.sock:/var/run/docker.sock # 挂载宿主机Docker Socket environment: - ELASTICSEARCH_HOST=elasticsearch - ELASTICSEARCH_PORT=9200 user: root # 使用root用户运行,确保有权限访问socket restart: always networks: - elastic-stack
注:若不想用root用户,可指定Docker组的GID(通常为999),替换
user: root为group: "999",可通过getent group docker命令查看宿主机Docker组GID。
2. 完善Elastic Agent采集配置
更新elastic-agent.yml,添加Docker日志采集的输入规则:
inputs: - type: docker containers.ids: - "*" # 采集所有容器的日志 containers.exclude: - "elastic-agent" # 排除自身容器,避免日志循环采集 outputs: elasticsearch: type: elasticsearch hosts: ["http://elasticsearch:9200"] index: "elastic-agent-logs-%{+yyyy.MM.dd}"
3. 重启服务生效
执行以下命令重启所有服务:
docker-compose down docker-compose up -d
验证结果
- 查看Elastic Agent日志,确认不再出现Docker Socket权限错误:
docker logs elastic-agent
- 访问Kibana(
http://localhost:5601),创建索引模式elastic-agent-logs-*,即可在"发现"页面查看采集到的容器日志。
内容的提问来源于stack exchange,提问作者Angel Hadzhiev
相关产品推荐
相关产品推荐

