loki.source.file
loki.source.file
从文件中读取日志条目并将它们转发到其他 loki.*
组件。
您可以通过指定不同的标签来指定多个 loki.source.file
组件。
注意
loki.source.file
不处理文件发现。您可以使用local.file_match
进行文件发现。有关更多信息,请参阅 文件通配符 例子。
用法
loki.source.file "<LABEL>" {
targets = <TARGET_LIST>
forward_to = <RECEIVER_LIST>
}
参数
该组件针对每个指定的 targets
启动一个新的读取器,并将日志条目广播到 forward_to
传入的接收者列表。
loki.source.file
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要读取的文件列表。 | 是 | |
forward_to | list(LogsReceiver) | 要发送日志条目的接收者列表。 | 是 | |
encoding | string | 读取文件时转换的编码。 | "" | 否 |
tail_from_end | bool | 如果在存储位置找不到时,是否从日志文件末尾读取。 | false | 否 |
legacy_positions_file | string | 允许从旧位置文件转换。 | "" | 否 |
的 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_delay | duration | 在开始从新压缩文件读取之前等待的时间。 | 0 | 否 |
格式 | string | 压缩格式。 | 是 |
如果您在正在抓取的文件夹下压缩文件,loki.source.file
可能在您完成压缩之前尝试摄取您的文件。为了避免这种情况,选择一个足够长的initial_delay
。
当前支持的压缩格式有
gz
- 用于Gzipz
- 用于zlibbz2
- 用于bzip2
组件一次只能支持一种压缩格式。要处理多个格式,必须创建多个组件。
file_watch block
该file_watch
block配置了多久从磁盘轮询日志文件一次以便查找更改。以下参数被支持
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
min_poll_frequency | duration | 查找文件的最小频率。 | 250毫秒 | 否 |
max_poll_frequency | duration | 查找文件的最大频率。 | 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
组件。
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
模式匹配的文件中收集日志条目。当文件出现或消失时,目标列表将相应更新。
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
模式的压缩文件中收集日志条目。
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
可以接受以下组件的参数
- 导出目标的组件
- 导出LokiLogsReceiver的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅相关文档以获取更多详细信息。