菜单
开源

loki.source.file

loki.source.file 从文件中读取日志条目并将它们转发到其他 loki.* 组件。

您可以通过指定不同的标签来指定多个 loki.source.file 组件。

注意

loki.source.file 不处理文件发现。您可以使用 local.file_match 进行文件发现。有关更多信息,请参阅 文件通配符 例子。

用法

alloy
loki.source.file "<LABEL>" {
  targets    = <TARGET_LIST>
  forward_to = <RECEIVER_LIST>
}

参数

该组件针对每个指定的 targets 启动一个新的读取器,并将日志条目广播到 forward_to 传入的接收者列表。

loki.source.file 支持以下参数

名称类型描述默认值必需
targetslist(map(string))要读取的文件列表。
forward_tolist(LogsReceiver)要发送日志条目的接收者列表。
encodingstring读取文件时转换的编码。""
tail_from_endbool如果在存储位置找不到时,是否从日志文件末尾读取。false
legacy_positions_filestring允许从旧位置文件转换。""

encoding 参数必须是有效的 IANA 编码 名称。如果没有设置,默认为 UTF-8。

当您想追踪大文件而无需读取其全部内容时,可以使用 tail_from_end 参数。设置为 true 时,只读取新日志,忽略现有的。

注意

当您从旧版本过渡时,使用 legacy_positions_file 参数。旧位置文件会被重写为新格式。此操作仅在位置文件不存在且 legacy_positions_file 有效时发生。配置成功转换后,legacy_positions_file 将被删除。如果您在 loki.source.file 前添加任何标签,位置文件转换将不起作用。旧位置文件在位置文件中没有任何标签的概念,因此转换假设没有标签。

loki.source.file 定义内部支持的以下块

层次结构名称描述必需
解压缩解压缩配置从压缩文件中读取日志。
文件监控文件监控配置应多久从磁盘轮询文件以检测更改。

解压缩块

解压缩 块包含从压缩文件读取日志的配置。以下参数受到支持

名称类型描述默认值必需
启用bool是否启用了解压缩。
initial_delayduration在开始从新压缩文件读取之前等待的时间。0
格式string压缩格式。

如果您在正在抓取的文件夹下压缩文件,loki.source.file可能在您完成压缩之前尝试摄取您的文件。为了避免这种情况,选择一个足够长的initial_delay

当前支持的压缩格式有

  • gz - 用于Gzip
  • z - 用于zlib
  • bz2 - 用于bzip2

组件一次只能支持一种压缩格式。要处理多个格式,必须创建多个组件。

file_watch block

file_watch block配置了多久从磁盘轮询日志文件一次以便查找更改。以下参数被支持

名称类型描述默认值必需
min_poll_frequencyduration查找文件的最小频率。250毫秒
max_poll_frequencyduration查找文件的最大频率。250毫秒

如果没有检测到文件更改,轮询频率会加倍,直到检测到文件更改或轮询频率达到max_poll_frequency

如果检测到文件更改,轮询频率将重置为min_poll_frequency

导出字段

loki.source.file不会导出任何字段。

组件健康状态

loki.source.file仅在提供无效配置时报告为不健康。

调试信息

loki.source.file为每个读取器公开一些目标级别的调试信息

  • 追踪的路径。
  • 读取器是否正在运行。
  • 在positions文件中的最后记录的读取偏移量。

调试指标

  • loki_source_file_read_bytes_total (计量):读取的字节数。
  • loki_source_file_file_bytes_total (计量):总数。
  • loki_source_file_read_lines_total (计数器):读取的行数。
  • loki_source_file_encoding_failures_total (计数器):编码失败数。
  • loki_source_file_files_active_total (计量):活动文件数。

组件行为

如果禁用了解压缩功能,该组件将连续监视和追踪文件。组件到达文件末尾后仍然保持活跃,并实时读取新条目,因为它们作为新条目附加到文件中。

targets列表中的每个元素都是一个称为labels的键值对集合。目标集可以是静态的,也可以是由服务发现组件定期动态提供的。特殊标签__path__必须一直存在,并且必须包含要读取的文件的绝对路径。

__path__值可用作为组件读取的每个日志条目的filename标签。所有以双下划线开头的其他标签都视为内部的,并且在传递给其他loki.*组件之前从日志条目中删除。

组件使用其数据路径,一个以域的完全限定名命名的目录,来存储其positions文件。positions文件存储读取偏移量,这样如果组件或Alloy重新启动,loki.source.file可以从前一个位置继续追踪。

数据路径位于通过--storage.path 命令行参数配置的目录内。

如果从targets列表中删除一个文件,其positions文件条目也将被删除。当它被重新添加时,loki.source.file将从开始处开始读取它。

示例

静态目标

此示例收集在targets参数中指定的文件中的日志条目,并将它们转发到loki.write组件。

alloy
loki.source.file "tmpfiles" {
  targets    = [
    {__path__ = "/tmp/foo.txt", "color" = "pink"},
    {__path__ = "/tmp/bar.txt", "color" = "blue"},
    {__path__ = "/tmp/baz.txt", "color" = "grey"},
  ]
  forward_to = [loki.write.local.receiver]
}

loki.write "local" {
  endpoint {
    url = "loki:3100/api/v1/push"
  }
}

文件通配符

此示例使用local.file_match组件从符合*.log模式匹配的文件中收集日志条目。当文件出现或消失时,目标列表将相应更新。

alloy

local.file_match "logs" {
  path_targets = [
    {__path__ = "/tmp/*.log"},
  ]
}

loki.source.file "tmpfiles" {
  targets    = local.file_match.logs.targets
  forward_to = [loki.write.local.receiver]
}

loki.write "local" {
  endpoint {
    url = "loki:3100/api/v1/push"
  }
}

解压缩

此例通过使用local.file_match组件和loki.source.file组件上的解压配置,从匹配*.gz模式的压缩文件中收集日志条目。

alloy

local.file_match "logs" {
  path_targets = [
    {__path__ = "/tmp/*.gz"},
  ]
}

loki.source.file "tmpfiles" {
  targets    = local.file_match.logs.targets
  forward_to = [loki.write.local.receiver]
  decompression {
    enabled       = true
    initial_delay = "10s"
    format        = "gz"
  }
}

loki.write "local" {
  endpoint {
    url = "loki:3100/api/v1/push"
  }
}

兼容组件

loki.source.file可以接受以下组件的参数

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅相关文档以获取更多详细信息。