Grafana Loki 架构组件详解

news2024/9/22 15:35:53

在本指南中,我们将详细了解Grafana Loki架构及其组件。

在公司的分布式环境中,存储和管理来自各种系统资源的日志是一项具有挑战性的任务。为了简化这项任务,引入了一个称为日志聚合的概念,它从各种系统资源中收集、存储、管理日志。有各种各样的日志聚合工具,其中一个工具是 Grafana Loki,通过本文我们一起探索一下 Loki。

什么是 Grafana Loki?

Grafana Loki 是一个开源的日志收集系统,其功能是收集、存储和查询日志。Grafana Loki 压缩日志并将日志存储在块中,并将它们存储在文件系统或 AWS S3 等后端存储中。

块是一个压缩文件,其中包含基于日志卷的日志条目,因此当块大小达到其大小限制时,它会将日志存储在另一个块中。每当存储一个块时,它都会为每个块创建一个索引。索引不包含日志的内容,它只包含时间戳、块的标签和块的位置。

日志的默认保留期限为24小时,最短期限为1小时,最长可延长至30天。Loki 横向扩展并具有其查询语言 LogQL。

Grafana Loki 架构

下图显示了 Grafana Loki 的架构以及它如何收集日志的工作流程。

loki-component-2-1

  • 现在,让我们看看 Grafana Loki Logging 是如何工作的。该图显示了 Grafana Loki 如何收集、存储、查询和可视化日志。
  • 在 Grafana Loki 中,agent 负责从文件、容器、pod、应用程序和系统日志中收集日志。
  • Loki 使用日志收集代理(agent)来收集日志,如果您在 Kubernetes 中使用 Loki,代理将作为守护程序集(Daemonset)部署,因为我们需要来自集群每个可用节点的日志。
  • Promtail 是该架构中使用的代理(agent),Promtail 收集日志,然后过滤和压缩日志以节省存储空间。
  • 压缩日志后,它会为日志提供一个标签并将其发送给 Loki。
  • 从 Promtail 接收到日志之后,Loki 将每个日志存储为一个块,该块将日志消息收集在一个文件中,以节省存储空间和有效检索。
  • 它还为块提供标签和时间戳。每当存储块时,它都会为每个块创建一个索引,其中包含块的时间戳、标签和位置。
  • Loki 使用 LogQL 查询语言查询日志,LogQL 允许我们根据我们选择的标签和值过滤、聚合和分析日志。
  • 通过将 Loki 添加到 Grafana,您可以可视化查询的日志或使用 LogCLI 从 CLI 查询日志。

Grafana Loki 组件

Grafana 包含很多组件,promtail, distributor, ingester, querier, ruler, query frontend, Grafana,让我们看一下这些组件。

Promtail

Promtail 是充当 Loki 的日志代理(agent)的重要组件。它的功能是从系统中收集每个日志,标记它,然后将其发送给 Loki。Loki 从本地日志文件和系统日志中收集日志。

您必须在要收集日志的每个系统中安装 Promtail,同样,如果您在 Kubernetes 上使用 Loki,则必须在每个节点中部署 Promtail 作为守护进程集(Daemonset)。

Distributor

Distributor 是一个无状态组件,负责处理和验证从日志代理(如 Promtail)接收的日志,并将日志分发到 ingester。

当 Distributor 收到日志时,它首先验证日志是否符合配置,例如有效标签、不是较旧的时间戳以及日志是否太长。

验证完成后,Distributor 会根据一致性哈希将日志分发到每个 ingester,以确保平均分配给每个可用的 ingester。

Ingester

Ingester 负责在其文件系统上存储和索引从 Distributor 收到的日志,并定期将日志传输到持久性存储(长期存储),如 S3。

Ingester 根据配置设置保留策略(自动日志删除时间)。

它使用时间序列数据库以一定的结构格式存储日志,这简化了高效查询和日志过期的过程。

Ruler

Ruler 是 Loki 的监控和告警组件,其作用是记录指标并根据收到的日志数据触发告警。它不是直接衡量指标,而是将日志数据转换为指标。

Ruler 监控日志并在检测到任何问题时发出通知,并通过电子邮件或 Slack 发送通知。

Querier

顾名思义,Querier 负责使用 LogQL 查询语言从存储和 ingester 中查询日志。它根据用户查询(如时间戳、标签等)过滤和聚合日志。

查询器缓存之前的查询,以防止一次又一次地查询相同的日志,它只查询一次具有相同时间戳、标签和日志消息的日志。

Query Frontend

Query Frontend 是一个与用户交互的无状态组件,它负责处理查询请求、执行查询以及通过 Grafana 仪表板可视化日志。

Query Frontend 将大型查询拆分为多个较小的查询,并同时运行所有查询,这可以防止大型查询在单个查询中导致内存问题,并有助于加快执行速度。

Grafana

Grafana 是一个开源工具,可帮助查询、可视化和监控日志。我们可以将 Loki 与 Grafana 集成,并在仪表板、图表等方式可视化日志数据。

Grafana 使用查询语言 LogQL 与 Grafana 集成,我们也可以在 Grafana 中编写 LogQL 查询来过滤和查询日志。

Log Storage

Loki 存储日志数据,提高查询和接收日志的效率。它将日志数据压缩成块,根据时间进行组织,并为其提供标签和时间戳。然后,它以键值对格式为每个块创建一个索引,其中块时间戳和标签等。

例如,将块的索引视为一本书的索引。

Chunks 和 Index 可以存储在各种后端对象存储或文件系统中。

一旦存储了块,它就会为数据创建一个保留期,并根据保留期自动删除。

如果您使用文件系统作为存储,则块和索引的默认存储路径是 /var/lib/loki/chunks 和 /var/lib/loki/index

如何在 Loki 中存储块和索引的示例

例如,假设您正在使用一个 Web 服务器,该服务器生成一个包含时间戳、HTTP 请求方法、URL 和响应代码的日志。

每组日志条目将被存储为多个块,如下面的 JSON 格式:

{
  "timestamp": "2023-11-20T1:02:33.456Z",
  "labels": {
    "method": "GET",
    "url": "/products",
    "status": 200
  },
  "entry": "Request received for /products, responded with 200 OK"
}

块文件名将采用此格式:

2023-11-20T1-00-00.000Z-2023-11-20T1-15-00.000Z.chunk

顾名思义,该块包含 2023 年 11 月 20 日凌晨 1 点至凌晨 1:15 的日志。

chunk 创建之后,会为每个 chunk 创建一个 index,index 会存储 chunk 的时间戳、标签和位置。如下所示:

{
  "2023-11-20T1:02:33.456Z": {
    "chunk": "2023-11-20T1-00-00.000Z-2023-11-20T1-15-00.000Z.chunk",
    "labels": {
      "method": "GET",
      "url": "/products",
      "status": 200
    }
  }
}

如上面示例索引文件所示,它只存储块文件名、时间戳和标签,不会存储日志消息。

Grafana Loki 的特点

可扩展性

Loki 可以根据日志的数量进行扩展,如果日志量比较大,水平扩展 ingester 模块即可,因此您不必担心过多的日志流量会减慢该过程。

它将日志分布在多个摄取器(ingester)之间,以防止在节点故障期间由于流量过大而丢失数据,并且还将日志重定向到健康的摄取器节点,以防止停机和数据丢失。

效率

由于 Loki 将日志条目压缩并存储为块,因此即使对于大数据,它也增加了存储空间并减少了检索日志所花费的时间。在索引的帮助下,Loki 可以根据时间戳和标签轻松定位查询到的日志。

多租户

Loki 可以同时收集和分析来自各种来源(如 pod、容器、应用程序等)的日志,因此我们不必为不同的资源配置单独的日志代理。

尽管它从各种来源收集日志,但它会根据来源单独存储日志,例如容器和应用程序的单独存储文件。

日志轮转

Loki 在存储块时为块分配了保留策略,它会根据保留期自动删除旧日志,这有助于节省存储空间。

如果您不想删除旧日志,也可以将日志存储在长期对象存储中,例如 AWS S3 和其他对象存储。

Grafana Loki 和 EFK Stack 之间的区别

现在,让我们看看是什么让 Grafana Loki 与 EFK Stack 不同。Grafana Loki 和 EFK Stack 之间的区别如下:

Grafana LokiEFK Stack
Loki 收集日志、存储日志,使用 Grafana 可视化日志EFK Stack 使用 Elasticsearch 来收集和存储日志,使用 Logstash 来解析和处理日志,使用 Kibana 来可视化日志
Loki 压缩日志并将它们存储为块EFK Stack 将每个日志条目存储在 Elasticsearch 的 JSON 文件中
Loki 以其效率和可扩展性而闻名EKS以其适应各种环境的能力而闻名
水平缩放垂直缩放
Loki 使用分布式架构EFK Stack 使用客户端-服务器架构
资源使用率低资源使用率高
使用 Grafana 可视化日志使用 Kibana 可视化日志

译者注:感觉作者这个比较有失偏颇,各位读者兼听则明哈

总结

总的来说,Grafana Loki 是一个强大的开源工具,用于收集、存储、查询和可视化日志。

它具有可扩展性、日志压缩、多租户支持和自动日志轮换等功能,可实现有效的监控和故障排除。

我相信这个博客可以让您更好地了解 Grafana Loki 及其功能。

原文:https://devopscube.com/grafana-loki-architecture/
译文:https://flashcat.cloud/blog/grafana-loki-architecture/
译者:巴辉特

本博客出自快猫星云的小伙伴们,快猫星云是一家专注在监控/可观测性领域的初创公司,其团队是开源项目 Open-Falcon、Nightingale 的创始团队。如果您想要采购监控/可观测性相关的产品方案,欢迎 联系我们做产品技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(3)基于巴法云+MQTT+微信小程序控制esp8266点灯

1、配置微信公众平台 在 微信公众平台 注册 小程序 账号,拿到小程序 appid,登录到微信公众平台后在 开发者ID 里面可以看到,长的大概是这样:wx34a2063de5yyc04b,下面导入项目的时候会用到。 然后在 服务器域名 的后面…

微信小程序_对接声网_视频会议

目录 一、开通声网账号 1.注册账号 2.新建项目 3.开启小程序服务 二、对接声网小程序 1.前提条件 2.跑通API示例项目 3.合并两个项目 三、嵌入声网web网页 1.准备html页面 2.web-view组件 开发的微信小程序项目里面有多人会议,对接声网,有两种…

洛谷 P1548 [NOIP1997 普及组] 棋盘问题 题解

题目背景 NOIP1997 普及组第一题 题目描述 设有一个NM 方格的棋盘 (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。 例如:当 N2,M3时: 正方形的个数有 8 个:即边长为 1 的正…

(附源码)Springboot 书店销售管理-计算机毕设 42172

Springboot 书店销售管理 目 录 摘要 1 绪论 1.1 研究意义 1.2选题背景 1.3springboot框架介绍 2 书店销售管理系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析…

PCB电路板散热的技巧

对于电子设备来说,工作时都会产生一定的热量,从而使设备内部温度迅速上升,如果不及时将该热量散发出去,设备就会持续的升温,器件就会因过热而失效,电子设备的可靠性能就会下降。 因此,对电路板…

独立站转化率优化移动端篇丨出海笔记操盘手面对面精华

关于独立站转化率优化,其实有专业的术语叫做CRO——conversion rate optimize。其实这是个很大很大的话题。里面其实包括站站外和站内的两部分,站外不用多说了比如就是广告,或者是其他的流量渠道等等,站内优化是我们今天要讲的重点…

springboot高校科研成果管理系统-计算机毕业设计源码48574

摘要 随着科研规模和复杂度的增加,管理科研成果、经费申请等方面变得愈发困难,需要系统化的管理工具进行支持。并且科研活动产生的数据量庞大,也越来越来越多的成果涌现,需要有效的数据管理系统来对高校科研成果进行处理、审核和发…

记录|如何统一管理多个同一个对象?

目录 前言一、对象就用对象数组管理更新时间 前言 自己的感想 一开始,自己没弄懂C# winform中的testBox是什么,导致创建多个testBox的时候要用很笨的方法来进行管理。 就是下面这种:用数组一个一个掉用里面的单独属性。 string[] str new …

操作系统之Linux相关 内存管理、虚拟内存、设计特点、网络编程模型

Linux 文章目录 LinuxLinux 内存管理Linux 虚拟内存概述虚拟地址与物理地址的映射内存分页分页的优势虚拟地址到物理地址的映射机制分级页表的缺陷段页式内存管理 Linux 信号Linux 设计特点I/O 多路复用五种 I/O 模型详解Linux 网络编程模型软链接和硬链接对比中断和异常用户态…

8G内存的Mac够用吗 ?苹果电脑内存满了怎么清理?可以有效地管理和优化你的Mac电脑内存,确保设备运行流畅

嘿,朋友们,让咱们聊聊怎么让我们的Mac小伙伴时刻保持巅峰状态吧!想象一下,每一次点击、每一次滑动,都如同初见时那般丝滑顺畅,是不是超级心动?为了这份持久的畅快体验,我强烈推荐大家…

提升教学效率,智慧校园班主任管理的下课堂功能助力

在智慧校园学工系统中,班主任管理课堂的关键在于利用系统提供的工具高效执行点名与秩序维护。班主任可以借助系统快速进行点名,自动匹配班级学生名单,简化整个流程。系统支持多样化的点名方式,包括传统手动点名、二维码签到&#…

6-2 图像卷积

互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。 根据 6-1节中的描述,在卷积层中,输入张量和核张量通过互相关运算产生输…

On Stacking a Persistent Memory File System on Legacy File Systems——论文泛读

FAST 2023 Paper 分布式元数据论文阅读笔记整理 问题 非易失性主存储器(NVMM)具有与DRAM类似的低访问延迟和字节可寻址性,同时实现数据的非易失性。但存在以下缺点:(1)延迟高于DRAM,&#xff…

PVE虚拟机被锁定:VM is locked解决方法

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…

前端面试宝典【设计模式】【1】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…

某RED书旋转验证码标注工具

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 本文的验证码网址如下,使用base64解码获得 最近,某书的旋转验证码又更新了,在我之前的文章有讲过利用梯度幅度计算图像边缘…

Apache 的POI居然还能操作PPT,快来试试看

上次我们讲的用POI操作excel。Java操作Excel(Apache Poi详解) 那么java怎么操作ppt呢,其实poi也提供了操作ppt的sdk,现在我们来直接用Apache的poi操作ppt 首先我们要知道的是PPT有两种,一种格式是PPT,一种格式是PPTX,P…

Seata的使用

Seata Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。 术语 TC(Transaction Coordinator) -事务协调者(相当于服务端) 维护全局和分支事务的状态,驱动全局事务提交或回滚 TM(Transaction …

使用Python实现Excel文件首页截图工具

日常工作中,尤其是处理大量Excel文件时,可能需要对文件的首页进行截图保存,以便于后续的快速查看或报告编写。今天,我将分享一个用Python编写的Excel文件首页截图工具。这个工具将帮助我们自动化地对选定的Excel文件进行首页截图&…

Linux驱动入门—什么是驱动?体系结构,驱动的分类,开发驱动需要注意的问题

文章目录 什么是驱动?Linux系统体系结构用户空间与内核空间的隔离用户应用程序库函数用户空间守护进程命令行接口(CLI)图形用户界面(GUI) 内核空间内核的角色和职责内核空间与用户空间的区别内核的结构和组成内核空间的…