菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow lokibreadcrumb arrow loki.source.podlogs
开源

loki.source.podlogs

loki.source.podlogs 在 Kubernetes 中发现 PodLogs 资源。这些资源提供了在您的集群中要发现的 Kubernetes Pods 的规则。

loki.source.podlogs 使用 Kubernetes API 来跟踪已发现 Kubernetes Pods 的日志。

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

注意

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

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

用法

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

参数

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

loki.source.podlogs 支持以下参数

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

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

PodLogs 自定义资源

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

注意

loki.source.podlogs 查找 monitoring.grafana.com/v1alpha2PodLogs,与版本为 v1alpha1 的 Agent Operator 的 PodLogs 不兼容。
字段类型描述
apiVersion字符串monitoring.grafana.com/v1alpha2
kind字符串PodLogs
metadataObjectMetaPodLogs 的元数据。
specPodLogsSpec定义要收集日志的 Pod。

PodLogsSpec

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

字段类型描述
selectorLabelSelector要收集日志的 Pod 的标签选择器。
namespaceSelectorLabelSelectorPod 可被发现在内的命名空间的标签选择器。
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 客户端。no
client > basic_authbasic_auth配置基本身份验证以对端点进行身份验证。no
客户端 > 授权授权配置端点的通用授权。no
客户端 > oauth2oauth2配置OAuth2以对端点进行身份验证。no
客户端 > oauth2 > tls_configtls_config配置连接到端点的TLS设置。no
客户端 > tls_configtls_config配置连接到端点的TLS设置。no
selectorselector用于发现 PodLogs 的标签选择器。no
选择器 > 匹配表达式匹配表达式用于发现 PodLogs 的标签选择器表达式。no
命名空间选择器selector用于发现 PodLogs 命名空间的标签选择器。no
命名空间选择器 > 匹配表达式匹配表达式用于发现 PodLogs 命名空间的标签选择器表达式。no
集群集群配置Alloy在集群模式下运行时的组件。no

> 符号表示嵌套的更深层级。例如,客户端 > 基本认证 指的是在 客户端 块内定义的 基本认证 块。

客户端块

客户端 块配置用于从容器中跟踪日志的Kubernetes客户端。如果没有提供 客户端 块,则使用默认的集群配置,即运行中的Alloy pod的服务账户。

支持以下参数

名称类型描述默认值必需
api_server字符串Kubernetes API服务器的URL。no
kubeconfig_file字符串用于连接到Kubernetes的 kubeconfig 文件的路径。no
bearer_token_file字符串包含用于身份验证的bearer token的文件。no
bearer_tokensecret用于身份验证的bearer token。no
enable_http2bool是否支持HTTP2请求。trueno
follow_redirectsbool是否应遵循服务器返回的重定向。trueno
proxy_url字符串发送请求通过的HTTP代理。no
no_proxy字符串逗号分隔的IP地址、CIDR表示法和域名列表,用于排除代理。no
proxy_from_environmentbool使用环境变量指示的代理URL。falseno
proxy_connect_headermap(list(secret))指定在CONNECT请求期间发送到代理的标题。no

以下参数中最多只能提供以下参数之一

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_connect_header 应仅当配置了 proxy_urlproxy_from_environment 时进行配置。

基本认证块

名称类型描述默认值必需
password_file字符串包含基本认证密码的文件。no
passwordsecret基本认证密码。no
username字符串基本认证用户名。no

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

授权块

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

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

oauth2块

名称类型描述默认值必需
client_id字符串OAuth2客户端ID。no
client_secret_file字符串包含OAuth2客户端密钥的文件。no
client_secretsecretOAuth2客户端密钥。no
endpoint_paramsmap(string)要附加到令牌URL的可选参数。no
proxy_url字符串发送请求通过的HTTP代理。no
no_proxy字符串逗号分隔的IP地址、CIDR表示法和域名列表,用于排除代理。no
proxy_from_environmentbool使用环境变量指示的代理URL。falseno
proxy_connect_headermap(list(secret))指定在CONNECT请求期间发送到代理的标题。no
scopeslist(string)用于身份验证的权限范围列表。no
token_url字符串获取令牌的URL。no

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_connect_header 应仅当配置了 proxy_urlproxy_from_environment 时进行配置。

tls_config 块

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

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

  • 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)用于发现资源的标签键和值。{}no

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

match_expression 块

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

支持以下参数

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

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

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

既可以使用 selector,也可以使用 namespace_selector,它们都可以使用多个 match_expression 内部块,这些块被视为AND子句。

clustering 块

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

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

如果Alloy不是以集群模式运行,则该块不执行任何操作,并且 loki.source.podlogs 根据发现的每个 PodLogs 资源收集日志。

集群仅查看以下标签以确定分片键

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

导出字段

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 可以接受以下组件的参数

注意

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