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 API与loki_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
Loki相关资源
开始伐木和Grafana Loki (3 / 4)
加入本次网络研讨会,了解为什么在整个开发生命周期中相关的度量和日志是至关重要的,以及Loki如何帮助降低日志记录成本和操作开销。
洛基日志:基本配置设置
本次网络研讨会的重点是Grafana Loki配置,包括代理Promtail和Docker;洛基服务器;以及流行的后端洛基存储。
测井和Grafana的可观察性
了解如何使用Grafana和Grafana的日志应用程序Loki来利用、管理和可视化日志事件。