Loki-使用Prometheus方法收集日志

敬礼,哈布里沃派!期待着新的DevOps实践和工具课程的开始,我们已经为您准备了有趣的材料的翻译。





本文是Loki的简要介绍。Loki项目由Grafana支持,旨在集中收集(从服务器或容器中)日志。

Loki的主要灵感来源是普罗米修斯,他的想法是应用其日志管理方法:

  • 使用标签(标签)进行数据存储
  • 资源消耗低

我们将回到普罗米修斯的原则,并举例说明其在Kubernetes中的用法。

关于普罗米修斯的几句话


要完全了解Loki的工作原理,重要的是退后一步,回顾一下普罗米修斯。

Prometheus的显着特征之一是(通过导出器)从收集点中提取指标,并将其存储在TSDB(时间序列数据库,时间序列数据库)中,并以标签形式添加元数据。

为什么有必要


最近,Prometheus已成为容器和Kubernetes领域的事实上的标准:它的安装非常简单,并且Kubernetes集群最初具有Prometheus的终结点。Prometheus还可以从容器中部署的应用程序检索指标,同时保留某些标签。因此,监视应用程序非常容易实现。

不幸的是,仍然没有用于管理日志的交钥匙解决方案,您必须为自己找到一个解决方案:

  • 用于集中日志的托管云服务(AWS,Azure或Google)
  • 作为服务监视服务(例如,Datadog)
  • 创建您自己的日志收集服务。

对于第三个选项,我传统上使用Elasticsearch,尽管我并不总是对此感到满意(特别是它的严重性和设置的复杂性)。

Loki旨在根据以下原则简化实施:

  • 上手容易
  • 消耗很少的资源
  • 独立工作,无需任何特殊维护
  • 补充Prometheus以帮助调查错误

但是,通过一些折衷可以实现这种简单性。其中之一是不索引内容。因此,文本搜索不是非常有效或丰富,并且不允许统计文本内容。但是由于Loki希望成为grep的一部分并补充Prometheus,所以这不是缺陷。

事故调查


为了更好地理解Loki为什么不需要索引,让我们回到Loki开发人员使用的事件调查方法:


1 Alert→2仪表板→3 Adhoc查询→4 Log Aggregation→5 Distributed Tracing→6 Fix!
(1警告→2仪表板→3临时查询→4日志聚合→5分布式跟踪→6更正!)


这个想法是,我们会得到一些警报(Slack Notification,SMS等),然后:

  • Grafana
  • (, Prometheus)
  • (, Elasticsearch)
  • , (Jaeger, Zipkin .)
  • , , .

在这里,对于Grafana + Prometheus + Elasticsearch + Zipkin堆栈,您将不得不使用四个不同的工具。为了减少时间,最好使用一种工具执行所有这些步骤:Grafana。值得注意的是,此研究方法自版本6起已在Grafana中实施。因此,可以直接从Grafana访问Prometheus数据。


在Prometheus和Loki之间拆分的Explorer屏幕

在此屏幕上,您可以使用拆分屏幕概念查看与Prometheus指标相关的Loki日志。从6.5版开始,Grafana允许您处理Loki日志条目中的跟踪ID,以跟踪指向您喜欢的分布式跟踪工具(Jaeger)的链接。

Loki本地测试


在本地测试Loki的最简单方法是使用docker-compose。docker-compose文件位于Loki存储库中。您可以使用以下命令获取存储库git

$ git clone https://github.com/grafana/loki.git


然后,您需要转到生产目录:

$ cd production

之后,您可以获得最新版本的Docker映像:

$ docker-compose pull

最后,使用以下命令启动Loki堆栈:

$ docker-compose up

洛基建筑


这是Loki体系结构的小图:Loki体系结构的


原理

Web客户端在服务器上启动应用程序,Promtail收集日志并将其发送给Loki,Web客户端还将元数据发送给Loki。Loki将所有内容汇总并转移到Grafana。
Loki已启动并正在运行。要查看可用的组件,请运行以下命令:

$ docker ps


对于全新安装的Docker,该命令应返回以下结果:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

我们看到以下组件:

  • Promtail:用于集中日志的代理
  • Grafana:著名的仪表盘工具
  • Loki:数据集中化守护进程

在传统基础架构(例如,基于虚拟机)的框架内,必须在每台计算机上部署Promtail代理。Grafana和Loki可以安装在同一台计算机上。

Kubernetes部署


在Kubernetes上安装Loki组件的步骤如下:

  • daemonSet用于在服务器群集中的每台计算机上部署Promtail代理
  • 部署Loki
  • 最后是Grafana的部署。

幸运的是,Loki是作为Helm软件包提供的,因此易于部署。

通过头盔安装


头盔应已安装。可以从项目的GitHub存储库下载。通过解压缩与您的体系结构相匹配的档案并将其添加到Helm中,可以进行安装$PATH

注意: Helm 3.0.0版是最近发布的。由于其中有很多更改,建议读者稍等一会再使用


为头盔添加源


第一步是使用以下命令添加“ loki”存储库:

$ helm add loki https://grafana.imtqy.com/loki/charts

之后,您可以搜索名为“ loki”的软件包:

$ helm search loki

结果:

loki/loki       0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2  v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail   0.13.1 v0.4.0 Responsible for gathering logs and...

这些软件包具有以下功能:

  • loki / loki软件包仅与Loki服务器匹配
  • loki / fluent-bit软件包允许您使用fluent-bin部署DaemonSet来收集日志而不是Promtail
  • loki / promtail包含收集代理日志文件
  • loki / loki-stack软件包使您可以立即将Prokitail与Loki一起部署。

安装Loki


要将Loki部署到Kubernetes,请在“监视”名称空间中运行以下命令:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

要保存到磁盘,请添加选项 --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack \
              --namespace monitoring \
              --set loki.persistence.enabled=true

注意:如果要同时部署Grafana,请添加参数--set grafana.enabled = true

运行此命令时,应获得以下输出:

LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.

查看“监视”名称空间中的炉床状态,我们会看到一切都在扩展:

$ kubectl -n monitoring get pods -l release=loki

结果:

NAME                 READY  STATUS   RESTARTS  AGE
loki-0               1/1    Running  0         147m
loki-promtail-9zjvc  1/1    Running  0         3h25m
loki-promtail-f6brf  1/1    Running  0         11h
loki-promtail-hdcj7  1/1    Running  0         3h23m
loki-promtail-jbqhc  1/1    Running  0         11h
loki-promtail-mj642  1/1    Running  0         62m
loki-promtail-nm64g  1/1    Running  0         24m

所有Pod正在运行。现在是时候做一些测试了!

连接到Grafana


要在Kubernetes下连接到Grafana,您需要在其底部打开一个隧道。下面是打开Grafana壁炉的端口3000的命令:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

另一个重要点是需要恢复Grafana管理员密码。密码在base64格式loki-grafana的字段.data.admin-user保密

要还原它,必须运行以下命令:

$ kubectl -n monitoring get secret loki-grafana \
 --template '{{index .data "admin-password" | base64decode}}'; echo

使用此密码和默认管理员帐户(admin)。

在Grafana中定义Loki数据源


首先,请确保已创建Loki数据源(配置/数据源)。
这是一个示例:


为Loki设置数据源的示例

通过单击“测试”,您可以检查与Loki的连接。

向Loki提出请求


现在转到Grafana的“探索”部分。当从容器接收日志时,Loki会从Kubernetes添加元数据。因此,可以查看特定容器的日志。

:例如,以下查询提示用于选择容器日志{container_name = "promtail"}
另外,请确保在此处选择您的Loki数据源。

该请求将返回容器的活动,如下所示:


Grafana中的请求结果

添加到仪表板


从Grafana 6.4开始,您可以将有关日志的信息直接放在仪表板上。之后,用户将能够在其站点上的请求数量与应用程序跟踪之间快速切换。

以下是实现此交互的仪表板示例具有Prometheus指标和Loki日志的仪表板


示例

未来loki


我从5月/ 6月开始使用Loki的0.1版本。今天,版本1已经发布,甚至是1.1和1.2。

诚然,版本0.1不够稳定。但是0.3已经显示出真正的成熟迹象,下一个版本(0.4,然后是1.0)仅增强了这种印象。

在1.0.0之后,没有人可以没有任何借口不使用这个出色的工具。

进一步的改进不应该与Loki有关,而应与出色的Grafana集成。实际上,Grafana 6.4已与仪表板很好地集成。

最近发布的Grafana 6.5通过自动识别JSON格式的日志内容进一步改善了此集成。

以下视频显示了此机制的一个小示例:


使用Grafana中显示的Loki字符串

可以使用JSON字段之一,例如:

  • 外部工具链接
  • 过滤日志内容

例如,您可以单击traceId转到Zipkin或Jaeger。

传统上,我们一直在等待您的评论,我们邀请您参加一个公开网络研讨会,我们将讨论2019年DevOps行业的发展情况,并讨论2020年的可能发展道路。

Source: https://habr.com/ru/post/undefined/


All Articles