loki写操作
loki.write
从其他loki组件接收日志条目,并使用Loki的logproto
格式通过网络发送。
通过提供不同的标签,可以指定多个loki.write
组件。
用法
loki.write "LABEL" {
endpoint {
url = REMOTE_WRITE_URL
}
}
参数
loki.write
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
max_streams | int | 活动流的最大数量。 | 0(无限制) | 否 |
external_labels | map(string) | 要添加到通过网络发送的日志中的标签。 | 否 |
块
以下块在loki.write
定义内受支持
分层 | 块 | 描述 | 必填 |
---|---|---|---|
endpoint | endpoint | 发送日志的位置。 | 否 |
wal | wal | 预写日志配置。 | 否 |
endpoint > basic_auth | basic_auth | 为端点配置基本认证。 | 否 |
endpoint > authorization | authorization | 配置端点的通用认证。 | 否 |
endpoint > oauth2 | oauth2 | 为端点配置OAuth2认证。 | 否 |
endpoint > oauth2 > tls_config | tls_config | 配置连接到端点的TLS设置。 | 否 |
endpoint > tls_config | tls_config | 配置连接到端点的TLS设置。 | 否 |
endpoint > queue_config | queue_config | 启用WAL时,配置队列客户端。 | 否 |
>
符号表示更深层次的嵌套。例如,endpoint > basic_auth
指的是在endpoint
块中定义的basic_auth
块。
endpoint块
《endpoint》块描述了一个发送日志的单个位置。您可以使用多个《endpoint》块将日志发送到多个位置。
以下参数受支持
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
url | string | 要发送日志的完整URL。 | 是 | |
name | string | 识别此端点时的可选名称。 | 否 | |
headers | map(string) | 要随请求一起发送的额外标头。 | 否 | |
batch_wait | duration | 在发送批处理之前等待的最大时间。 | "1s" | 否 |
batch_size | string | 在发送之前累计的最大日志批处理大小。 | "1MiB" | 否 |
remote_timeout | duration | 对URL执行请求的超时时间。 | "10s" | 否 |
tenant_id | string | 默认用于推送日志的租户ID。 | 否 | |
min_backoff_period | duration | 重试之间的初始回退时间。 | "500ms" | 否 |
max_backoff_period | duration | 重试之间的最大回退时间。 | "5m" | 否 |
max_backoff_retries | int | 最大重试次数。 | 10 | 否 |
retry_on_http_429 | bool | 收到HTTP 429状态码时重试。 | true | 否 |
bearer_token_file | string | 包含用于验证的载体令牌的文件。 | 否 | |
bearer_token | secret | 用于验证的载体令牌。 | 否 | |
enable_http2 | bool | 是否支持HTTP2进行请求。 | true | 否 |
follow_redirects | bool | 是否跟随服务器返回的重定向。 | true | 否 |
proxy_url | string | 通过HTTP代理发送请求。 | 否 | |
no_proxy | string | 逗号分隔的IP地址、CIDR表示法和域名列表,将它们排除在代理之外。 | 否 | |
proxy_from_environment | bool | 使用环境变量指示的代理URL。 | false | 否 |
proxy_connect_header | map(list(secret)) | 在连接请求期间发送到代理的头信息。 | 否 |
以下信息最多只能提供一个
no_proxy
可以包含IP地址、CIDR表示法和域名。IP地址和域名可以包含端口号。proxy_url
必须配置,如果已配置no_proxy
。
proxy_from_environment
使用环境变量HTTP_PROXY、HTTPS_PROXY和NO_PROXY(或其小写形式)。请求使用与其方案匹配的环境变量中的代理,除非NO_PROXY排除。如果已配置proxy_from_environment
,则不得配置proxy_url
和no_proxy
。
proxy_connect_header
只有在已配置proxy_url
或proxy_from_environment
时才应配置。
如果没有提供tenant_id
,组件假定在endpoint
运行的Loki实例为单租户模式,并且不会发送X-Scope-OrgID标题。
当提供多个endpoint
块时,loki.write
组件为每个块创建一个客户端。收到的日志条目将依次扇形展开到这些客户端。这意味着如果一个客户端成为瓶颈,可能会影响其余的客户端。
可以使用name
参数对端点进行命名,以便在调试指标中更容易识别。如果未提供name
参数,则基于端点设置的哈希生成一个名称。
retry_on_http_429
参数指定是否将HTTP 429
状态码响应视为可恢复的错误;其他HTTP 4xx
状态码响应永远不会被视为可恢复的错误。当retry_on_http_429
启用时,重试机制将由通过min_backoff_period
、max_backoff_period
和max_backoff_retries
属性指定的回退配置控制。
basic_auth块
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
password_file | string | 包含基本认证密码的文件。 | 否 | |
password | secret | 基本认证密码。 | 否 | |
username | string | 基本认证用户名。 | 否 |
password
和password_file
是互斥的,并且只能在一个basic_auth
块中提供其一个。
authorization块
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
credentials_file | string | 包含密钥值的文件。 | 否 | |
密钥值。 | secret | 认证类型,例如,“Bearer”。 | 否 | |
type | string | 认证类型,例如,“Bearer”。 | 否 |
credentials
和credentials_file
是互斥的,并且只能在一个authorization
块中提供其一个。
oauth2块
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
client_id | string | OAuth2客户端ID。 | 否 | |
client_secret_file | string | 包含OAuth2客户端密的钥的文件。 | 否 | |
client_secret | secret | OAuth2客户端密钥。 | 否 | |
endpoint_params | map(string) | 追加到令牌URL的可选参数。 | 否 | |
proxy_url | string | 通过HTTP代理发送请求。 | 否 | |
no_proxy | string | 逗号分隔的IP地址、CIDR表示法和域名列表,将它们排除在代理之外。 | 否 | |
proxy_from_environment | bool | 使用环境变量指示的代理URL。 | false | 否 |
proxy_connect_header | map(list(secret)) | 在连接请求期间发送到代理的头信息。 | 否 | |
scopes | list(string) | 要认证的作用域列表。 | 否 | |
token_url | string | 从该URL获取令牌的URL。 | 否 |
client_secret
和client_secret_file
是互斥的,并且只能在一个oauth2
块中提供一个。
oauth2
块还可以包含一个单独的tls_config
子块。
no_proxy
可以包含IP地址、CIDR表示法和域名。IP地址和域名可以包含端口号。proxy_url
必须配置,如果已配置no_proxy
。
proxy_from_environment
使用环境变量HTTP_PROXY、HTTPS_PROXY和NO_PROXY(或其小写形式)。请求使用与其方案匹配的环境变量中的代理,除非NO_PROXY排除。如果已配置proxy_from_environment
,则不得配置proxy_url
和no_proxy
。
proxy_connect_header
只有在已配置proxy_url
或proxy_from_environment
时才应配置。
tls_config块
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
ca_pem | string | 使用CA PEM编码的文本验证服务器。 | 否 | |
ca_file | string | 用于验证服务器的CA证书。 | 否 | |
cert_pem | string | 用于客户端认证的证书PEM编码的文本。 | 否 | |
cert_file | string | 用于客户端认证的证书文件。 | 否 | |
insecure_skip_verify | bool | 禁用服务器证书的验证。 | 否 | |
key_file | string | 客户端身份验证的密钥文件。 | 否 | |
key_pem | secret | 客户端身份验证使用PEM编码的密钥文本。 | 否 | |
min_version | string | 可接受的最低TLS版本。 | 否 | |
server_name | string | 使用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)
queue_config块(实验性)
可选的queue_config
块配置,当启用WAL时,如何将底层客户端队列发送到Loki的日志批次。有关更多信息,请参阅Write-Ahead block。
以下参数受支持
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
capacity | string | 控制底层发送队列缓冲区的大小。这个设置应该被视为内存消耗的最坏情况,其中所有入队的批次都是满的。 | 10MiB | 否 |
drain_timeout | duration | 配置客户端在关闭时可以用来清空发送队列的最大时间。在这段时间内,它将入队挂起的批次并清空发送队列,依次发送。 | "1m" | 否 |
wal block(实验性)
可选的wal
块配置Loki远程写入客户端中使用的预写日志(WAL)。要启用WAL,必须在配置中包括wal
块。当启用WAL时,发送到loki.write
组件的日志条目首先写入dir
目录下的WAL,然后读入远程写入客户端。当条目达到此组件时,此过程提供了持久性保证。客户端使用以下两种机制来知道何时从WAL读取
loki.write
组件的WAL写入端通知读取端有新数据可读。loki.write
组件的WAL读取端会定期检查是否有新数据,等待时间在min_read_frequency
和max_read_frequency
之间呈指数增加。
WAL位于Albert配置使用的存储路径相对于特定组件的目录中。有关如何更改存储路径,请参阅alloy run
文档。
以下参数受支持
名称 | 类型 | 描述 | 默认值 | 必填 |
---|---|---|---|---|
enabled | bool | 是否启用WAL。 | false | 否 |
max_segment_age | duration | WAL段允许存在的最大时间。超过此设置的段最终将被删除。 | "1h" | 否 |
min_read_frequency | duration | 备份读取机制中的最小回退时间。 | "250ms" | 否 |
max_read_frequency | duration | 备份读取机制中的最大回退时间。 | "1s" | 否 |
drain_timeout | duration | 在强制停止之前,WAL排空程序可以持续的最大时间。 | "30s" | 否 |
导出字段
以下字段被导出,并且可以被其他组件引用
名称 | 类型 | 描述 |
---|---|---|
receiver | LogsReceiver | 其他组件可以使用它来发送日志条目的值。 |
组件健康
loki.write
只有在提供无效配置的情况下才会被认为是未健康的。
调试信息
loki.write
不公开任何特定于组件的调试信息。
调试指标
loki_write_encoded_bytes_total
(计数器):编码并准备好发送的字节数。loki_write_sent_bytes_total
(计数器):发送的字节数。loki_write_dropped_bytes_total
(计数器):因为尝试发送给ingester且所有重试都失败而丢弃的字节数。- 《loki_write_sent_entries_total》(计数器):成功发送到Ingester的日志条目数量。
- 《loki_write_dropped_entries_total》(计数器):由于所有重试后未能发送到Ingester而丢弃的日志条目数量。
- 《loki_write_request_duration_seconds》(直方图):发送请求的持续时间。
- 《loki_write_batch_retries_total》(计数器):批量数据必须重试的次数。
- 《loki_write_stream_lag_seconds》(仪表计):成功率发送的最后一批时间戳与当前时间之间的差值。
示例
以下示例向您展示如何创建向不同目标发送日志条目的 loki.write
组件。
将日志条目发送到本地Loki实例
您可以创建一个 loki.write
组件,将您的日志条目发送到本地Loki实例。
loki.write "local" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}
将日志条目发送到托管服务
您可以使用一个 loki.write
组件将日志条目发送到托管服务,例如 Grafana Cloud。在此示例中,通过环境变量注入Loki用户名和 Grafana Cloud API密钥。
loki.write "default" {
endpoint {
url = "https://logs-xxx.grafana.net/loki/api/v1/push"
basic_auth {
username = env("LOKI_USERNAME")
password = env("GRAFANA_CLOUD_API_KEY")
}
}
}
技术细节
loki.write
使用 snappy 进行压缩。
在发送到端点之前,任何以 __
开头的标签都将被移除。
兼容组件
loki.write
具有可以被以下组件消耗的导出
注意
连接某些组件可能没有意义,或者组件可能需要进一步配置才能正确连接。有关更多详细信息,请参阅相关文档。