配置Elasticsearch查询日志记录遇阻:未生成预期logstash索引
问题排查与解决思路
首先,我注意到你配置里有几个关键问题,咱们一步步来梳理解决:
1. Packetbeat 配置指向错误
你提到把 Packetbeat 的 Logstash 主机设置成了 http://localhost:9200,这明显不对。Logstash 里的 beats input 监听的是 5044 端口,而且 Packetbeat 需要把捕获到的数据包发送给 Logstash,不是直接发给 Elasticsearch。你需要修改 packetbeat.yml 里的输出配置:
output.logstash: hosts: ["localhost:5044"]
调整后 Packetbeat 才能把 9200 端口的流量正确传递给 Logstash。
2. Logstash 输出未指定预期索引格式
你的 Logstash output 部分没有显式指定索引名称格式,默认情况下不一定会生成 logstash-YYYY.MM.DD 这类索引。可以修改 output 配置,明确指定索引规则:
output { if "search" in [request] and "ignore_unmapped" not in [query_body] { elasticsearch { hosts => "http://localhost:9200" index => "logstash-%{+YYYY.MM.dd}" # 显式定义你需要的索引格式 } } }
这样就能确保生成和教程里一致的日期格式索引。
3. 验证数据是否被过滤规则拦截
你的 filter 和 output 都有条件判断,数据可能因为不满足条件被过滤掉:
- 确认 Packetbeat 捕获的
request字段里确实包含 "search" 关键词 - 确认查询的
query_body里没有 "ignore_unmapped" 字符串
你可以临时给 Logstash 加一个 stdout 输出,直接查看数据详情,判断字段是否匹配:
output { stdout { codec => rubydebug } # 临时添加,在控制台查看数据内容 if "search" in [request] and "ignore_unmapped" not in [query_body] { elasticsearch { hosts => "http://localhost:9200" index => "logstash-%{+YYYY.MM.dd}" } } }
启动 Logstash 后,观察控制台输出,确认 request、query_body、index 这些字段是否被正确提取,条件是否满足。
4. 日志排查辅助定位
- 查看 Packetbeat 日志,确认它是否成功连接到 Logstash,有没有发送数据的记录
- 查看 Logstash 日志,排查是否有 grok 匹配失败、ES 连接错误等异常
- 登录 Elasticsearch,执行
GET /_cat/indices?v命令查看所有索引,说不定数据已经存入,但索引名称不符合预期
按照这些步骤调整和验证,应该就能解决索引不生成的问题了。
内容的提问来源于stack exchange,提问作者Anca Ioana
相关产品推荐
相关产品推荐

