轻量级日志管理平台Grafana Loki

文章目录

  • 轻量级日志管理平台Grafana Loki
    • 背景
    • 什么是Loki
    • 为什么使用 Grafana Loki?
    • 架构
        • Log Storage
    • Grafana
    • 部署使用
      • 基于 Docker Compose 安装 Loki
        • MinIO
      • K8s集群部署Loki采集
      • Helm 部署方式和案例
    • 参考

轻量级日志管理平台Grafana Loki

背景

在微服务以及云原生时代,由于应用部署到遍地是,为了不像传统的方式上每台应用服务器筛选日志,那么我们可以使用日志管理平台,将所有日志都采集到统一的平台,供运维和研发人员快速排查故障,进而提升效率。

在整个运维生命周期中,日志监控主要就是关注程序运行状态。日志系统是现代运维的核心。但随着系统的复杂化和分布式架构的普及,日志量呈现指数级增长。选择一个高效的日志收集和分析工具,直接影响系统的性能和维护成本。

这样的日志平台云厂商有提供,比如腾讯云的日志服务CLS,阿里云日志SLS,百度云日志服务BLS,天翼云日志服务CT-LTS,谷歌云Cloud Logging等等。

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

什么是Loki

官网:https://grafana.com/docs/loki/latest/

Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。

项目受 Prometheus 启发,官方的介绍就是: Like Prometheus, but for logs ,类似于 Prometheus 的日志系统。

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

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

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

特别适合储存 Kubernetes Pod 日志 ; 诸如 Pod 标签之类的元数据会被自动删除和编入索引。

Loki 的一大特点是它不索引日志内容,只索引标签(Labels),这大幅减少了资源消耗。
它不对原始日志进行索引,只对日志的标签进行索引,而日志通过压缩进行存储,通常是文件系统存储,所以其操作成本更低,数量级效率更高。

与其他日志记录系统不同,Loki 的构建理念是仅索引关于日志标签的元数据(就像 Prometheus 标签一样)。然后将日志数据本身压缩并以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS),甚至本地文件系统。

总结:相对于EFK/ELK,专为日志而生的Loki,结合Grafana生态,对于中小企业,或者说只是作为日志系统而言,我更倾向于选择Loki代替EFK/ELK

Loki
美[ˈloʊki]英[ˈləuki:]
n.【欧神】洛基
网络洛奇;邪神洛基;火神
在这里插入图片描述

可以把Loki的功能总结如下:

  • 日志收集:Loki可以接收来自不同应用程序、主机和容器的日志数据。
  • 日志存储:Loki使用可扩展的分布式存储后端存储日志数据,包括本地存储和云存储。
  • 日志查询:Loki提供了一个高效的查询语言,可以快速地搜索和过滤日志数据。
  • 日志索引:Loki使用标签索引和压缩算法对日志数据进行索引,可以大大减少存储空间和查询时间。
  • 日志警报:Loki可以根据日志数据中的条件触发警报,并将警报发送到警报通道。
    可以看到,作为一个日志处理系统,从收集、存储、查询、告警支持都是比较全面的,配合Grafana也能够比较好实现可视化,相关组件也比较简单。

为什么使用 Grafana Loki?

  1. 入门非常简单:可以使用各种客户端从任何来源发送任何格式的日志
  2. 没有采集日志格式要求:提供了更大的灵活性以及在查询时格式化的选项
  3. 轻量级:相比ELK,Loki更加轻量级,因为它不需要一个单独的Elasticsearch集群来存储和索引日志数据
  4. 高度可扩展性:Loki可以通过添加更多的Loki实例来实现水平扩展,这使得它更容易处理大量的日志数据。
  5. 与 Prometheus、Grafana 和 K8s 原生集成:可以在单个用户界面中无缝切换查询指标、日志等数据
  6. 根据日志生成告警:可以从日志行构建指标并生成告警

Loki 更适合对日志量大但查询要求相对简单的场景。特别是在 Kubernetes 环境中,Loki 的轻量和与 Prometheus 的无缝集成,让它成为了首选。

架构

Loki 的架构非常简单,主要由以下 3 个部分组成:

  • Loki:负责存储日志和处理查询。
  • Promtail:日志收集的代理,负责在各端收集日志并将其发送给 Loki 。
  • Grafana:用于日志搜索的UI 展示。

在这里插入图片描述

在 Kubernetes 中 Promtail 以 DaemonSet 方式运行在每个节点中,通过 Kubernetes API 得到日志的正确元数据,并将它们发送到 Loki。

Loki则采用了分布式架构,将日志数据存储在多个节点上,Promtail进行日志收集,可视化依赖于Grafana

Loki具有较低的硬件要求,可以在较小的硬件上运行,例如使用少量内存和CPU。可以通过添加更多的Loki实例来实现水平扩展,这使得它更容易处理大量的日志数据。

直接支持Prometheus:Loki与Prometheus深度集成,这使得在Prometheus查询中使用Loki日志数据更加容易。

在这里插入图片描述
该图显示了 Grafana Loki 如何收集、存储、查询和可视化日志。

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

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

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

Log Storage

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

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

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

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

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

Grafana

官方文档:https://grafana.org.cn/docs/loki/latest/#google_vignette
Loki 的数据查询,都是通过 Grafana,在 Grafana 中支持 loki 的数据源,通过配置 Loki 的接口地址即可

Grafana 的查询,支持 LogQL

部署使用

官方文档:https://grafana.org.cn/docs/loki/latest/get-started/
在这里插入图片描述

使用 Grafana 进行查询验证
通过http://localhost:3000,访问Grafana来查询和观察 Loki 集群的日志数据,Grafana 已经默认把 Loki 配置为数据源。

部署 Loki 有几种方式,包括使用 Docker、Kubernetes 以及 Helm Chart :

  • 使用 Docker 部署 Loki: 使用 Docker 部署 Loki 是一种简便的方式。你可以编写一个 docker-compose.yml 文件来定义 Loki 服务,并通过 docker-compose up 命令启动 Loki。
  • 使用 Kubernetes 部署 Loki: Loki 官方推荐的最佳实践为采用 DaemonSet 部署 Promtail 的方式,Promtail 是 Loki 的代理,负责收集日志并将其发送给 Loki。你可以创建相应的 Kubernetes 配置文件,定义 Loki 和 Promtail 的部署和服务。
  • 使用 Helm Chart 部署 Loki: Helm Chart 是 Kubernetes 的包管理工具,可以用来部署 Loki。首先需要添加 Loki 的 Helm 仓库,然后使用 helm install 命令安装 Loki。安装时可以指定一个 values 文件来覆盖默认配置。

基于 Docker Compose 安装 Loki

参考官方部署手册:https://grafana.com/docs/loki/latest/get-started/quick-start/

官方docker-compose快速部署架构图有下面这些组件:使用的最新版本3.1.x
在这里插入图片描述

轻量级日志管理平台Grafana Loki搭建及应用
flog :生成日志行。 flog是常见日志格式的日志生成器。
Grafana Alloy :从 flog 中刮取原木线,并通过网关将它们推送给 Loki。
网关(nginx),接收请求并根据请求的 URL 将它们重定向到适当的容器。
Loki 读取组件:运行查询前端和查询器。
Loki 写入组件:运行分发器和接收器。
Loki 后端组件:运行 Index Gateway、Compactor、Ruler、Bloom Compactor(实验性)和 Bloom Gateway(实验性)。
Minio :Loki 用它来存储索引和块。
Grafana :提供 Loki 中捕获的日志行的可视化。

上面官方采用的是读写分离以及minio存储后端,启动的组件比较多,本人调整了成单节点部署测试,想初步体验的可以使用我下面的 docker-compose.yaml 快速部署。

[推荐参考这篇文章即可]轻量级日志管理平台Grafana Loki搭建及应用
参考URL: https://cloud.tencent.com/developer/article/2448658

物理部署protmail
若你需要采集其他机器上的日志,那么你只需要安装采集组件protmail,docker版本在上面已经演示过了,下面演示使用物理部署。

MinIO

Minio就是一个开源的、自托管的分布式对象存储服务,分布式架构,可部署在本地服务器、私有云或公有云。

数据访问:基于标准的 Amazon S3 API,支持 RESTful API 访问文件,可以使用标准的 S3 客户端工具(如 aws-cli、MinIO 控制台等)与 MinIO 交互。
协议支持:支持 S3 协议,因此可以无缝集成到现有的 S3 应用和生态系统中,方便与 AWS、Azure、Google Cloud 等其他云服务互通。

K8s集群部署Loki采集

K8s集群部署Loki采集,用NFS持久存储,日志保留7天
参考URL: https://blog.csdn.net/Lilk5/article/details/140174359
如何在k8s集群中安装配置loki并使用grafana可视化管理
参考URL: https://www.cnblogs.com/wod-Y/p/17348436.html

Helm 部署方式和案例

Install Grafana Loki with Helm官方文档:https://grafana.com/docs/loki/latest/setup/install/helm/
使用 Helm 安装 Loki Stack
参考URL: https://todoit.tech/k8s/loki/

  1. 前提条件
    在开始之前,请确保您已经:

安装了 Kubernetes 集群
安装了 Helm
配置了 kubectl 连接到您的集群

  1. 添加 Grafana Helm 仓库

  2. 创建 values.yaml 自定义配置文件

  3. 安装 Loki

# 使用自定义配置安装  
helm install loki grafana/loki \
  -n monitoring \
  -f loki-values.yaml \
  --create-namespace  
  1. 验证安装
# 检查 Loki Pod 状态  
kubectl get pods -n monitoring -l app.kubernetes.io/name=loki  

# 查看服务  
kubectl get svc -n monitoring | grep loki  
  1. 配置 Grafana 数据源(可选)
    在 Grafana 中添加 Loki 数据源:

URL: http://loki-gateway.monitoring.svc.cluster.local

参考

真香,Grafana开源Loki日志系统取代ELK?
参考URL: https://blog.csdn.net/projim_tao/article/details/129338320
Loki vs ELK:谁是日志收集的终极选择?
参考URL: https://blog.csdn.net/problc/article/details/142330846
Grafana Loki 架构详解,比 ES 成本低很多
参考URL: https://segmentfault.com/a/1190000045124031
【写的好,推荐阅读】详解轻量日志聚合系统 Loki 架构
参考URL: https://xie.infoq.cn/article/5376127f5956a99941bbb1e00
k8s集群监控cadvisor+prometheus+grafana部署
参考URL: https://blog.csdn.net/weixin_48878440/article/details/128374447
Kubernetes 日志解决方案 Grafana Loki 「Helm 部署案例」
参考URL: https://cloud.tencent.com/developer/article/2307121
基于 Docker Compose 安装 Loki
参考URL:https://blog.csdn.net/a120608yby/article/details/140660210
轻量级日志系统docker-compose搭建Loki+Grafana+Promtail,配置、部署,查询全流程
参考URL:https://tencentcloud.csdn.net/6762647af3b8a55e4e985821.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Postman 访问 Keycloak 端点

1. 引言 在本教程中,我们将首先快速回顾 OAuth 2.0、OpenID 和 Keycloak。然后,我们将了解 Keycloak REST API 以及如何在 Postman 中调用它们。 2. OAuth 2.0 OAuth 2.0 是一个授权框架,它允许经过身份验证的用户通过令牌向第三方授予访问…

WEB1~6通杀

##解题思路 这六道题,通杀了,只因为是PHP的特性 来,看web6,过滤最复杂的正则,而且不能解析成大于999的值,但是,php是弱类型的语言,我只要输入任意字符数字,最终值就为0&…

I2C协议简介:串行通信的关键技术

目录 一、总线通信基本概念 二、I2C总线协议介绍 1. 时序图解析 (1)起始信号 (2)应答信号 (3)终止信号 (4)设备地址 (5)I2C传输方法 ​编辑 &#…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…

Web漏洞——命令注入漏洞学习

一、什么是命令注入漏洞 想象一下&#xff0c;你家有一个智能管家机器人。这个机器人可以通过你发出的指令来完成各种任务&#xff0c;比如“请打开电视机、播放音乐、开灯等等”。你只需要对它说&#xff1a;“请打开电视”&#xff0c;它就会去执行这个任务。但是&#xff0…

大模型自动提示优化(APO)综述笔记

自大型语言模型&#xff08;LLMs&#xff09;出现以来&#xff0c;提示工程一直是各种自然语言处理&#xff08;NLP&#xff09;任务中激发期望响应的关键步骤。然而&#xff0c;由于模型的快速进步、任务的多样性和相关最佳实践的变化&#xff0c;提示工程对最终用户来说仍然是…

快速排序(详解)c++

快速排序(Quick Sort)&#xff0c;既然敢起这样的名字&#xff0c;说明它是常⻅排序算法中较为优秀的。事实上&#xff0c;在很多情况下&#xff0c;快排确实是效率较⾼的算法&#xff1b;c的排序是以快排为基础&#xff0c;再加上堆排和插入排序做优化实现的&#xff0c;我们这…

【工具变量】公司企业数字领导力(2004-2023年)

数据简介&#xff1a;企业数字化领导力是指在数字经济时代&#xff0c;领导者通过战略性地使用数字资产、引领组织变革&#xff0c;使企业在数字化环境中获得持续成功的能力。对于上市公司而言&#xff0c;这种领导力尤为重要&#xff0c;因为它直接关系到企业的战略方向、市场…

浅谈新能源汽车充电桩建设问题分析及解决方案

摘要&#xff1a; 在全球倡导低碳减排的大背景下&#xff0c;新能源成为热门行业在全球范围内得以开展。汽车尾气排放会在一定程度上加重温室效应&#xff0c;并且化石能源的日渐紧缺也迫切对新能源汽车发展提出新要求。现阶段的新能源汽车以电力汽车为主&#xff0c;与燃油汽…

seacmsv9报错注入

1、seacms的介绍 ​ seacms中文名&#xff1a;海洋影视管理系统。是一个采用了php5mysql架构的影视网站框架&#xff0c;因此&#xff0c;如果该框架有漏洞&#xff0c;那使用了该框架的各个网站都会有相同问题。 2、源码的分析 漏洞的部分源码如下&#xff1a; <?php …

python学习四

python运算符与表达式 表达式: Python中的表达式是一种计算结果的代码片段。它可以包 含变量、运算符、常数和函数调用,用于执行各种数学、逻辑 和功能操作 算术运算符: 比较(关系)运算符: 赋值运算符: 逻辑运算符: 位运算符: 成员运算符: 身份运算符 <

Nginx面试宝典【刷题系列】

文章目录 1、nginx是如何实现高并发的&#xff1f;2、Nginx如何处理HTTP请求&#xff1f;3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的…

数字可调控开关电源设计(论文+源码)

1 设计要求 在本次数字可调控开关电源设计过程中&#xff0c;对关键参数设定如下&#xff1a; &#xff08;1&#xff09;输入电压&#xff1a;DC24-26V,输出电压&#xff1a;12-24&#xff08;可调&#xff09;&#xff1b; &#xff08;2&#xff09;输出电压误差&#xf…

清华大学《AIGC发展研究3.0》

大家好&#xff0c;我是吾鳴。 AIGC已经爆火好长一段时间了&#xff0c;特别是DeepSeek的爆火&#xff0c;直接让很多之前没有体会过推理模型的人可以免费的使用上推理模型&#xff0c;同时DeepSeek产品形态也是全球首创&#xff0c;就是直接把AI的思考过程展示给你看&#xff…

模型和数据集的平台之在Hugging Face上进行模型下载、上传以及创建专属Space

模型下载 步骤&#xff1a; 注册Hugging Face平台 https://huggingface.co/ 新建一个hf_download_josn.py 文件 touch hf_download_josn.py 编写hf_download_josn.py文件 import os from huggingface_hub import hf_hub_download# 指定模型标识符 repo_id "inter…

脚本无法获取响应主体(原因:CORS Missing Allow Credentials)

背景&#xff1a; 前端的端口号8080&#xff0c;后端8000。需在前端向后端传一个参数&#xff0c;让后端访问数据库去检测此参数是否出现过。涉及跨域请求&#xff0c;一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码&#xff0c;出现了这个bug&#xff…

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统&#xff0c;适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…

音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介

一、引言 RTP封装H.264时&#xff0c;RTP对NALU Header的nal_unit_type附加了扩展含义。 由《音视频入门基础&#xff1a;H.264专题&#xff08;4&#xff09;——NALU Header&#xff1a;forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道&#xff0c;nal_unit…

智慧园区后勤单位消防安全管理:安全运营和安全巡检

//智慧园区消防管理困境大曝光 智慧园区&#xff0c;听起来高大上&#xff0c;但消防管理却让人头疼不已。各消防子系统各自为政&#xff0c;像一座座孤岛&#xff0c;信息不共享、不协同。 消防设施管理分散&#xff0c;不同区域、企业的设备标准不一样&#xff0c;维护情况…