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
组件提供不同的标签来指定它们。
用法
loki.source.podlogs "LABEL" {
forward_to = RECEIVER_LIST
}
参数
该组件为每个给定的 targets
启动一个新的读取器,并将日志条目分发到 forward_to
中传递的接收器列表。
loki.source.podlogs
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
forward_to | list(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 |
metadata | ObjectMeta | PodLogs 的元数据。 |
spec | PodLogsSpec | 要从中收集日志的 Pod 的定义。 |
PodLogsSpec
PodLogsSpec
描述了一组要从中收集日志的 Pod。
字段 | 类型 | 描述 |
---|---|---|
selector | LabelSelector | 要从中收集日志的 Pod 的标签选择器。 |
namespaceSelector | LabelSelector | 可以发现 Pod 的命名空间的标签选择器。 |
relabelings | RelabelConfig | 应用于发现的 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 就绪状态的true
或false
。__meta_kubernetes_pod_phase
:在生命周期中设置为Pending
、Running
、Succeeded
、Failed
或Unknown
。__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
的定义中受支持
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
client | client | 配置用于尾随日志的 Kubernetes 客户端。 | 否 |
client > basic_auth | basic_auth | 配置用于对端点进行身份验证的 basic_auth。 | 否 |
client > authorization | authorization | 配置对端点的通用授权。 | 否 |
client > oauth2 | oauth2 | 配置用于对端点进行身份验证的 OAuth2。 | 否 |
client > oauth2 > tls_config | tls_config | 配置用于连接到端点的 TLS 设置。 | 否 |
client > tls_config | tls_config | 配置用于连接到端点的 TLS 设置。 | 否 |
selector | selector | 要发现的 PodLogs 的标签选择器。 | 否 |
selector > match_expression | match_expression | 要发现的 PodLogs 的标签选择器表达式。 | 否 |
namespace_selector | selector | 要在其中发现 PodLogs 的命名空间的标签选择器。 | 否 |
namespace_selector > match_expression | match_expression | 要在其中发现 PodLogs 的命名空间的标签选择器表达式。 | 否 |
clustering | clustering | 配置 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_token | secret | 用于身份验证的承载令牌。 | 否 | |
enable_http2 | 布尔值 | 请求是否支持 HTTP2。 | true | 否 |
follow_redirects | 布尔值 | 服务器返回的重定向是否应被跟踪。 | true | 否 |
proxy_url | 字符串 | 要通过其发送请求的 HTTP 代理。 | 否 | |
no_proxy | 字符串 | 要从代理中排除的 IP 地址、CIDR 表示法和域名,以逗号分隔。 | 否 | |
proxy_from_environment | 布尔值 | 使用环境变量指示的代理 URL。 | false | 否 |
proxy_connect_header | map(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_url
和 no_proxy
。
仅当配置了 proxy_url
或 proxy_from_environment
时,才应配置 proxy_connect_header
。
basic_auth 块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
password_file | 字符串 | 包含 basic auth 密码的文件。 | 否 | |
password | secret | Basic auth 密码。 | 否 | |
username | 字符串 | Basic auth 用户名。 | 否 |
password
和 password_file
是互斥的,并且在 basic_auth
块内只能提供一个。
authorization 块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
credentials_file | 字符串 | 包含密钥值的文件。 | 否 | |
credentials | secret | 密钥值。 | 否 | |
type | 字符串 | 授权类型,例如“Bearer”。 | 否 |
credential
和 credentials_file
是互斥的,并且在 authorization
块内只能提供一个。
oauth2 块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
client_id | 字符串 | OAuth2 客户端 ID。 | 否 | |
client_secret_file | 字符串 | 包含 OAuth2 客户端密钥的文件。 | 否 | |
client_secret | secret | OAuth2 客户端密钥。 | 否 | |
endpoint_params | map(string) | 要附加到令牌 URL 的可选参数。 | 否 | |
proxy_url | 字符串 | 要通过其发送请求的 HTTP 代理。 | 否 | |
no_proxy | 字符串 | 要从代理中排除的 IP 地址、CIDR 表示法和域名,以逗号分隔。 | 否 | |
proxy_from_environment | 布尔值 | 使用环境变量指示的代理 URL。 | false | 否 |
proxy_connect_header | map(list(secret)) | 指定在 CONNECT 请求期间发送到代理的标头。 | 否 | |
scopes | list(string) | 要进行身份验证的范围列表。 | 否 | |
token_url | 字符串 | 从中获取令牌的 URL。 | 否 |
client_secret
和 client_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_url
和 no_proxy
。
仅当配置了 proxy_url
或 proxy_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_pem | secret | 用于客户端身份验证的密钥 PEM 编码文本。 | 否 | |
min_version | 字符串 | 可接受的最低 TLS 版本。 | 否 | |
server_name | 字符串 | ServerName 扩展名,用于指示服务器的名称。 | 否 |
以下参数对是互斥的,不能同时设置
ca_pem
和ca_file
cert_pem
和cert_file
key_pem
和key_file
配置客户端身份验证时,必须同时提供客户端证书(使用 cert_pem
或 cert_file
)和客户端密钥(使用 key_pem
或 key_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_labels | map(string) | 用于发现资源的标签键和值。 | {} | 否 |
当match_labels
参数为空时,将匹配所有资源。
match_expression 块
match_expression
块描述用于PodLogs
或命名空间发现的 Kubernetes 标签匹配表达式。
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
key | 字符串 | 要匹配的标签名称。 | 是 | |
operator | 字符串 | 匹配时使用的运算符。 | 是 | |
values | list(string) | 匹配时使用的值。 | 否 |
operator
参数必须是以下字符串之一
"In"
"NotIn"
"Exists"
"DoesNotExist"
selector
和namespace_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。
loki.source.podlogs "default" {
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint {
url = env("LOKI_URL")
}
}
兼容组件
loki.source.podlogs
可以接受来自以下组件的参数
- 导出 Loki
LogsReceiver
的组件
注意
连接某些组件可能没有意义,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。