菜单
文档面包屑箭头 Grafana Alloy面包屑箭头 参考面包屑箭头 组件面包屑箭头 loki面包屑箭头 loki.source.podlogs
开源

Loki Pod 日志数据源

loki.source.podlogs 组件在 Kubernetes 上发现 PodLogs 资源。PodLogs 资源提供了在集群上发现哪些 Kubernetes Pod 的规则。

loki.source.podlogs 使用 Kubernetes API 尾随从发现的 Kubernetes Pod 中获取的日志。

loki.source.podlogs 类似于 loki.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)不兼容。
字段类型描述
apiVersion字符串monitoring.grafana.com/v1alpha2
kind字符串PodLogs
metadataObjectMetaPodLogs 的元数据。
specPodLogsSpec要从中收集日志的 Pod 的定义。

PodLogsSpec

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

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

如果 selector 保留为默认值,则会发现所有 Pod。如果 namespaceSelector 保留为默认值,则所有命名空间都将用于 Pod 发现。

relabelings 字段可用于修改从发现的 Pod 中获取的标签。以下元标签可用于重新标记

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

除了元标签外,以下标签还公开给 loki.source.podlogs 以告知它要尾随哪个容器

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

以下块在 loki.source.podlogs 的定义中受支持

层次结构描述必需
clientclient配置用于尾随日志的 Kubernetes 客户端。
client > basic_authbasic_auth配置用于对端点进行身份验证的 basic_auth。
client > authorizationauthorization配置对端点的通用授权。
client > oauth2oauth2配置用于对端点进行身份验证的 OAuth2。
client > oauth2 > tls_configtls_config配置用于连接到端点的 TLS 设置。
client > tls_configtls_config配置用于连接到端点的 TLS 设置。
selectorselector要发现的 PodLogs 的标签选择器。
selector > match_expressionmatch_expression要发现的 PodLogs 的标签选择器表达式。
namespace_selectorselector要在其中发现 PodLogs 的命名空间的标签选择器。
namespace_selector > match_expressionmatch_expression要在其中发现 PodLogs 的命名空间的标签选择器表达式。
clusteringclustering配置 Alloy 在集群模式下运行时的组件。

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

client 块

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

支持以下参数

名称类型描述默认值必需
api_server字符串Kubernetes API 服务器的 URL。
kubeconfig_file字符串要用于连接到 Kubernetes 的 kubeconfig 文件的路径。
bearer_token_file字符串包含用于身份验证的承载令牌的文件。
bearer_tokensecret用于身份验证的承载令牌。
enable_http2布尔值请求是否支持 HTTP2。true
follow_redirects布尔值服务器返回的重定向是否应被跟踪。true
proxy_url字符串要通过其发送请求的 HTTP 代理。
no_proxy字符串要从代理中排除的 IP 地址、CIDR 表示法和域名,以逗号分隔。
proxy_from_environment布尔值使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的标头。

最多只能提供以下一项

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

basic_auth 块

名称类型描述默认值必需
password_file字符串包含 basic auth 密码的文件。
passwordsecretBasic auth 密码。
username字符串Basic auth 用户名。

passwordpassword_file 是互斥的,并且在 basic_auth 块内只能提供一个。

authorization 块

名称类型描述默认值必需
credentials_file字符串包含密钥值的文件。
credentialssecret密钥值。
type字符串授权类型,例如“Bearer”。

credentialcredentials_file 是互斥的,并且在 authorization 块内只能提供一个。

oauth2 块

名称类型描述默认值必需
client_id字符串OAuth2 客户端 ID。
client_secret_file字符串包含 OAuth2 客户端密钥的文件。
client_secretsecretOAuth2 客户端密钥。
endpoint_paramsmap(string)要附加到令牌 URL 的可选参数。
proxy_url字符串要通过其发送请求的 HTTP 代理。
no_proxy字符串要从代理中排除的 IP 地址、CIDR 表示法和域名,以逗号分隔。
proxy_from_environment布尔值使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的标头。
scopeslist(string)要进行身份验证的范围列表。
token_url字符串从中获取令牌的 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

tls_config 块

名称类型描述默认值必需
ca_pem字符串用于验证服务器的 CA PEM 编码文本。
ca_file字符串用于验证服务器的 CA 证书。
cert_pem字符串用于客户端身份验证的证书 PEM 编码文本。
cert_file字符串用于客户端身份验证的证书文件。
insecure_skip_verify布尔值禁用服务器证书的验证。
key_file字符串用于客户端身份验证的密钥文件。
key_pemsecret用于客户端身份验证的密钥 PEM 编码文本。
min_version字符串可接受的最低 TLS 版本。
server_name字符串ServerName 扩展名,用于指示服务器的名称。

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

  • 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)

selector 块

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

支持以下参数

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

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

match_expression 块

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

支持以下参数

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

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

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

selectornamespace_selector都可以使用多个match_expression内部块,这些块被视为AND子句。

clustering 块

名称类型描述默认值必需
enabled布尔值将日志收集分发到其他集群节点。

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

如果 Alloy *未*在集群模式下运行,则该块为无操作,并且loki.source.podlogs根据发现的每个 PodLogs 资源收集日志。

导出字段

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 = env("LOKI_URL")
  }
}

兼容组件

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

注意

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