Logstash Elasticsearch 输出插件在 Elasticsearch 中创建单个文档索引

问题描述 投票:0回答:1

我是 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 循环,如下图:

elasticsearch logstash kibana elastic-stack elk
1个回答
0
投票

问题出在 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]}"
© www.soinside.com 2019 - 2024. All rights reserved.