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

Docker部署ELK:Logstash未同步日志至ElasticSearch问题排查

问题排查与解决步骤

1. 检查文件挂载与权限

  • 确认主机./logstash/logs/my-service.log文件存在,进入Logstash容器验证挂载路径是否生效:
    docker exec -it <logstash-container-id> ls -l /usr/share/logstash/logs/
    
    若容器内看不到目标文件,检查Docker Compose的卷配置:确保主机相对路径基于compose文件所在目录,或改用绝对路径。
  • 检查文件权限:Logstash容器默认以logstash用户(UID 1000)运行,给主机日志文件添加其他用户读权限:
    chmod o+r ./logstash/logs/my-service.log
    
    若主机未启用SELinux,可去掉挂载参数中的:Z,避免上下文匹配问题。

2. 验证Logstash配置语法

  • 进入容器测试配置文件合法性,语法错误会直接提示:
    docker exec -it <logstash-container-id> logstash -f /usr/share/logstash/config/logstash.conf --config.test_and_exit
    

3. 调整File插件的读取起始位置

  • File插件默认从文件末尾读取,若my-service.log是旧文件且无新日志写入,Logstash不会主动读取历史内容。修改配置添加:
    input {
      file {
        path => "/usr/share/logstash/logs/my-service.log"
        start_position => "beginning" # 从文件开头读取
        sincedb_path => "/dev/null" # 测试用:禁用读取位置记录,每次启动从头读(生产环境慎用)
      }
    }
    

4. 确认ElasticSearch连接与索引配置

  • 检查logstash.conf的输出插件,确保ES地址正确(Docker Compose内部用服务名访问),同时确认索引名拼写无误:
    output {
      elasticsearch {
        hosts => ["elasticsearch:9200"] # 对应compose中ES服务的名称
        index => "firs-log"
      }
      stdout { codec => rubydebug } # 临时添加,方便在容器日志查看是否有事件输出
    }
    
    若stdout有输出但ES无索引,检查ES是否禁用了自动创建索引:手动创建索引测试:
    curl -X PUT "http://localhost:9200/firs-log"
    

5. 查看Logstash详细日志

  • 调整Logstash日志级别到DEBUG,修改logstash.yml:
    log.level: debug
    
    重启容器后查看日志,重点关注File插件的读取记录、ES请求的响应状态。

完整可运行配置示例

logstash.conf

input {
  file {
    path => "/usr/share/logstash/logs/my-service.log"
    start_position => "beginning"
    codec => "json" # 若Spring Boot日志为JSON格式,否则改用"plain"
  }
}

filter {
  # 针对Spring Boot JSON日志的解析(可选)
  if [message] =~ /^\{/ {
    json {
      source => "message"
    }
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "firs-log-%{+YYYY.MM.dd}" # 按天拆分索引,更适合生产环境
  }
  stdout { codec => rubydebug }
}

docker-compose.yml中Logstash卷配置片段

services:
  logstash:
    image: docker.elastic.co/logstash/logstash:8.11.3
    volumes:
      - ./logstash/config/logstash.conf:/usr/share/logstash/config/logstash.conf:ro
      - ./logstash/logs:/usr/share/logstash/logs:ro
    depends_on:
      - elasticsearch

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:31