菜单
文档面包屑箭头 Grafana Alloy面包屑箭头 参考面包屑箭头 组件面包屑箭头 loki面包屑箭头 loki.source.podlogs
正式发布 (GA) 开源

loki.source.podlogs

loki.source.podlogs 在 Kubernetes 上发现 PodLogs 资源。PodLogs 资源提供规则,用于确定在集群中发现哪些 Kubernetes Pod。

loki.source.podlogs 使用 Kubernetes API 从发现的 Kubernetes Pod 中追踪日志。

loki.source.podlogsloki.source.kubernetes 类似,但使用自定义资源而不是从另一个组件获取目标。

注意

由于 loki.source.podlogs 使用 Kubernetes API 追踪日志,它比 loki.source.file 使用更多的网络流量和 Kubelet CPU 消耗。

你可以通过为它们指定不同的标签来指定多个 loki.source.podlogs 组件。

用法

alloy
loki.source.podlogs "<LABEL>" {
  forward_to = <RECEIVER_LIST>
}

参数

该组件为每个给定的 targets 启动一个新的读取器,并将日志条目扇出到 forward_to 中传递的接收器列表。

loki.source.podlogs 支持以下参数

名称类型描述默认值必需
forward_tolist(LogsReceiver)发送日志条目到的接收器列表。

loki.source.podlogs 在 Kubernetes 上搜索 PodLogs 资源。每个 PodLogs 资源描述了一组要从中追踪日志的 Pod。

PodLogs 自定义资源

PodLogs 资源描述了一组要从中收集日志的 Pod。

注意

loki.source.podlogs 查找 monitoring.grafana.com/v1alpha2 版本的 PodLogs,并且与 Agent Operator 的 PodLogs 不兼容,后者版本为 v1alpha1

字段类型描述
apiVersionstringmonitoring.grafana.com/v1alpha2
kindstringPodLogs
metadataObjectMetaPodLogs 的元数据。
specPodLogsSpec定义要从哪些 Pod 收集日志。

PodLogsSpec

PodLogsSpec 描述了一组要从中收集日志的 Pod。

字段类型描述
selectorLabelSelector用于选择要从中收集日志的 Pod 的标签选择器。
namespaceSelectorLabelSelector用于选择可以发现 Pod 的命名空间的标签选择器。
relabelingsRelabelConfig应用于发现的 Pod 的 relabeling 规则。

如果 selector 使用默认值,则发现所有 Pod。如果 namespaceSelector 使用默认值,则使用所有命名空间进行 Pod 发现。

relabelings 字段可用于修改发现的 Pod 的标签。以下元标签可用于 relabeling

  • __meta_kubernetes_namespace: Pod 的命名空间。
  • __meta_kubernetes_pod_annotation_<annotationname>: Pod 的每个 annotation。
  • __meta_kubernetes_pod_annotationpresent_<annotationname>: Pod 的每个 annotation 为 true
  • __meta_kubernetes_pod_container_image: 容器正在使用的镜像。
  • __meta_kubernetes_pod_container_init: 如果容器是 InitContainer,则为 true
  • __meta_kubernetes_pod_container_name: 容器名称。
  • __meta_kubernetes_pod_controller_kind: Pod 控制器的对象类型。
  • __meta_kubernetes_pod_controller_name: Pod 控制器名称。
  • __meta_kubernetes_pod_host_ip: Pod 对象的当前主机 IP。
  • __meta_kubernetes_pod_ip: Pod 的 Pod IP。
  • __meta_kubernetes_pod_label_<labelname>: Pod 的每个标签。
  • __meta_kubernetes_pod_labelpresent_<labelname>: Pod 的每个标签为 true
  • __meta_kubernetes_pod_name: Pod 名称。
  • __meta_kubernetes_pod_node_name: Pod 被调度到的节点名称。
  • __meta_kubernetes_pod_phase: 生命周期中的状态,可为 Pending, Running, Succeeded, FailedUnknown
  • __meta_kubernetes_pod_ready: Pod 的就绪状态,可为 truefalse
  • __meta_kubernetes_pod_uid: Pod 的 UID。

除了元标签外,还公开了以下标签,用于告知 loki.source.podlogs 要追踪哪个容器

  • __pod_container_name__: Pod 中的容器名称。
  • __pod_name__: Pod 名称。
  • __pod_namespace__: Pod 的命名空间。
  • __pod_uid__: Pod 的 UID。

你可以配合 loki.source.podlogs 使用以下块

描述必需
client配置用于追踪日志的 Kubernetes 客户端。
client > authorization配置到端点的通用授权。
client > basic_auth配置用于通过 basic_auth 对端点进行认证。
client > oauth2配置用于通过 OAuth 2.0 对端点进行认证。
client > oauth2 > tls_config配置连接到端点的 TLS 设置。
client > tls_config配置连接到端点的 TLS 设置。
clustering配置组件以便在 Alloy 运行在集群模式下时使用。
namespace_selector用于选择在哪些命名空间发现 PodLogs 的标签选择器。
namespace_selector > match_expression用于选择在哪些命名空间发现 PodLogs 的标签选择器表达式。
selector用于选择发现哪些 PodLogs 的标签选择器。
selector > match_expression用于选择发现哪些 PodLogs 的标签选择器表达式。

> 符号表示更深的嵌套层级。例如,client > basic_auth 指的是在 client 块内部定义的 basic_auth 块。

client

client 块配置用于从容器追踪日志的 Kubernetes 客户端。如果未提供 client 块,则使用正在运行的 Alloy Pod 的服务账户的默认集群内配置。

支持以下参数

名称类型描述默认值必需
api_serverstringKubernetes API 服务器的 URL。
bearer_token_filestring包含用于认证的 bearer 令牌的文件。
bearer_tokensecret用于认证的 Bearer 令牌。
enable_http2bool请求是否支持 HTTP2。true
follow_redirectsbool是否应遵循服务器返回的重定向。true
http_headersmap(list(secret))随每个请求发送的自定义 HTTP 头部。map 的键是头部名称。
kubeconfig_filestring用于连接到 Kubernetes 的 kubeconfig 文件路径。
no_proxystring逗号分隔的 IP 地址、CIDR 表示法和域名列表,用于排除代理。
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的头部。
proxy_from_environmentbool使用环境变量指定的代理 URL。false
proxy_urlstring用于发送请求的 HTTP 代理。

最多只能提供以下其中一个

no_proxy 可以包含 IP、CIDR 表示法和域名。IP 和域名可以包含端口号。如果配置了 no_proxy,则必须配置 proxy_url

proxy_from_environment 使用环境变量 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY(或其小写形式)。请求使用与其方案匹配的环境变量中的代理,除非被 NO_PROXY 排除。如果配置了 proxy_from_environment,则不得配置 proxy_urlno_proxy

只有在配置了 proxy_urlproxy_from_environment 时,才应配置 proxy_connect_header

authorization

名称类型描述默认值必需
credentials_filestring包含 secret 值的文件。
credentialssecretSecret 值。
typestring授权类型,例如“Bearer”。

credentialcredentials_file 是互斥的,authorization 块中只能提供其中一个。

basic_auth

名称类型描述默认值必需
password_filestring包含 basic auth 密码的文件。
passwordsecretBasic auth 密码。
usernamestringBasic auth 用户名。

passwordpassword_file 是互斥的,basic_auth 块中只能提供其中一个。

clustering

名称类型描述默认值必需
enabledbool与其他集群节点一起分发日志收集。

当 Alloy 使用集群模式运行,并且 enabled 设置为 true 时,此 loki.source.podlogs 组件实例会选择参与集群,以便在所有集群节点之间分配日志收集负载。

如果 Alloy 在集群模式下运行,则此块无效,loki.source.podlogs 将根据发现的每个 PodLogs 资源收集日志。

集群模式仅查看以下标签来确定 shard key

  • __pod_namespace__
  • __pod_name__
  • __pod_container_name__
  • __pod_uid__
  • __meta_kubernetes_namespace
  • __meta_kubernetes_pod_name
  • __meta_kubernetes_pod_container_name
  • __meta_kubernetes_pod_uid
  • container
  • pod
  • job
  • namespace

match_expression

match_expression 块描述了用于 PodLogs 或命名空间发现的 Kubernetes 标签匹配表达式。

支持以下参数

名称类型描述默认值必需
keystring要匹配的标签名称。
operatorstring匹配时使用的运算符。
valueslist(string)匹配时使用的值。

operator 参数必须是以下字符串之一

  • "In"
  • "NotIn"
  • "Exists"
  • "DoesNotExist"

selectornamespace_selector 都可以使用多个 match_expression 内联块,它们被视为 AND 子句。

oauth2

名称类型描述默认值必需
client_idstringOAuth2 客户端 ID。
client_secret_filestring包含 OAuth2 客户端 secret 的文件。
client_secretsecretOAuth2 客户端 secret。
endpoint_paramsmap(string)可选参数,将附加到令牌 URL。
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring逗号分隔的 IP 地址、CIDR 表示法和域名列表,用于排除代理。
proxy_from_environmentbool使用环境变量指定的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的头部。
scopeslist(string)用于认证的 scope 列表。
token_urlstring用于获取令牌的 URL。

client_secretclient_secret_file 是互斥的,oauth2 块中只能提供其中一个。

oauth2 块还可以包含一个单独的 tls_config 子块。

no_proxy 可以包含 IP、CIDR 表示法和域名。IP 和域名可以包含端口号。如果配置了 no_proxy,则必须配置 proxy_url

proxy_from_environment 使用环境变量 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY(或其小写形式)。请求使用与其方案匹配的环境变量中的代理,除非被 NO_PROXY 排除。如果配置了 proxy_from_environment,则不得配置 proxy_urlno_proxy

只有在配置了 proxy_urlproxy_from_environment 时,才应配置 proxy_connect_header

selectornamespace_selector

selectornamespace_selector 块描述了用于 PodLogs 或命名空间发现的 Kubernetes 标签选择器。

支持以下参数

名称类型描述默认值必需
match_labelsmap(string)用于发现资源的标签键和值。{}

match_labels 参数为空时,匹配所有资源。

tls_config

名称类型描述默认值必需
ca_pemstring用于验证服务器的 CA PEM 编码文本。
ca_filestring用于验证服务器的 CA 证书文件。
cert_pemstring用于客户端认证的证书 PEM 编码文本。
cert_filestring用于客户端认证的证书文件。
insecure_skip_verifybool禁用对服务器证书的验证。
key_filestring用于客户端认证的密钥文件。
key_pemsecret用于客户端认证的密钥 PEM 编码文本。
min_versionstring可接受的最低 TLS 版本。
server_namestringServerName 扩展,用于指示服务器名称。

以下参数对是互斥的,不能同时设置

  • ca_pemca_file
  • cert_pemcert_file
  • key_pemkey_file

配置客户端认证时,必须同时提供客户端证书(使用 cert_pemcert_file)和客户端密钥(使用 key_pemkey_file)。

如果未提供 min_version,则可接受的最低 TLS 版本继承自 Go 的默认最低版本 TLS 1.2。如果提供了 min_version,则必须设置为以下字符串之一

  • "TLS10" (TLS 1.0)
  • "TLS11" (TLS 1.1)
  • "TLS12" (TLS 1.2)
  • "TLS13" (TLS 1.3)

导出的字段

loki.source.podlogs 不导出任何字段。

组件健康状况

仅当配置无效时,loki.source.podlogs 才被报告为不健康。

调试信息

loki.source.podlogs 为每个目标公开了一些目标级调试信息

  • 与目标关联的标签。
  • 服务发现期间找到的完整标签集。
  • 最近一次读取日志行并将其转发到管道中下一个组件的时间。
  • 最近一次追踪时发生的错误(如果有)。

调试指标

loki.source.podlogs 不公开任何组件特定的调试指标。

示例

此示例发现所有 PodLogs 资源并将收集到的日志转发到 loki.write 组件,以便将它们写入 Loki。

alloy
loki.source.podlogs "default" {
  forward_to = [loki.write.local.receiver]
}

loki.write "local" {
  endpoint {
    url = sys.env("LOKI_URL")
  }
}

兼容组件

loki.source.podlogs 可以接受来自以下组件的参数

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。