我是 ELK 新手,我的 LOGSTASH 7.8.x 无限循环并在 Elasticsearch 中仅插入一行! 这是我的示例:
样本日志
2021-07-18 09:15:30,000 INFO Sample log message 01
2022-07-18 10:20:45,111 ERROR Sample log message 02
2023-07-18 11:20:45,222 DEBUG Sample log message 03
2024-07-18 12:20:45,333 WARN Sample log message 04
conf 文件
input {
file {
path => "/home/sample.log"
start_position => "beginning"
sincedb_path => "/dev/null"
close_older=> "1 second"
}
}
filter {
grok {
match => { "resource" => "%{TIMESTAMP_ISO8601:log_timestamp} %{LOGLEVEL:log_level} %{GREEDYDATA:log_message}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "sample_logs"
document_id => "%{my_doc_for_logs}"
document_type => "_doc"
codec => "json"
}
stdout { codec => rubydebug }
}
通过运行logstash,如下所示:
bin/logstash -f /etc/logstash/conf.d/sshd.conf --log.level debug
1- Elasticsearch 索引中仅插入一行:sample_logs 2-我必须单击 CTRL + C 才能无限期地停止 Logstash 循环,如下图:
检查 Elasticsearch 数据:仅插入 1 行而不是 4 行!
curl -XGET "http://localhost:9200/sample_logs/_search?size=1000" | jq .
1-elasticsearch 索引中仅插入一行:sample_logs 2-我必须单击 CTRL + C 才能无限期地停止 Logstash 循环,如下图:
问题出在 document_id 上。
document_id => "%{my_doc_for_logs}"
在您的情况下,Elasticsearch 会使用同一个 id 索引所有文档。
尝试删除它,elasticsearch 将使用自动生成的 id 进行索引。
如果你想给它赋值,你可以使用这个模式。
示例:
mutate { add_field => { "[@metadata][id]" => "%{[host][name]}_%{some_field}" } }
document_id => "%{[@metadata][id]}"