我正在考虑构建一个应用程序,读取我不同的服务器日志文件,将解析的数据保存到数据库,然后从日志文件中删除该行。
这是我的程序员方面,试图想出更好的方法将所有日志文件放入可用/可搜索的应用程序控制台中,我可以一次查看多个服务器并编写脚本来查找相关性,或者在我离开时通过电子邮件/短信发送给我,当出现问题时。
市场上似乎已经有针对此问题的昂贵解决方案,但我无法证明每月 500 至 2000 美元的高昂价格是合理的。
无论如何,我的问题是如何从正在写入的日志文件中删除行而不会导致问题?有些日志文件会被轮换(例如 nginx),而其他则不会。我想最安全的做法是复制文件,然后将echo '' > file.log
其删除。不过我可能会错过 300 毫秒的写入。
另一个问题是我是否真的想删除日志。我想不删除日志意味着我必须打开文件,跳到末尾,然后反向操作直到找到最后一个已知条目。
将日志数据传输到外部应用程序/数据库的最佳方法是什么?
答案1
不要重新发明轮子。
使用 logstash 从系统中获取日志。
让 logstash 将日志发送到 elasticsearch。
使用 kibana 前端进行分析。
这种组合非常常见,被称为 ELK 堆栈。而且它完全是开源的。