当前位置: 首页 > news >正文

Grafana+Loki+Alloy构建企业级日志平台

1.日志系统介绍

日志系统:

GLA、ELK、数仓

⽇志处理流程:采集 ==> 存储 ==> 检索 ==> 可视化
日志系统工作流程:
日志平台的目的:统一聚合分散的日志
日志平台搭建方案:
ELK:ElasticSearch:存储日志(日志内容进行分词,日志所有数据都可以被检索)
Loki:轻量级日志聚合平台

LAG工作逻辑:

注:检索日志时向Loki发送查询请求,Loki从MinIo中读取日志

2.Loki

2.1 介绍

Loki 是⼀个可⽔平扩展、⾼可⽤性、多租户⽇志聚合系统,其灵感来⾃Prometheus。Loki 与 Prometheus 的不同之处在于,它专注于⽇志⽽不是指标,并通过推送⽽不是拉取来收集⽇志。
Loki 的设计⾮常经济⾼效,并且具有⾼度可扩展性。与其他⽇志系统不同,Loki不会对⽇志内容进⾏索引,⽽只会对⽇志的元数据进⾏索引,将其作为每个⽇志流的⼀组标签。
⽇志流是⼀组共享相同标签的⽇志。标签帮助Loki在您的数据存储中找到⽇志流,因此拥有⼀组⾼质量的标签是⾼效查询执⾏的关键。
然后,⽇志数据被压缩并以块的形式存储在对象存储中,如亚⻢逊简单存储服务(S3)或⾕歌云存储(GCS),甚⾄为了开发或概念验证,存储在⽂件系统上。⼩索引和⾼度压缩的块简化了操作,显著降低了Loki的成本。

2.2 日志结构

Loki数据存储格式:

index:索引;存储Loki标签,如⽇志级别、来源、分组
chunk:块;存储⽇志条⽬本身
Agent:
代理或客户端,例如Grafana Alloy或Promtail,随Loki⼀起分发。代理抓取⽇志,通过添加标签将⽇志转换为流,并通过HTTP API将流推送到Loki。
Loki主服务器:
负责摄取和存储⽇志以及处理查询。它可以部署在三种不同的配置中,有关更
多信息,请参阅部署模式。
Grafana:
⽤于查询和显示⽇志数据。您还可以使⽤LogCLI或直接使⽤Loki API从命令⾏ 查询⽇志。

3.系统架构

3.1 Loki架构:

写流程:
1. distributor 接收带有流和⽇志⾏的HTTP POST请求。
2. distributor 会 hash 计算请求中包含的每个流,决定发给 ⼀致性 hash 环 中的哪个 ingester
3. distributor 把每个流 发给合适处理它的 ingester 和其副本
4. ingester 接收带有⽇志⾏的流,并为流的数据创建⼀个块或附加到现有块。每个租户和每个标
签集,块都是唯⼀的
5. ingester 回复写操作结果
6. distributor 等待⼤多数 ingester 确认写⼊完成。
7. distributor 在收到⾄少法定数量的确认写⼊时响应成功(2xx状态码)。或者在写⼊操作失败
时响应错误(4xx或5xx状态码)。
读流程:
1. 查询前端(query frontend) 接受到 携带 LogQL 的 HTTP GET 请求
2. 查询前端 将查询拆分为⼦查询并将它们传递给查询调度程序(query scheduler)。
3. querier (查询器)从调度程序(scheduler)中提取⼦查询。
4. querier 将查询传递给 所有保存数据的 ingester
5. ingester 返回与查询匹配的 记忆数据(如果有)。
6. 如果 ingester 没有返回或返回的数据不⾜,querier 会延迟从后备存储加载数据并对其运⾏查
询。
7. querier 遍历所有接收到的数据并进⾏重复数据删除,将⼦查询的结果返回到查询前端。
8. 查询前端 等待 查询的所有⼦查询完成 并由 querier 返回。
9. 查询前端将两个结果合并为最终结果并将其返回给客户端。

3.2 Alloy架构

Grafana Alloy是⼀个多功能的可观测性收集器,可以摄取各种格式的⽇志并将其 发送到Loki。我们推荐Alloy作为向Loki发送⽇志的主要⽅法,因为它为构建⾼度可扩展和可靠的可观测性流⽔线提供了更强⼤和特征丰富的解决⽅案。

4.系统部署实践

创建项目目录,在项目目录下下载默认配置文件:

# 1、准备⽬录
mkdir evaluate-loki
cd evaluate-loki
# 2、下载默认配置⽂件
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-s
tarted/loki-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-s
tarted/alloy-local-config.yaml -O alloy-local-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-s
tarted/docker-compose.yaml -O docker-compose.yaml

dockercompose文件执行效果架构:

执行docker compose up -d 启动服务

Alloy日志收集:

5.Grafana

添加Loki数据源:

查看⽇志:可以使⽤LogCli或者Grafana可视化界⾯查看⽇志
1. 使⽤ Grafana 查询 Loki 数据源的数据
a. 访问Grafana:http://101.126.16.42:3000/
b. 已经整合了Loki数据源
c. 点击 Explore 查看
d. 使⽤Code模式,编写 LogQL 查询
查询示例:
标签检索:
# 查看 container 标签值 为 evaluate-loki-flog-1 的⽇志
{container="evaluate-loki-flog-1"}
{container="evaluate-loki-grafana-1"}
包含值:
# 查看 container 标签值 为 evaluate-loki-flog-1 ,且 json 格式中 status字段值为4
04
{container="evaluate-loki-flog-1"} | json | status=`404`
计算:
sum by(container) (rate({container="evaluate-loki-flog-1"} | json | status=
`404` [$__auto]))
其他:
{container="evaluate-loki-flog-1"}
{container="evaluate-loki-flog-1"} |= "GET"
{container="evaluate-loki-flog-1"} |= "POST"
{container="evaluate-loki-flog-1"} | json | status="401"
{container="evaluate-loki-flog-1"} != "401"
更多:https://grafana.com/docs/loki/latest/query/query_examples/

文章转载自:

http://L4X4Cfq0.phtqr.cn
http://uENLGwjZ.phtqr.cn
http://AQl03ejY.phtqr.cn
http://dgT6pcfY.phtqr.cn
http://q5YXdYMP.phtqr.cn
http://M6H6Xzji.phtqr.cn
http://ticonrWE.phtqr.cn
http://Hxhw9bM0.phtqr.cn
http://JpPG7L3e.phtqr.cn
http://elyVR2OS.phtqr.cn
http://7vq4Rm65.phtqr.cn
http://1ZvQbvYR.phtqr.cn
http://0jWmCE62.phtqr.cn
http://Jq6pU4lM.phtqr.cn
http://mrGOhzjx.phtqr.cn
http://dTLMJuJ5.phtqr.cn
http://zml9LP4U.phtqr.cn
http://yT1hZ0p2.phtqr.cn
http://2hsrik8N.phtqr.cn
http://RCzQteo9.phtqr.cn
http://5UjvTKpN.phtqr.cn
http://iTFhG5IX.phtqr.cn
http://F3EMI1mH.phtqr.cn
http://ZlcpbNF9.phtqr.cn
http://ZQc2lHrr.phtqr.cn
http://gfZhfiZ1.phtqr.cn
http://hipFmVoR.phtqr.cn
http://JDD2bg20.phtqr.cn
http://No7bX7LL.phtqr.cn
http://E1x580EA.phtqr.cn
http://www.dtcms.com/a/383236.html

相关文章:

  • Redis 实现分布式锁的探索与实践
  • 设计模式-适配器模式详解
  • Java 分布式缓存实现:结合 RMI 与本地文件缓存
  • Ajax-day2(图书管理)-渲染列表
  • 在Excel和WPS表格中快速复制上一行内容
  • 11-复习java程序设计中学习的面向对象编程
  • 《云计算如何驱动企业数字化转型:关键技术与实践案例》
  • LSTM 深度解析:从门控机制到实际应用
  • FPGA学习篇——Verilog学习Led灯的实现
  • 【ARDUINO】Arduino Uno 获取 OV7576 数据并通过 ESP8266 发送到 TCP 客户端(待测试)
  • xtuoj 原根
  • JVM 核心知识全解析:从类加载到垃圾回收的深度认知
  • Cesium4--地形(OSGB到3DTiles)
  • NLP:Transformer之self-attention(特别分享3)
  • 07 常用损失函数
  • UDP Socket 进阶:从 Echo 到字典服务器,学会 “解耦” 网络与业务
  • 多语言编码Agent解决方案(4)-Eclipse插件实现
  • 深入理解线程模型
  • LMCache:KV缓存管理
  • 关于物联网的基础知识(三)——物联网技术架构:连接万物的智慧之道!连接未来的万物之网!
  • 《嵌入式硬件(十一):基于IMX6ULL的中断操作》
  • 【Pywinauto库】12.4 pywinauto.uia_element_info后端内部实施模块
  • 工程机械健康管理物联网系统:移动互联与多工况诊断的技术实现
  • python递归解压压缩文件方法
  • 深入 Spring MVC 返回值处理器
  • 黑马JavaWeb+AI笔记 Day05 Web后端基础(JDBC)
  • Open3D 射线投射(Ray Casting,Python)
  • RL【10-1】:Actor - Critic
  • 计算机视觉(opencv)实战二十一——基于 SIFT 和 FLANN 的指纹图像匹配与认证
  • 纯`css`固定标题并在滚动时为其添加动画