Logstash 日志存储解析进度条

Logstash 日志存储解析进度条,logstash,Logstash,我是Logstash的新手,我正在使用它解析特定目录中500MB的日志文件,目前当我启动Logstash时,它没有显示任何进度条,显示它已完成解析日志文件的百分比。是否有任何方法可以查看日志解析完成的进度?否,Logstash没有内置的进度条功能。大多数情况下,这没有任何意义,因为Logstash旨在连续处理不断增长的日志,而实际上没有任何“完成” 您可以将sincedb文件的内容与相应文件的文件大小关联起来。sincedb文件是Logstash在文件中存储当前偏移量的位置。文件格式的确切描述见

我是Logstash的新手,我正在使用它解析特定目录中500MB的日志文件,目前当我启动Logstash时,它没有显示任何进度条,显示它已完成解析日志文件的百分比。是否有任何方法可以查看日志解析完成的进度?

否,Logstash没有内置的进度条功能。大多数情况下,这没有任何意义,因为Logstash旨在连续处理不断增长的日志,而实际上没有任何“完成”

您可以将sincedb文件的内容与相应文件的文件大小关联起来。sincedb文件是Logstash在文件中存储当前偏移量的位置。文件格式的确切描述见,但您主要需要关注第一列和最后一列。第一列是inode编号,也可以在文件的
ls-li
输出中找到,最后一列是当前偏移量。例如:

393309 0 64773 437
这里,对于inode为393309的文件,Logstash位于偏移量437处

join命令可用于将此文件与
ls-li
输出连接(其中文件的索引节点号位于第一列):


$join/var/lib/logstash/.sincedb_f5fdf6ea0ea92860c6a6b2b354bfcbbc我修改了Magnus的脚本,将尚未解析为0.0%的文件也列出:

PATH_TO_SINCEDBS=/var/data/logstash/plugins/inputs/file
FILES_TO_BE_PARSED="/tmp/*.log /log/*.log /log/parsed/*.log"

tmpfile=$(mktemp); tmpfile2=$(mktemp)

sort ${PATH_TO_SINCEDBS}/.sincedb_* | awk '{ print $1" "$4 }' > ${tmpfile}
stat -c "%i %n %s" ${FILES_TO_BE_PARSED} | sort > ${tmpfile2}

join ${tmpfile2} ${tmpfile} -a 1 | awk '{ printf "%-30s %.1f%\n", $2, 100 * $4 / $3 }'

rm -f ${tmpfile} ${tmpfile2}

不幸的是,当您使用带有Logstash 5的“start_position=>“beging”的文件输入文件时,它在完成之前不会向sincedb文件写入任何内容——或者至少这是我得到的行为

您还可以使用度量{}过滤器在logstash运行时打印一些输出(例如,每1000条记录),或者统计elasticsearch中存在的记录。注意:要使logstash在处理文件后停止并退出,请设置
mode=>“read”
exit\u after\u read=>true
$ join /var/lib/logstash/.sincedb_f5fdf6ea0ea92860c6a6b2b354bfcbbc <(ls -li /var/log/syslog) | awk '{ printf "%-30s%.1f%\n", $13, 100 * $4 / $9 }'
/var/log/syslog               100.0%
PATH_TO_SINCEDBS=/var/data/logstash/plugins/inputs/file
FILES_TO_BE_PARSED="/tmp/*.log /log/*.log /log/parsed/*.log"

tmpfile=$(mktemp); tmpfile2=$(mktemp)

sort ${PATH_TO_SINCEDBS}/.sincedb_* | awk '{ print $1" "$4 }' > ${tmpfile}
stat -c "%i %n %s" ${FILES_TO_BE_PARSED} | sort > ${tmpfile2}

join ${tmpfile2} ${tmpfile} -a 1 | awk '{ printf "%-30s %.1f%\n", $2, 100 * $4 / $3 }'

rm -f ${tmpfile} ${tmpfile2}