使用 Grafana Loki 在 Kubernetes 中进行日志聚合

好吧,我们所有人都已经使用 Grafana 有一段时间了。它允许您查询、可视化、提醒和探索您的指标,无论它们存储在哪里。事实上,我个人很喜欢几乎支持所有时间序列数据库 (TSDB) 数据的彩色仪表板。 Grafana 对各种输入源也有丰富的支持,如 Prometheus、InfluxDB、AWS Cloud Watch、Azure Monitor 等。但是日志聚合呢?你如何从你的应用程序中聚合你的日志?使用另一种解决方案,如 ELK、EFK 等。如果我告诉你日志聚合现在也可以由 Grafana 自己完成怎么办?是的,你没听错。 Grafana Labs 最近推出了名为 Grafana Loki 的日志聚合新解决方案。 Grafana Loki 是一组组件,可以组成一个功能齐全的日志堆栈。 Loki 的操作成本更低,而且可有效扩展。

图片来源:Grafana 实验室

整个故事是关于什么的? (TLDR)

  1. 了解 Grafana Loki 的架构和概念。

  2. 使用官方 helm chart 在 Kubernetes 集群上设置 Loki。

先决条件

  1. 一个 Kubernetes 集群(可以是 On-Prem、AKS、EKS、GKE、Kind)。

  2. Helm,kubectl安装。

本文未涉及的内容

  1. 如何建立基于生产的 Loki 集群。

  2. 如何使用 Loki 建立 HA 日志架构。

  3. 如何编写 LogQL 查询。

故事资源

  1. GitHub链接:https://github.com/pavan-kumar-99/medium-manifests

2.GitHub分支:grafana-loki

Grafana Loki 的架构和组件

Grafana Loki 拱门和组件

我们先来了解一下 Grafana Loki 的各个组件

**分发者:**分发者处理日志处理器和转发客户端写入的日志。您可以找到所有支持的客户端列表here。当分发器从客户端接收到流时,首先验证它们的正确性,分成批次,然后发送到多个摄取器。

示例客户:

a) 促销

b) 流利

c) 流利位

b)Logstash等......

Ingester: Ingester 服务负责将数据块发送到 S3、GCS 等长期存储后端。Ingester 验证收到的每个日志行的时间戳,保持严格的顺序。当持久存储提供程序发生刷新时,块会根据其租户、标签和内容进行哈希处理。这意味着具有相同数据副本的多个摄取者不会将相同的数据两次写入后备存储。

块存储: 块存储是 Loki 的长期数据存储。块存储包含以下数据。

  1. 块的索引。

  2. 用于块数据本身的键值 (KV) 存储。

支持的块存储列表可以在here上找到。一组模式用于将读取和写入块存储时使用的匹配器和标签集映射到索引上的适当操作。

**查询器:**查询器处理客户端的 LogQL 查询。 Loki 带有自己的查询语言,称为 LogQL。LogQL 可以被认为是聚合日志源的分布式 grep。这会从摄取器和长期存储中获取日志。查询器在回退到对后端存储运行相同的查询之前查询所有摄取器的内存中数据。查询器在内部对具有相同纳秒时间戳、标签集和日志消息的数据进行重复数据删除。

查询前端: 查询前端是一个可选服务,提供查询者的 API 端点,可用于加速读取路径。为了执行实际的查询,集群内仍然需要查询器服务。查询前端将较大的查询拆分为多个较小的查询,在下游查询器上并行执行这些查询,并将结果再次拼接在一起。查询前端还支持缓存度量查询结果并在后续查询中重用它们。缓存存储在 Loki 的缓存后端(目前是 Memcached、Redis 和内存缓存)。

洛基的操作模式

Loki 带有单进程模式,可在一个进程中运行所有必需的微服务。对于水平可扩展性,Loki 的微服务也可以分解成单独的进程,允许它们彼此独立扩展。在本文的范围内,我们将了解如何使用单进程模式设置 Loki。

安装Loki、Promtail、Prometheus Operator

我们将使用官方的 helm chart 来安装 Loki。 Loki stack helm chart 支持安装各种组件,如 promtail、fluentd、Prometheus 和 Grafana。但是,您可能已经在使用 Prometheus Operator,或者您可能已经安装了 Grafana。您可能只想附加您的 Grafana 数据源。对于日志处理器和转发客户端,您可能已经安装了 fluentd、fluentbit。对于更改,让我们在本文的范围内使用 Promtail。 Promtail 是一种将本地日志内容传送到 Loki 实例的代理。

让我们使用 helm 来安装以下堆栈。请注意,此设置可能不适合生产,但是,这最适合 POC 和 Loki 入门学习指南。

您现在应该会看到集群中安装了 Loki 堆栈。安装堆栈后,您应该会在集群中找到以下组件。

a) Loki 实例

b) 普罗米修斯警报管理器

c) Prometheus 节点导出器

d) Prometheus 推送网关

e) 普罗米修斯服务器

f) Promtail

! zoz100037](https://devpress-image.s3.cn-north-1.jdcloud-oss.com/a/caf919a2e0_1*m_Vcq4vVR1Mqi5woeNJpQQ.jpg)

Loki Stack 正在安装在 k8s 集群中

您现在可以执行上述命令(1 和 2)将 Loki 的 Grafana 服务类型从 ClusterIP 修补到 LoadBalancer,并获取 LoadBalancer 的 IP。

现在让我们从 Loki 创建的密钥(命令 3)中获取管理员用户名和密码。现在让我们打开浏览器并提供管理员凭据。

Grafana 数据源

您应该注意到 Loki 已经添加到 Grafana 的数据源中。我们现在很高兴在 Grafana 中看到新的日志记录控制台。兴奋的?现在就和我一起探索吧。

在 Grafana 控制台的 explore 部分下,您必须将 Datasource 更改为 Loki 才能获得像这样的 Log Browser 控制台

Loki 日志浏览器

在我们探索日志之前,我们应该首先了解 LogQL。LogQL 是 Loki 的 PromQL 启发的查询语言。查询就像分发grep以聚合日志源一样。 LogQL 使用标签和运算符进行过滤。示例 LogQL 查询

{containeru003d"query-frontend",namespaceu003d"loki-dev"} |u003d "metrics.go" |日志文件 |持续时间 > 10s 和吞吐量_mb < 500

现在让我们创建一个示例部署,它将在循环中回显“Hello”字符串。

来自示例 pod 的日志

现在让我们回到 Loki 日志浏览器并给出这个 LogQL 查询。

{appu003d"loki-medium-logs",namespaceu003d"default"}

其中应用程序是部署的标签之一,命名空间是命名空间的名称。

Grafana UI 中显示的日志

Hurrah,您还可以使用拆分选项从同一个 Grafana 控制台查看多个 LogQL 查询。

将日志浏览器拆分为多个窗口

您现在应该可以看到来自集群中所有命名空间以及集群中所有 Pod 的日志。您可以使用各种 LogQL 查询来聚合数据,还可以从日志查看器控制台进行流式传输。

用于未来记录的 ATB

清理

$ helm delete loki $ kubectl delete deploy loki-medium-logs

我希望这篇文章涵盖了如何开始使用 Grafana Loki 并将日志获取到 Grafana 日志查看器控制台。在尝试使用 Grafana Loki 时,请随时评论您的想法和您对 Grafana Loki 的最佳体验。

再次感谢您阅读我的文章。希望你喜欢它。以下是我的一些其他文章,您可能会感兴趣。

直到下一次...........

[

在 EKS 上使用 AWS Spot 实例运行 Apache Spark

使用 AWS Spot 实例有效节省 EKS 上的 Apache Spark 工作负载

媒体网

](/nerd-for-tech/running-apache-spark-on-eks-with-aws-spot-instances-f8ce91d319b9)

[

使用 Kubeless 在 Kubernetes 中实现无服务器

Kubernetes 中的无服务器使用 Kubeless

Kubernetes 中的无服务器使用 Kubelessmedium.com

](/nerd-for-tech/going-serverless-in-kubernetes-using-kubeless-8ef83b3f2f89)

[

深入了解灭霸-第一部分

使用 Thanos 和 Prometheus Operator 监控 Kubernetes 工作负载

媒体网

](/nerd-for-tech/deep-dive-into-thanos-part-i-f72ecba39f76)

[

Kubernetes 中的网络策略揭秘

使用 Cilium Editor 在 Kubernetes 中可视化网络策略

媒体网

](/nerd-for-tech/network-policies-demystified-in-kubernetes-d57fc2548043)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐