实时日志仪表盘

-2 投票
2 回答
1314 浏览
提问于 2025-04-18 13:01

我们有一些用Python写的服务,很多都使用Nginx作为反向代理。现在,我们通过查看位于/var/log/nginx/access.log的日志来实时检查请求。我想把这些日志放到一个网页上,让大家都能方便地查看,而不需要每次都通过SSH登录到每台机器上。

我们目前的系统里有一个叫fluentd的工具(听说它和logstash类似),它会把日志发送到一个集中式的统计服务器上,这个服务器上安装了Elasticsearch和Kibana,目的是让Kibana成为查看我们日志的前端界面。

我对这些服务一点都不了解。如果我想实时查看我们的日志,这样的组合是否可行?Elasticsearch能否在一秒钟的延迟内提供实时数据?Kibana是否有现成的功能,可以在新日志数据到来时自动更新页面(也就是说,它和Elasticsearch之间是否有连接?还是说我选错了工具?

2 个回答

1

Kibana其实就是一个在Elasticsearch上面的界面。它直接和Elasticsearch沟通,所以上面的数据和你输入到Elasticsearch的数据一样,都是实时的。换句话说,它的效果取决于你的数据收集工具(在你的情况下是fluentd)。

Kibana的工作方式是让你定义时间序列,然后用这些时间序列去从Elasticsearch查询数据,接着你可以让它一直搜索关键词,并把这些数据可视化出来。

如果你说的“实时”是指想要图表动态变化,这也是可以做到的(这叫“流式仪表盘”);不过这并不是Kibana真正强大的地方,Kibana的真正强大在于它有一个非常丰富的查询引擎,可以深入分析时间序列,进行计算(比如在某段时间内的前x名)。

如果你只是想要一个漂亮的、动态的东西挂在墙上的电视上,这在Kibana也是可以实现的,但要记住你需要把所有数据存储在Elasticsearch里,所以如果你不打算进行其他分析,就需要调整你的配置。例如,可以设置消息的存活时间很短,这样一旦可视化后就不再保留;或者过滤fluentd,只发送你想要绘制的事件。否则,你可能会遇到磁盘空间不足的问题。

如果你只想要这些,使用一些JavaScript图表库在你的门户网站上会更简单。

1

我有一个“access.log(或者其他日志) - logstash(或者其他ES索引器) - Kibana”的流程,适用于多个服务和日志,运行得很好。在我们的情况下,延迟超过了一秒,但这主要是因为日志或ES索引器的缓冲,而不是Kibana或ES本身的问题。

你可以设置Kibana只显示最近X分钟的数据,并每Y秒刷新一次,这样就能有一个不错的实时感受——在电视上看起来也很不错;)

需要注意的是,Kibana有时会发出一些很糟糕的查询,这可能会导致你的ES集群崩溃(不过在最近的ES和Kibana版本中,这个问题似乎有了很大改善),所以不要把它当作日志的永久存储,也不要把你用来运行Kibana的ES集群和那些对高可用性要求更高的应用共享。

正如Burhan Khalid所指出的,这种设置还让我们能够深入分析和研究特定的模式,这非常有用(“这个图上的尖峰是什么?”——放大,添加几个过滤器,查看几条示例日志,再过滤一次——谜底揭晓)。我觉得,当我们看到一些奇怪的东西时,这个解决方案能让我们不必去其他地方寻找更多细节,真的是最棒的部分。

撰写回答