DevOps设计之 基于旁路 Logging 日志搜集中心 和 日志搜索引擎

基于旁路 logging 日志搜集中心 和 日志搜索引擎

Posted by 董江 on Wednesday, November 2, 2022

基于旁路 logging 日志搜集中心 和 日志搜索引擎

背景

论到要部署一套日志系统, 信用户首先会想到的就是经典的ELK架构,或者现在被称为Elastic StackElastic Stack架构为Elasticsearch + Logstash + Kibana + Beats的组合,其中,Beats负责日志的采集, Logstash负责做日志的聚合和处理,Elasticsearch作为日志的存储和搜索系统,Kibana作为可视化前端展示,整体架构如下图所示:

ELK Stack

此外,在容器化场景中,尤其是在 Kubernetes 环境中,用户经常使用的另一套框架是 EFK 架构。其中,E还是ElasticsearchK还是Kibana,其中的F代表Fluent Bit,一个开源多平台的日志处理器和转发器。Fluent Bit可以让用户从不同的来源收集数据/日志,统一并发送到多个目的地,并且它完全兼容DockerKubernetes 环境。

EFK

下一代 日志搜索引擎PLG

Grafana Labs提供的另一个日志解决方案PLG目前也逐渐变得流行起来。PLG架构为Promtail + Loki + Grafana的组合.

整体架构: PLG

Grafana大家应该都比较熟悉,它是一款开源的可视化和分析软件,它允许用户查询、可视化、警告和探索监控指标。Grafana主要提供时间序列数据的仪表板解决方案,支持超过数十种数据源。

这里稍微介绍下另外两个软件PromtailLoki。官方介绍Grafana Loki是一组可以组成一个功能齐全的日志堆栈组件,与其它日志系统不同的是,Loki只建立日志标签的索引而不索引原始日志消息,而是为日志数据设置一组标签,这意味着Loki的运营成本更低,效率也能提高几个数量级。

Loki的设计理念收到了很多Prometheus的启发,可以实现可水平扩展、高可用的多租户日志系统。Loki整体架构也是由不同的组件来协同完成日志收集、索引、存储等工作的,各个组件如下所示,有关Loki架构的更多信息这里不再展开描述,可以参考官方文档Loki’s Architecture进一步深入了解。最后,一句话形容下Loki就是like Prometheus, but for logs

安利一波 : 本人参与设计与开发的 Loki 系统 Grafana Lab 指 Loki架构设计

基于容器化设计:

Loki

Promtail是一个日志收集的代理,它会将本地日志的内容发送到一个Loki实例,它通常部署到需要监视应用程序的每台机器/容器上。Promtail主要是用来发现目标、将标签附加到日志流以及将日志推送到Loki。截止到目前,Promtail可以跟踪两个来源的日志:本地日志文件和systemd日志(仅支持AMD64架构)。

Lokiindex文件metadata 数据全部同步的s3上。 确保了日志的完善性

这样看上去,PLG和ELK都能完成类似的日志管理工作,那它们之间的差别在哪里呢?

日志方案对比

首先,ELK/EFK架构功能确实强大,也经过了多年的实际环境验证,其中存储在Elasticsearch中的日志通常以非结构化JSON对象的形式存储在磁盘上,并且Elasticsearch为每个对象都建立了索引,以便进行全文搜索,然后用户可以特定查询语言来搜索这些日志数据。与之对应的Loki的数据存储是解耦的,既可以在磁盘上存储数据,也可以使用如Amazon S3的云存储系统。Loki中的日志带有一组标签名和值,其中只有标签对被索引,这种权衡使得它比完整索引的操作成本更低,但是针对基于内容的查询,需要通过LogQL再单独查询。

和Fluentd相比,Promtail是专门为Loki量身定制的,它可以为运行在同一节点上的Kubernetes Pods做服务发现,从指定文件夹读取日志。Loki采用了类似于Prometheus的标签方式。因此,当与Prometheus部署在同一个环境中时,因为相同的服务发现机制,来自Promtail的日志通常具有与应用程序指标相同的标签,统一了标签管理。

Kibana提供了许多可视化工具来进行数据分析,高级功能比如异常检测等机器学习功能。Grafana专门针对Prometheus和Loki等时间序列数据打造,可以在同一个仪表板上查看日志的指标。

效果

Demo

「如果这篇文章对你有用,请随意打赏」

Kubeservice博客

如果这篇文章对你有用,请随意打赏

使用微信扫描二维码完成支付