菜单
开源

loki写操作

loki.write从其他loki组件接收日志条目,并使用Loki的logproto格式通过网络发送。

通过提供不同的标签,可以指定多个loki.write组件。

用法

alloy
loki.write "LABEL" {
  endpoint {
    url = REMOTE_WRITE_URL
  }
}

参数

loki.write支持以下参数

名称类型描述默认值必填
max_streamsint活动流的最大数量。0(无限制)
external_labelsmap(string)要添加到通过网络发送的日志中的标签。

以下块在loki.write定义内受支持

分层描述必填
endpointendpoint发送日志的位置。
walwal预写日志配置。
endpoint > basic_authbasic_auth为端点配置基本认证。
endpoint > authorizationauthorization配置端点的通用认证。
endpoint > oauth2oauth2为端点配置OAuth2认证。
endpoint > oauth2 > tls_configtls_config配置连接到端点的TLS设置。
endpoint > tls_configtls_config配置连接到端点的TLS设置。
endpoint > queue_configqueue_config启用WAL时,配置队列客户端。

>符号表示更深层次的嵌套。例如,endpoint > basic_auth指的是在endpoint块中定义的basic_auth块。

endpoint块

《endpoint》块描述了一个发送日志的单个位置。您可以使用多个《endpoint》块将日志发送到多个位置。

以下参数受支持

名称类型描述默认值必填
urlstring要发送日志的完整URL。
namestring识别此端点时的可选名称。
headersmap(string)要随请求一起发送的额外标头。
batch_waitduration在发送批处理之前等待的最大时间。"1s"
batch_sizestring在发送之前累计的最大日志批处理大小。"1MiB"
remote_timeoutduration对URL执行请求的超时时间。"10s"
tenant_idstring默认用于推送日志的租户ID。
min_backoff_periodduration重试之间的初始回退时间。"500ms"
max_backoff_periodduration重试之间的最大回退时间。"5m"
max_backoff_retriesint最大重试次数。10
retry_on_http_429bool收到HTTP 429状态码时重试。true
bearer_token_filestring包含用于验证的载体令牌的文件。
bearer_tokensecret用于验证的载体令牌。
enable_http2bool是否支持HTTP2进行请求。true
follow_redirectsbool是否跟随服务器返回的重定向。true
proxy_urlstring通过HTTP代理发送请求。
no_proxystring逗号分隔的IP地址、CIDR表示法和域名列表,将它们排除在代理之外。
proxy_from_environmentbool使用环境变量指示的代理URL。false
proxy_connect_headermap(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_urlno_proxy

proxy_connect_header只有在已配置proxy_urlproxy_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_periodmax_backoff_periodmax_backoff_retries属性指定的回退配置控制。

basic_auth块

名称类型描述默认值必填
password_filestring包含基本认证密码的文件。
passwordsecret基本认证密码。
usernamestring基本认证用户名。

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

authorization块

名称类型描述默认值必填
credentials_filestring包含密钥值的文件。
密钥值。secret认证类型,例如,“Bearer”。
typestring认证类型,例如,“Bearer”。

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

oauth2块

名称类型描述默认值必填
client_idstringOAuth2客户端ID。
client_secret_filestring包含OAuth2客户端密的钥的文件。
client_secretsecretOAuth2客户端密钥。
endpoint_paramsmap(string)追加到令牌URL的可选参数。
proxy_urlstring通过HTTP代理发送请求。
no_proxystring逗号分隔的IP地址、CIDR表示法和域名列表,将它们排除在代理之外。
proxy_from_environmentbool使用环境变量指示的代理URL。false
proxy_connect_headermap(list(secret))在连接请求期间发送到代理的头信息。
scopeslist(string)要认证的作用域列表。
token_urlstring从该URL获取令牌的URL。

client_secretclient_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_urlno_proxy

proxy_connect_header只有在已配置proxy_urlproxy_from_environment时才应配置。

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_namestring使用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)

queue_config块(实验性)

可选的queue_config块配置,当启用WAL时,如何将底层客户端队列发送到Loki的日志批次。有关更多信息,请参阅Write-Ahead block

以下参数受支持

名称类型描述默认值必填
capacitystring控制底层发送队列缓冲区的大小。这个设置应该被视为内存消耗的最坏情况,其中所有入队的批次都是满的。10MiB
drain_timeoutduration配置客户端在关闭时可以用来清空发送队列的最大时间。在这段时间内,它将入队挂起的批次并清空发送队列,依次发送。"1m"

wal block(实验性)

可选的wal块配置Loki远程写入客户端中使用的预写日志(WAL)。要启用WAL,必须在配置中包括wal块。当启用WAL时,发送到loki.write组件的日志条目首先写入dir目录下的WAL,然后读入远程写入客户端。当条目达到此组件时,此过程提供了持久性保证。客户端使用以下两种机制来知道何时从WAL读取

  • loki.write组件的WAL写入端通知读取端有新数据可读。
  • loki.write组件的WAL读取端会定期检查是否有新数据,等待时间在min_read_frequencymax_read_frequency之间呈指数增加。

WAL位于Albert配置使用的存储路径相对于特定组件的目录中。有关如何更改存储路径,请参阅alloy run文档

以下参数受支持

名称类型描述默认值必填
enabledbool是否启用WAL。false
max_segment_agedurationWAL段允许存在的最大时间。超过此设置的段最终将被删除。"1h"
min_read_frequencyduration备份读取机制中的最小回退时间。"250ms"
max_read_frequencyduration备份读取机制中的最大回退时间。"1s"
drain_timeoutduration在强制停止之前,WAL排空程序可以持续的最大时间。"30s"

导出字段

以下字段被导出,并且可以被其他组件引用

名称类型描述
receiverLogsReceiver其他组件可以使用它来发送日志条目的值。

组件健康

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实例。

alloy
loki.write "local" {
    endpoint {
        url = "http://loki:3100/loki/api/v1/push"
    }
}

将日志条目发送到托管服务

您可以使用一个 loki.write 组件将日志条目发送到托管服务,例如 Grafana Cloud。在此示例中,通过环境变量注入Loki用户名和 Grafana Cloud API密钥。

alloy
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 具有可以被以下组件消耗的导出

注意

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