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

简介: Loki是一个水平可扩展、高可用的多租户日志聚合系统,其设计灵感来自Prometheus。与Prometheus不同,Loki专注于日志处理,采用推送方式收集日志,并通过标签索引而非日志内容实现高效查询。其架构包含Distributor、Ingester和Querier等组件,分别负责请求分发、日志存储和查询处理。Loki将日志数据压缩存储在对象存储中,大大降低了成本。部署时,可结合Grafana Alloy作为日志收集器,并通过Grafana可视化界面或LogQL查询语言进行日志检索和分析。系统支持多种查

 1.日志系统介绍

日志系统:

GLA、ELK、数仓

⽇志处理流程:采集 ==> 存储 ==> 检索 ==> 可视化

日志系统工作流程:

image.gif 编辑

image.gif 编辑

日志平台的目的:统一聚合分散的日志

日志平台搭建方案:

image.gif 编辑

ELK:ElasticSearch:存储日志(日志内容进行分词,日志所有数据都可以被检索)

Loki:轻量级日志聚合平台

image.gif 编辑

LAG工作逻辑:

image.gif 编辑

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

image.gif 编辑

2.Loki

2.1 介绍

Loki 是⼀个可⽔平扩展、⾼可⽤性、多租户⽇志聚合系统,其灵感来⾃Prometheus。Loki 与 Prometheus 的不同之处在于,它专注于⽇志⽽不是指标,并通过推送⽽不是拉取来收集⽇志。

Loki 的设计⾮常经济⾼效,并且具有⾼度可扩展性。与其他⽇志系统不同,Loki不会对⽇志内容进⾏索引,⽽只会对⽇志的元数据进⾏索引,将其作为每个⽇志流的⼀组标签。

⽇志流是⼀组共享相同标签的⽇志。标签帮助Loki在您的数据存储中找到⽇志流,因此拥有⼀组⾼质量的标签是⾼效查询执⾏的关键。

然后,⽇志数据被压缩并以块的形式存储在对象存储中,如亚⻢逊简单存储服务(S3)或⾕歌云存储(GCS),甚⾄为了开发或概念验证,存储在⽂件系统上。⼩索引和⾼度压缩的块简化了操作,显著降低了Loki的成本。

2.2 日志结构

Loki数据存储格式:

index:索引;存储Loki标签,如⽇志级别、来源、分组

chunk:块;存储⽇志条⽬本身

image.gif 编辑

Agent:

代理或客户端,例如Grafana Alloy或Promtail,随Loki⼀起分发。代理抓取⽇志,通过添加标签将⽇志转换为流,并通过HTTP API将流推送到Loki。

Loki主服务器:

负责摄取和存储⽇志以及处理查询。它可以部署在三种不同的配置中,有关更

多信息,请参阅部署模式。

Grafana:

⽤于查询和显示⽇志数据。您还可以使⽤LogCLI或直接使⽤Loki API从命令⾏ 查询⽇志。

3.系统架构

3.1 Loki架构:

image.gif 编辑

image.gif 编辑

image.gif 编辑

写流程:

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架构

image.gif 编辑

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

image.gif

dockercompose文件执行效果架构:

image.gif 编辑

执行docker compose up -d 启动服务

Alloy日志收集:

image.gif 编辑

5.Grafana

添加Loki数据源:

image.gif 编辑

查看⽇志:可以使⽤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"}

image.gif

包含值:

# 查看 container 标签值 为 evaluate-loki-flog-1 ,且 json 格式中 status字段值为4
04
{container="evaluate-loki-flog-1"} | json | status=`404`

image.gif

计算:

sum by(container) (rate({container="evaluate-loki-flog-1"} | json | status=
`404` [$__auto]))

image.gif

其他:

{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"

image.gif

更多:https://grafana.com/docs/loki/latest/query/query_examples/


相关文章
|
2月前
|
Kubernetes 监控 Cloud Native
OpenTelemetry + 云监控 2.0:打造你的云原生全栈可观测
本文介绍如何通过 OpenTelemetry 与阿里云云监控 2.0 构建云原生全栈可观测体系,实现从应用到基础设施的端到端可观测能力,为故障快速定位和 AIOps 智能运维奠定基础。
337 18
|
监控 Docker 容器
【Docker】9、Docker-Compose安装轻量级分布式日志服务Graylog
Graylog 是一个开源的日志聚合、分析、审计、展现和预警工具。在功能上来说,和 ELK 类似,但又比 ELK 要简单很多。
2887 1
【Docker】9、Docker-Compose安装轻量级分布式日志服务Graylog
|
5月前
|
Kubernetes 数据可视化 Perl
【k8s-1.34.2安装部署】八.metric-server-0.8.0安装
本章介绍metrics-server的安装与配置,用于采集K8s集群中节点和Pod的CPU、内存指标,支撑Dashboard及xkub等工具的资源使用可视化。通过修改配置启用 insecure-tls 并替换为阿里云镜像,快速完成部署,安装后可通过`kubectl top`命令验证。
746 0
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
5493 70
Grafana Loki,轻量级日志系统
|
5月前
|
存储 缓存 监控
从GC日志小白到分析大神:GCEasy实战全攻略
GCEasy是Java GC日志分析利器,支持多种垃圾收集器,通过可视化报表与智能诊断,帮助开发者快速定位内存泄漏、GC频繁等问题。本文结合实战案例,详解其原理、使用方法及性能优化策略,提升系统稳定性与并发能力。
845 1
|
8月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
747 122
基于docker搭建监控系统&日志收集
|
8月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
518 16
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
716 1
|
Ubuntu 前端开发 Linux
Ubuntu防火墙命令大集合
【7月更文挑战第13天】
1477 1
Ubuntu防火墙命令大集合
|
应用服务中间件 nginx Docker
[loki]轻量级日志聚合系统loki快速入门
[loki]轻量级日志聚合系统loki快速入门
1180 5