ELK报错及Logstash无法创建Elasticsearch索引问题求助
一、解决"One or more required cgroup files or directories not found: /proc/self/cgroup"报错
这个警告是因为Logstash默认会尝试读取Linux系统特有的cgroup文件来收集监控数据,但Windows系统没有/proc目录结构,所以触发了这个提示。你可以通过以下方式禁用cgroup检测:
- 打开Logstash安装目录下的
config/jvm.options文件,添加一行配置:-Dlogstash.cgroups.enabled=false - 或者修改
config/logstash.yml文件,添加:cgroups.enabled: false
修改后重启Logstash,这个警告就会消失了。
二、排查Logstash启动成功但未创建Elasticsearch索引的问题
结合你的配置文件,我整理了几个关键排查点:
1. 修复Windows路径格式问题
你的input路径用了单反斜杠\,在Logstash配置里,Windows路径需要用正斜杠/或者双反斜杠\\,否则会被识别为转义字符导致路径无效。修改后的input配置应该是:
input { file { path => "C:/workspace/app/logback/applogs.log" # 正斜杠格式 # 或者 path => "C:\\workspace\\app\\logback\\applogs.log" 双反斜杠格式 codec => "json" type => "logback" start_position => "beginning" # 可选:如果要读取已有日志,添加这一行 } }
2. 确认日志文件有新内容(或强制读取历史内容)
Logstash的file插件默认从文件末尾开始读取日志,如果你的applogs.log没有新的日志写入,它不会主动读取已存在的内容。如果需要读取历史日志,一定要加上start_position => "beginning"配置,同时注意:如果Logstash已经记录过这个文件的读取位置(存储在data/plugins/inputs/file/.sincedb_*文件中),需要删除对应的sincedb文件,否则它会从上次记录的位置继续读取。
3. 验证JSON codec是否匹配日志格式
你配置了codec => "json",这要求你的Spring Boot日志必须是标准JSON格式(比如用Logback的net.logstash.logback.encoder.LogstashEncoder生成的日志)。如果日志是普通文本格式,JSON codec解析会失败,日志会被丢弃。你可以临时把codec改成line测试,看是否能正常创建索引:
codec => "line"
4. 检查Logstash与Elasticsearch的连接
- 确认Elasticsearch服务正常运行:访问
http://localhost:9200,能返回JSON响应说明ES正常。 - 如果Elasticsearch开启了安全验证(比如用户名密码),需要在output配置中添加认证信息:
elasticsearch { hosts => [ "localhost:9200" ] index => "logback-test" user => "elastic" password => "your-password" }
5. 查看Logstash的运行日志
打开Logstash安装目录下的logs/logstash-plain.log,搜索关键词error或warn,看看有没有具体的报错信息(比如路径不存在、ES连接失败、JSON解析错误等),这些日志是排查问题最直接的依据。
内容的提问来源于stack exchange,提问作者aizaz

