我有一个ELK服务器来管理我的日志.通常他们会自动发送.一切正常.但出于某种原因,有时我们需要发送一个日志文件.
我想这样做:
curl -F "file=@" http:// :5001
这个conf(在这里有用的部分)在服务器端:
input { ... tcp { port => 5001 type => "curl" codec => line { charset => "UFT-8" } } ..... } filter { ..... if "curl" == [type] { multiline { pattern => "^%{TIMESTAMP_ISO8601}" negate => true what => previous } grok {.....} date {.....} } ..... } output { stdout { codec => rubydebug } elasticsearch { host => localhost } }
这项工作真的很好但是有两个小困难:
忽略文件的最后一行(非空)
卷曲命令永远不会停止.我必须用Ctrl + C杀死.
也许这两点是相关的,但有什么解决方案?也许多线过滤器有问题?
第1部分:
没有更多信息,很难回答这个问题.但是我希望你的日志文件的最后一行不以换行符结尾?logstash输入编解码器"line"正在每行末尾寻找换行符.
要在Windows中添加一个:
echo. >> path\to\your_log_file
第2部分:
cURL用于与HTTP服务器通信.Logstash输入"tcp"不是HTTP服务器,并且不会在上载结束时发送cURL期望的HTTP响应.
你最好使用像Netcat这样的工具来通过TCP发送数据.
PS
"UFT-8"看起来像一个错字.