我想从 nginx(多个服务器,所有服务器每分钟日志中有 1,000,000 行)收集日志到中央统计服务器进行统计处理。我看到 2 个变体:
- 将日志写入每个服务器的本地日志文件
- 重命名每个服务器中模板“DD.MM.YYYY HH”的日志,并通过 ssh 将日志发送到统计服务器,例如
- 向每台服务器上的 nginx 发送重新加载日志的信号
- 使用 syslog 传输(或其他 - 哪些传输端口可以自动重命名模板“DD.MM.YYYY HH”的文件?)将日志发送到统计服务器
- 使用 Hadoop 或统计服务器上内存中的临时目录来从所有服务器写入日志(在这种情况下哪种变体更有效率?)
您还能建议些别的吗?
答案1
看一眼elasticsearch+日志存储+ kibana
Logstash 可以解析您的日志文件并使用过滤器从中提取信息。它可以将它们存储在 Elasticsearch 中,您可以通过 Kibana 进行查询。查看其网站上的视频,了解它的功能。
答案2
第一个选项可以通过 loghost 完成(基本上是第二个选项)。您可以通过 udp 将系统日志消息发送到 $logserver 。然后,您将根据服务器拆分那里的日志,并获得您发送的日志的“精确”时间戳。
在 nginx 服务器上,不需要重命名日志,除了通常的 logrotate 之外,您很可能需要那么多的日志记录。
如果已经有可用的工具,最好不要编写太多脚本,无需重新发明轮子。
选项 2 应该非常接近您想要实现的目标。
根据服务器所在网络的安全性:要么直接通过“正常”系统日志程序传输,要么与日志主机建立某种 vpn 连接。