Grafana Loki 入门

已发表: 2021-05-01

让我们学习一下多租户日志聚合系统 Grafana Loki 的基础知识。

在生产环境中,停机是不可接受的。 它可能导致业务收入和声誉的巨大损失。 但是,如果您有适当的日志记录和监控系统,您就会知道如何调试此类会导致停机的场景。

它有助于节省成本和识别未来可能发生的问题。

如今,各种规模的组织都在使用 DevOps 原则和工具。 容器和 Kubernetes 是最受欢迎的。 使用 Prometheus 可以非常有效地监控此类系统。 但是普罗米修斯落后的地方是日志记录部分。 它不提供集中式日志记录系统,而这正是 Loki 出现的地方。

什么是 Grafana Loki?

Grafana Loki 是一个多租户日志聚合系统,由 Grafana 于 2018 年启动,并在 Apache 2.0 许可下发布。 该系统是受 Prometheus 启发而开发的。 它主要与云提供商以及 Prometheus 和 Grafana 等工具一起使用。

Loki 类似于 ELK/EFK 堆栈,但它更易于设置和操作,具有更好的功能。 Loki 不索引日志的内容,而是索引时间戳和日志流的一组标签。 它使索引更小,从而简化操作并最终降低成本。

洛基福利

以下是在您的堆栈中使用 Loki 的好处:

  • 通过仅索引元数据,Loki 非常经济高效。 为全文处理运行索引需要更大的 RAM 实例,这非常昂贵。 将日志存储在像 S3 这样的对象存储上也使得它非常便宜。
  • 它通过使用tenantID 支持多租户,因此租户将他们的数据分开存储。
  • 您可以在本地运行 Loki 进行小规模操作,也可以轻松地横向扩展以进行大规模操作。
  • 它使用 dynamo 风格来确保读写操作的仲裁一致性。
  • 默认情况下,它配置为具有 3 个日志副本,以应对进程崩溃和日志丢失的突然退出的风险。 是的,它会产生一些额外的费用,但不会那么高,数据的完整性更为关键。
  • 可以轻松插入流行的工具,如 Kubernetes、Prometheus 和 Grafana 中的可视化。

洛基建筑

洛基建筑 - geekflare

Loki 架构具有三个组件—— PromtailLokiGrafana

Promtail 是一个代理,必须安装在运行您的应用程序或服务的每个节点上。 Promtail 的主要职责是发现目标,将标签附加到来自 pod 的 lo 流并将这些日志推送到 Loki 实例。 代理 promtail 从本地文件系统跟踪日志并将日志推送到 Loki 的中央服务器。 在此之后,您可以使用 Grafana 查询回您的日志。

Loki 用例

以下是使用 Loki 等日志记录系统的流行用例。

  • 商业智能:这是一个常青用例,从日志数据中创建可操作的洞察力总是非常有用的。 Loki 可以帮助理解日志数据,并使您能够为业务增长制定新的战略。 例如,通过组织的日志数据,它可以帮助您了解广告渠道的转化率。
  • 监控: Prometheus 在行业中被大量用于监控。 但是您可以通过使用 Loki 等工具监控日志来识别很多东西。 它可以通过查看日志并在超过阈值时发送警报来帮助您监控网站上的错误率。
  • 调试和故障排除: Loki 可以帮助 DevOps 团队快速回答一些问题,例如应用程序何时崩溃、崩溃的原因、崩溃前的最后状态等。
  • 网络安全:在过去几年中,对电子商务门户网站的网络攻击呈指数级增长。 在 Loki 的帮助下,您可以检查日志以识别组织系统中发生的任何威胁、问题或恶意活动。 如果黑客成功,Loki 仍然可以帮助取证团队详细了解系统中发生的情况。 这将帮助他们追查黑客。
  • 合规性:为了遵守行业法规,组织必须将其审计日志保留长达 7 年。 地方当局可以随时审核日志。 Loki 可以安全地存储您的审计日志。

安装 Loki 和 Promtail

让我们快速了解如何在 Grafana 上安装和可视化日志。 在本演示中,我将使用通用配置从/var/log/*log抓取/var/log/*log

转到 Loki 发布页面,向下滚动到 Assets,在这里您会找到多个 Loki 和 Promtail 包。 根据您使用的系统下载 Loki 软件包。 不要下载 cli 或 canary Loki 包。 我正在为我的 Ubuntu 系统下载loki-linux-amd64.zippromtail-linux-amd64.zip

下载完成后,解压Loki和Promtail的文件,放在一个目录下。

 [email protected]:~$ mkdir loki [email protected]:~$ mv loki-linux-amd64 promtail-linux-amd64 loki [email protected]:~$ cd loki/ [email protected]:~/loki$ ls loki-linux-amd64 promtail-linux-amd64

现在,下载 Loki 和 Promtail 的通用配置文件。

 [email protected]:~/loki$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml --2021-04-30 12:00:51-- https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1832 (1.8K) [text/plain] Saving to: 'loki-local-config.yaml' loki-local-config.yaml 100%[===============================================================================================>] 1.79K --.-KB/s in 0s 2021-04-30 12:00:51 (16.6 MB/s) - 'loki-local-config.yaml' saved [1832/1832]
 [email protected]:~/loki$ wget https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml --2021-04-30 12:05:07-- https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml Resolving github.com (github.com)... 13.234.210.38 Connecting to github.com (github.com)|13.234.210.38|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'promtail-local-config.yaml' promtail-local-config.yaml [ <=> ] 109.16K --.-KB/s in 0.002s 2021-04-30 12:05:08 (66.8 MB/s) - 'promtail-local-config.yaml' saved [111779]
 [email protected]:~/loki$ ls loki-linux-amd64 loki-local-config.yaml promtail-linux-amd64 promtail-local-config.yaml

要启动 Loki,请使用 Loki 配置文件运行以下命令。 这将启动 Loki 并在终端中显示 Loki 日志。

 [email protected]:~/loki$ ./loki-linux-amd64 -config.file=loki-local-config.yaml level=info ts=2021-04-30T16:08:37.990311491Z caller=main.go:130 msg="Starting Loki" version="(version=2.2.1, branch=HEAD, revision=babea82e)" level=info ts=2021-04-30T16:08:37.990856871Z caller=server.go:229 http=[::]:3100 grpc=[::]:9096 msg="server listening on addresses" level=info ts=2021-04-30T16:08:37.991613443Z caller=shipper_index_client.go:100 msg="starting boltdb shipper in 0 mode" level=info ts=2021-04-30T16:08:37.992568288Z caller=mapper.go:38 msg="cleaning up mapped rules directory" path=/tmp/loki/rules-temp level=error ts=2021-04-30T16:08:37.992623632Z caller=mapper.go:42 msg="unable to read rules directory" path=/tmp/loki/rules-temp err="open /tmp/loki/rules-temp: no such file or directory" level=info ts=2021-04-30T16:08:37.993520927Z caller=table_manager.go:171 msg="uploading tables" level=info ts=2021-04-30T16:08:37.993941099Z caller=module_service.go:59 msg=initialising module=store level=info ts=2021-04-30T16:08:37.994011839Z caller=module_service.go:59 msg=initialising module=memberlist-kv level=info ts=2021-04-30T16:08:37.99412775Z caller=module_service.go:59 msg=initialising module=server level=info ts=2021-04-30T16:08:37.994379648Z caller=module_service.go:59 msg=initialising module=ingester level=info ts=2021-04-30T16:08:37.994415984Z caller=ingester.go:241 msg="recovering from checkpoint"

要启动 Promtail,请使用 Promtail 配置文件运行以下命令。 需要 Promtail 才能将日志导入 Loki。

 [email protected]:~/loki$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml level=info ts=2021-04-30T16:35:52.775998059Z caller=server.go:229 http=[::]:9080 grpc=[::]:42557 msg="server listening on addresses" level=info ts=2021-04-30T16:35:52.776283661Z caller=main.go:112 msg="Starting Promtail" version="(version=2.2.1, branch=HEAD, revision=babea82e)" level=info ts=2021-04-30T16:35:57.776226323Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}" ts=2021-04-30T16:35:57.776902427Z caller=log.go:124 level=info msg="Seeked /var/log/fontconfig.log - &{Offset:11055 Whence:0}" level=info ts=2021-04-30T16:35:57.776983546Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/auth.log level=info ts=2021-04-30T16:35:57.777009023Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/fontconfig.log ts=2021-04-30T16:35:57.777094698Z caller=log.go:124 level=info msg="Seeked /var/log/lastlog - &{Offset:0 Whence:0}" ts=2021-04-30T16:35:57.777712594Z caller=log.go:124 level=info msg="Seeked /var/log/apport.log - &{Offset:0 Whence:0}" ts=2021-04-30T16:35:57.778200383Z caller=log.go:124 level=info msg="Seeked /var/log/alternatives.log - &{Offset:456 Whence:0}" ts=2021-04-30T16:35:57.780467419Z caller=log.go:124 level=info msg="Seeked /var/log/syslog - &{Offset:56911 Whence:0}" level=info ts=2021-04-30T16:35:57.780646032Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/kern.log level=info ts=2021-04-30T16:35:57.781289004Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}" level=info ts=2021-04-30T16:35:57.787770104Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/grafana/grafana.log ts=2021-04-30T16:35:57.782276009Z caller=log.go:124 level=info msg="Seeked /var/log/grafana/grafana.log - &{Offset:0 Whence:0}"

使用 Loki 和 Grafana 可视化日志

Grafana 为 Loki 提供内置支持。 Loki 已经存在于 Grafana 的数据源中。

步骤 1:转到 Grafana 配置并单击“数据源”。

格拉法纳

第 2 步:在数据源中,您可以按名称或类型搜索源。

配置

第 3 步:按名称 Loki 搜索。 你可以看到这个数据源已经存在于 Grafana 中。 单击选择。

添加洛基

第 4 步:输入您要为数据源提供的名称,并将http://localhost:3100 (如果 Loki 在与 Grafana 不同的服务器上运行,则将其更改为服务器 IP)在 URL 中,因为我们已在端口上启动 Loki 3100。

洛基数据源

单击底部的“测试并保存”按钮。 如果您已正确完成 Loki 设置,您将收到以下绿色框中显示的消息。

保存并测试

第 5 步:单击左侧的“探索”选项卡。 从数据源选择下拉菜单中选择 Loki。 现在,我想可视化 Grafana 日志的活动。 为此,您需要在日志浏览器中添加查询{filename="/var/log/grafana/grafana.log"} 。 下面的绿条是日志文件中的事件条目。

格拉法纳日志

您可以选择希望可视化显示在仪表板上的时间范围,还可以设置查询的刷新间隔,之后查询将再次运行。 要查看日志的更多详细信息,请向下滚动并单击其中一个日志条目,它将提供与日志相关的各种信息。

详细日志

看起来很美是不是?

所以,这就是开始。 我强烈建议您进一步查看以下网络研讨会视频,该视频解释了 Loki 的可观察性。

结论

分布式系统由许多应用程序或微服务组成,每个应用程序或微服务都有大量的日志。 您需要一种经济高效的方法来收集、存储和使用日志。 Loki 是此类情况的完美解决方案。 事实上,通过将 Loki 集成到您的生产环境中,您可以减少大约 75% 的日志记录和监控成本。

Loki 也可通过 Grafana Cloud 获得,如果您不想完成安装过程,最好尝试一下。

接下来,了解 Grafana Tempo。