Kibana 导入所有数据后自动停止Logstash进程

lvjbypge  于 2023-09-28  发布在  Kibana
关注(0)|答案(1)|浏览(165)

情况:

  • 我每天下午12点通过Logstash手动将数据导入Elasticsearch。
  • 我理解Logstash上没有“关闭”,因为理想情况下,您希望不断向服务器发送数据。
  • 我使用elk-docker作为我的ELK堆栈。
  • 我写了一个shell脚本,它向docker容器发送一个命令来执行以下命令:
  • dailyImport.sh*
docker exec -it $DOCKER_CONTAINER_NAME opt/logstash/bin/logstash --path.data /tmp/logstash/data -e \
'input {
    file {
        path => "'$OUTPUT_PATH'"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        mode => "read"
        file_completed_action => "delete"
    }
}
filter {
    csv {
        separator => ","
        columns => ["foo", "bar", "foo2", "bar2"]
    }

}

output {
    elasticsearch{
        hosts => "localhost:9200"
        index => "foo"
        document_type => "foo"
    }
    stdout {}
}'

我所尝试和理解的:

  • 我读到添加read模式和file_completed_action删除将停止操作,我试过了,但它没有工作。
  • 我仍然需要手动发送Ctrl + C来停止管道。例如:
^C[2019-02-21T15:49:07,787][WARN ][logstash.runner          ] SIGINT received. Shutting down.
[2019-02-21T15:49:07,899][INFO ][filewatch.observingread  ] QUIT - closing all files and shutting down.
[2019-02-21T15:49:09,764][INFO ][logstash.pipeline        ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x6bdb92ea run>"}
Done

我读到我可以做以下事情,但不知道如何做:

  • 监视sincedb文件以检查Logstash何时达到EOF,然后终止Logstash。
  • 请改用stdin输入。当stdin被关闭并且所有的输入都被处理完后,Logstash会自动关闭。另一方面,Logstash会因为任何你不知道它处理了多少的原因而死亡。

参考:https://discuss.elastic.co/t/stop-logstash-after-processing-the-file/84959

我想要的:

  • 我不需要一个花哨的进度条来告诉我已经导入了多少数据(针对输入文件)。
  • 我只想在“it's done”的时候结束操作,并且在到达EOF或者“finished importing”的时候发送一个Ctrl + C
s3fp2yjn

s3fp2yjn1#

对于文件输入,在读取模式下,有一种方法可以在阅读所有文件时退出该过程,只需设置:
input { file { exit_after_read => true } }
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html#plugins-inputs-file-exit_after_read

相关问题