Promtail 配置文件说明


转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492163&idx=1&sn=56b26aa387ccacdf0203d8897ba58eb6&chksm=fdbaed5ecacd64481cff18af7f8251a1b89152afd6ea19f3bb3870202cb275fa1292c924f303&cur_album_id=1837018771652149250&scene=190#rd

Promtail 是负责收集日志发送给 loki 的代理程序,Promtail 默认通过一个 config.yaml 文件进行配置,其中包含 Promtail 服务端信息、存储位置以及如何从文件中抓取日志等配置。

要指定加载哪个配置文件,只需要在命令行下通过 -config.file 参数传递 YAML 配置文件即可。此外我们还可以通过在配置文件中使用环境变量引用来设置需要的配置,但是需要在命令行中配置 -config.expand-env=true

然后可以使用 ${VAR} 来配置,其中 VAR 是环境变量的名称,每个变量的引用在启动时被环境变量的值替换,替换是区分大小写的,而且在 YAML 文件被解析之前发生,对未定义变量的引用将被替换为空字符串,除非你指定了一个默认值或自定义的错误文本,要指定一个默认值:

${VAR:default_value}

其中 default_value 是在环境变量未定义的情况下要使用的默认值。
默认的 config.yaml 配置文件支持的内容格式为:

# 配置 Promtail 服务端
[server: ]

# 描述 Promtail 如何连接到 Loki 的多个实例,向每个实例发送日志。
# WARNING:如果其中一个远程 Loki 服务器未能回应或回应时出现任何可重试的错误,这将影响其他配置的远程 Loki 服务器发送日志。
# 发送是在单线程上完成的!
# 如果你想向多个远程 Loki 实例发送,一般建议并行运行多个  promtail 客户端。
clients:
  - []

# 描述了如何将读取的文件偏移量保存到磁盘上
[positions: ]

# 抓取日志配置
scrape_configs:
  - []

# 配置被 watch 的目标如何 tailed
# Configures how tailed targets will be watched.
[target_config: ]

server

server 属性配置了 Promtail 作为 HTTP 服务器的行为。

# 禁用 HTTP 和 GRPC 服务
[disable:  | default = false]

# HTTP 服务监听的主机
[http_listen_address: ]

# HTTP 服务监听的端口(0表示随机)
[http_listen_port:  | default = 80]

# gRPC 服务监听主机
[grpc_listen_address: ]

# gRPC 服务监听的端口(0表示随机)
[grpc_listen_port:  | default = 9095]

# 注册指标处理器
[register_instrumentation:  | default = true]

# 优雅退出超时时间
[graceful_shutdown_timeout:  | default = 30s]

# HTTP 服务读取超时时间
[http_server_read_timeout:  | default = 30s]

# HTTP 服务写入超时时间
[http_server_write_timeout:  | default = 30s]

# HTTP 服务空闲超时时间
[http_server_idle_timeout:  | default = 120s]

# 可接收的最大 gRPC 消息大小
[grpc_server_max_recv_msg_size:  | default = 4194304]

# 可发送的最大 gRPC 消息大小
[grpc_server_max_send_msg_size:  | default = 4194304]

# 对 gRPC 调用的并发流数量的限制 (0 = unlimited)
[grpc_server_max_concurrent_streams:  | default = 100]

# 只记录给定严重程度或以上的信息,支持的值:[debug, info, warn, error]
[log_level:  | default = "info"]

# 所有 API 路由服务的基本路径(e.g., /v1/).
[http_path_prefix: ]

# 目标管理器检测 promtail 可读的标志,如果设置为 false 检查将被忽略
[health_check_target:  | default = true]

client

client 属性配置了 Promtail 如何连接到 Loki 的实例。

# Loki 正在监听的 URL,在 Loki 中表示为 http_listen_address 和 http_listen_port
# 如果 Loki 在微服务模式下运行,这就是 Distributor 的 URL,需要包括 push API 的路径。
# 例如:http://example.com:3100/loki/api/v1/push
url: 

# 默认使用的租户 ID,用于推送日志到 Loki。
# 如果省略或为空,则会假设 Loki 在单租户模式下运行,不发送 X-Scope-OrgID 头。
[tenant_id: ]

# 发送一批日志前的最大等待时间,即使该批次日志数据未满。
[batchwait:  | default = 1s]

# 在向 Loki 发送批处理之前要积累的最大批处理量(以字节为单位)。
[batchsize:  | default = 102400]

# 如果使用了 basic auth 认证,则需要配置用户名和密码
basic_auth:
  [username: ]
  [password: ]
  # 包含basic auth认证的密码文件
  [password_file: ]

# 发送给服务器的 Bearer token
[bearer_token: ]

# 包含 Bearer token 的文件
[bearer_token_file: ]

# 用来连接服务器的 HTTP 代理服务器
[proxy_url: ]

# 如果连接到一个 TLS 服务器,配置 TLS 认证方式。
tls_config:
  # 用来验证服务器的 CA 文件
  [ca_file: ]
  # 发送给服务器用于客户端认证的 cert 文件
  [cert_file: ]
  # 发送给服务器用于客户端认证的密钥文件
  [key_file: ]
  # 验证服务器证书中的服务器名称是这个值。
  [server_name: ]
  # 如果为 true,则忽略由未知 CA 签署的服务器证书。
  [insecure_skip_verify:  | default = false]

# 配置在请求失败时如何重试对 Loki 的请求。
# 默认的回退周期为:
# 0.5s, 1s, 2s, 4s, 8s, 16s, 32s, 64s, 128s, 256s(4.267m)
# 在日志丢失之前的总时间为511.5s(8.5m)
backoff_config:
  # 重试之间的初始回退时间
  [min_period:  | default = 500ms]
  # 重试之间的最大回退时间
  [max_period:  | default = 5m]
  # 重试的最大次数
  [max_retries:  | default = 10]

# 添加到所有发送到 Loki 的日志中的静态标签
# 使用一个类似于 {"foo": "bar"} 的映射来添加一个 foo 标签,值为 bar
# 这些也可以从命令行中指定:
# -client.external-labels=k1=v1,k2=v2
# (或 --client.external-labels 依赖操作系统)
# 由命令行提供的标签将应用于所有在 "clients" 部分的配置。
# 注意:如果标签的键相同,配置文件中定义的值将取代命令行中为特定 client 定义的值
external_labels:
  [ :  ... ]

# 等待服务器响应一个请求的最长时间
[timeout:  | default = 10s]

positions

positions 属性配置了 Promtail 保存文件的位置,表示它已经读到了文件什么程度。当 Promtail 重新启动时需要它,以允许它从中断的地方继续读取日志。

# positions 文件的路径
[filename:  | default = "/var/log/positions.yaml"]

# 更新 positions 文件的周期
[sync_period:  | default = 10s]

# 是否忽略并覆盖被破坏的 positions 文件
[ignore_invalid_yaml:  | default = false]

scrape_configs

scrape_configs 属性配置了 Promtail 如何使用指定的发现方法从一系列目标中抓取日志。

# 用于在 Promtail 中识别该抓取配置的名称。
job_name: 

# 描述如何对目标日志进行结构化
[pipeline_stages: ]

# 如何从 jounal 抓取日志
[journal: ]

# 如何从 syslog 抓取日志
[syslog: ]

# 如何通过 Loki push API 接收日志 (例如从其他 Promtails 或 Docker Logging Driver 中获取的数据)
[loki_push_api: ]

# 描述了如何 relabel 目标,以确定是否应该对其进行处理
relabel_configs:
  - []

# 抓取日志静态目标配置
static_configs:
  - []

# 包含要抓取的目标文件
file_sd_configs:
  - []

# 描述了如何发现在同一主机上运行的 Kubernetes 服务
kubernetes_sd_configs:
  - []

pipeline_stages

pipeline_stages 用于转换日志条目和它们的标签,该管道在发现操作结束后执行,pipeline_stages 对象由一个阶段列表组成。

- [
     |
     |
     |
     |