;客户;Promtail

Promtail

Promtail是一个代理,它将本地日志的内容发送到私有的Grafana Loki实例或Grafana云.它通常被部署到需要监控应用程序的每台机器上。

它主要是:

  • 发现目标
  • 为日志流添加标签
  • 把他们推到洛基实例。

目前,Promtail可以跟踪两个来源的日志:本地日志文件和systemd日志(仅在AMD64机器上)。

日志文件发现

在Promtail将日志文件中的任何数据发送到Loki之前,它需要找到有关其环境的信息。具体来说,这意味着发现向需要监视的文件发出日志行的应用程序。

Promtail借用了同样的方法来自Prometheus的服务发现机制,尽管它目前只支持静态而且kubernetes服务发现。这种限制是由于Promtail作为守护进程部署到每个本地计算机,因此不会发现来自其他计算机的标签。kubernetes服务发现从Kubernetes API服务器获取所需的标签静态通常涵盖所有其他用例。

就像普罗米修斯一样,promtail使用scrape_configs节。relabel_configs允许对摄取什么、删除什么以及将最终元数据附加到日志行进行细粒度控制。请参阅文档配置Promtail欲知详情。

支持压缩文件

Promtail现在支持通过一种依赖于文件扩展名的机制来摄取压缩文件。如果发现的文件具有预期的压缩文件扩展名,Promtail就会这样做懒洋洋地解压缩文件并将解析后的数据推送给洛基。重要的细节如下:

  • 它依赖于\ n字符将数据分隔为不同的日志行。
  • 在压缩文件中,最大预期日志行为2MB字节。
  • 数据被解压缩为4096字节的块。即:它首先从压缩文件中获取一个4096字节的块并处理它。在处理这个块并将数据推送给Loki之后,它将获取以下4096字节,依此类推。
  • 它支持以下扩展:
    • . gz:数据将用原生Gunzip Golang pkg (包裹/ / gzip压缩
    • 还是z:数据将用本地Zlib Golang pkg (包裹/ / zlib压缩
    • bz2:数据将用原生Bzip2 Golang pkg (包裹/压缩/ bzip2
    • gz:解压后的数据与. gz扩展。然而,由于焦油将在压缩文件的开始处添加元数据,第一行将包含元数据和日志行.它在。/客户/ pkg / promtail /目标/文件/ decompresser_test.go
  • . zip扩展现在还不支持,因为它不支持Promtail要求的一些接口。我们计划在不久的将来增加对它的支持。
  • 解压是非常CPU密集型的,需要大量的CPU分配,特别是根据文件的大小。您可以预期垃圾收集运行的次数和CPU使用率会飙升,但不会出现内存泄漏。
  • 支持位置。这意味着,如果在解析和推送(例如)压缩文件数据的45%之后中断Promtail,那么可以期望Promtail从最后一个抓取的行开始恢复工作,并处理剩下的55%。
  • 由于解压和推送可以非常快,根据你压缩文件的大小,洛基将限速你的摄取。在这种情况下,您可以配置Promtail 's限制阶段放慢步伐或增加洛基的摄食限制
  • 日志旋转目前还不支持,主要是因为它要求我们修改Promtail以依赖于文件inode而不是文件名。如果你想看到对它的支持,请在Github上创建一个新的问题,并解释你的用例。
  • 如果你想看到这里没有列出的压缩协议的支持,请在Github上创建一个新的问题,并解释你的用例。

Loki Push API

Promtail还可以配置为从另一个Promtail或任何Loki客户端接收日志Loki Push APIloki_push_api刮配置。

以下是一些可能有用的例子:

  • 在复杂的网络基础设施中,许多机器都有出口是不可取的。
  • 使用Docker日志驱动程序,并希望提供一个复杂的管道或从日志中提取指标。
  • 无服务器设置,许多临时日志源想要发送到Loki,发送到Promtail实例use_incoming_timestamp== false可以避免乱序错误,并避免必须使用高基数标签。

接收Syslog日志

Syslog目标使用时,可以使用syslog协议将日志写入到所配置的端口。

AWS

如果您需要在Amazon Web Services EC2实例上运行Promtail,您可以使用我们的详细的教程

标记和解析

在服务发现期间,确定元数据(pod名称、文件名等),这些元数据可以作为标签附加到日志行,以便在Loki中查询日志时更容易识别。通过relabel_configs,发现的标签可以突变成所需的形式。

为了允许之后进行更复杂的过滤,Promtail不仅允许根据服务发现设置标签,还允许根据每个日志行的内容设置标签。的pipeline_stages可用于添加或更新标签、更正时间戳或完全重写日志行。请参阅相关文档管道欲知详情。

航运

一旦Promtail有了一组目标(即要读取的东西,如文件),并且所有标签都设置正确,它将开始从目标中跟踪(连续读取)日志。一旦足够多的数据被读入内存或在可配置的超时后,它将作为单个批处理被刷新到Loki。

当Promtail从源(如果配置了文件和systemd日志)读取数据时,它将跟踪它在位置文件中读取的最后一个偏移量。默认情况下,位置文件存储在/var/log/positions.yaml.在Promtail实例重新启动的情况下,位置文件帮助Promtail从它停止的地方继续读取。

API

Promtail提供了一个嵌入式web服务器,在/和以下API端点:

准备好/

当Promtail启动并运行时,该端点返回200,并且至少有一个工作目标。

GET /指标

这个端点返回Prometheus的Promtail指标。指观察Grafana Loki获取导出指标的列表。

提示web服务器配置

Promtail公开的web服务器可以在Promtail中配置.yaml配置文件:

http_listen_address: 127.0.0.1 http_listen_port: 9080