loki.source.awsfirehose
loki.source.awsfirehose
通过 HTTP 从 Amazon Data Firehose 接收日志条目,并将其转发给其他 loki.*
组件。
暴露的 HTTP API 与 Data Firehose HTTP Delivery API 兼容。由于 Data Firehose 通过 HTTP 传输数据的 API 模型具有通用性,因此可以使用相同的组件接收来自多个来源的数据
该组件使用启发式方法尝试从每个日志记录中解码尽可能多的信息,并在失败时回退到将原始记录写入 Loki。解码过程如下
- Data Firehose 发送批量请求
- 每个记录单独处理
- 对于每个请求中接收到的每个
record
- 如果
record
来自 CloudWatch 日志订阅过滤器,则对其进行解码并将每个日志事件写入 Loki - 所有其他记录都按原始格式写入 Loki
- 如果
该组件暴露了一些内部标签,可用于重新打标签。下表描述了来自任何来源的记录中可用的内部标签。
名称 | 描述 | 示例 |
---|---|---|
__aws_firehose_request_id | Data Firehose 请求 ID。 | a1af4300-6c09-4916-ba8f-12f336176246 |
__aws_firehose_source_arn | Data Firehose 传输流 ARN。 | arn:aws:firehose:us-east-2:123:deliverystream/aws_firehose_test_stream |
如果 Data Firehose 记录的来源是 CloudWatch 日志,则请求将进一步解码并使用更多标签进行丰富,如下所示
名称 | 描述 | 示例 |
---|---|---|
__aws_cw_log_group | 原始日志数据的日志组名称。 | CloudTrail/logs |
__aws_cw_log_stream | 原始日志数据的日志流名称。 | 111111111111_CloudTrail/logs_us-east-1 |
__aws_cw_matched_filters | 与原始日志数据匹配的订阅过滤器名称列表。列表以逗号分隔。 | Destination,Destination2 |
__aws_cw_msg_type | 数据消息使用 DATA_MESSAGE 类型。有时 CloudWatch Logs 可能会发出类型为 CONTROL_MESSAGE 的 Amazon Kinesis Data Streams 记录,主要用于检查目标是否可达。 | DATA_MESSAGE |
__aws_owner | 原始日志数据的 AWS 账户 ID。 | 111111111111 |
有关如何使用这些标签丰富每个日志条目的完整配置示例,请参阅示例。
用法
loki.source.awsfirehose "<LABEL>" {
http {
listen_address = "<LISTEN_ADDRESS>"
listen_port = "<PORT>"
}
forward_to = RECEIVER_LIST
}
该组件在配置的端口和地址上启动一个 HTTP 服务器,提供以下端点
/awsfirehose/api/v1/push
- 接受与 Data Firehose HTTP 规范 兼容的POST
请求。
您可以使用 X-Amz-Firehose-Common-Attributes 请求头设置额外的静态标签。您可以在 Data Firehose 传输流配置的 Parameters 部分配置此请求头。标签名称必须以 lbl_
为前缀。前缀会在标签存储到日志条目之前移除。标签名称和标签值必须与 Prometheus 数据模型 规范兼容。
包含两个自定义标签的有效 X-Amz-Firehose-Common-Attributes
值的示例
{
"commonAttributes": {
"lbl_label1": "value1",
"lbl_label2": "value2"
}
}
参数
您可以在 loki.source.awsfirehose
中使用以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
forward_to | list(LogsReceiver) | 要发送日志条目的接收器列表。 | 是 | |
access_key | secret | 如果设置,则要求 Data Firehose 提供匹配的密钥。 | "" | 否 |
relabel_rules | RelabelRules | 应用于日志条目的重新打标签规则。 | {} | 否 |
use_incoming_timestamp | bool | 是否使用从请求接收到的时间戳。 | false | 否 |
relabel_rules
字段可以使用 [loki.relabel
](../loki.relabel/) 组件导出的 rules
值,在将日志条目转发到 forward_to
中的接收器列表之前应用一个或多个重新打标签规则。
块
您可以在 loki.source.awsfirehose
中使用以下块
名称 | 描述 | 必需 |
---|---|---|
grpc | 配置接收请求的 gRPC 服务器。 | 否 |
http | 配置接收请求的 HTTP 服务器。 | 否 |
grpc
grpc
块用于配置 gRPC 服务器。
您可以使用以下参数配置 grpc
块。任何被省略的字段都将采用其默认值。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
conn_limit | int | 最大并发 HTTP 连接数。默认为无限制。 | 0 | 否 |
listen_address | string | 服务器监听新连接的网络地址。默认为接受所有传入连接。 | "" | 否 |
listen_port | int | 服务器监听新连接的端口号。默认为随机空闲端口。 | 0 | 否 |
max_connection_age_grace | duration | 在 max_connection_age 之后,连接会被强制关闭的附加时间段。 | "infinity" | 否 |
max_connection_age | duration | 连接在关闭前的最长持续时间。 | "infinity" | 否 |
max_connection_idle | duration | 空闲连接关闭后的持续时间。 | "infinity" | 否 |
server_max_concurrent_streams | int | gRPC 调用的最大并发流数限制(0 = 无限制)。 | 100 | 否 |
server_max_recv_msg_size | int | 此服务器可以接收的 gRPC 消息大小限制(字节)。 | 4MB | 否 |
server_max_send_msg_size | int | 此服务器可以发送的 gRPC 消息大小限制(字节)。 | 4MB | 否 |
http
http
块用于配置 HTTP 服务器。
您可以使用以下参数配置 http
块。任何被省略的字段都将采用其默认值。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
conn_limit | int | 最大并发 HTTP 连接数。默认为无限制。 | 0 | 否 |
listen_address | string | 服务器监听新连接的网络地址。默认为接受所有传入连接。 | "" | 否 |
listen_port | int | 服务器监听新连接的端口号。 | 8080 | 否 |
server_idle_timeout | duration | HTTP 服务器的空闲超时时间。 | "120s" | 否 |
server_read_timeout | duration | HTTP 服务器的读取超时时间。 | server_write_timeout | 否 |
HTTP 服务器的写入超时时间。 | duration | 导出的字段 | server_write_timeout | 否 |
loki.source.awsfirehose
不导出任何字段。
组件健康状态
只有在给定无效配置时,loki.source.awsfirehose
才会被报告为不健康。
调试指标
使用此组件时,会暴露以下一些指标。
注意
相关指标包含诸如
status_code
等标签,您可以使用这些标签来衡量请求成功率。
loki_source_awsfirehose_batch_size
(直方图):每个请求接收到的记录数的大小(单位)。
loki_source_awsfirehose_invalid_static_labels_errors
(计数器):处理 Data Firehose 静态标签时发生的错误计数。loki_source_awsfirehose_record_errors
(计数器):解码单个记录时发生的错误计数。loki_source_awsfirehose_records_received
(计数器):接收到的记录计数。loki_source_awsfirehose_request_errors
(计数器):接收请求时发生的错误计数。- 此示例在地址
0.0.0.0
和端口9999
上启动一个 HTTP 服务器。服务器接收日志条目并将其转发给loki.write
组件。loki.write
组件使用提供的基本认证凭据将日志发送到指定的 Loki 实例。
示例
替换以下内容
loki.write "local" {
endpoint {
url = "http://loki:3100/api/v1/push"
basic_auth {
username = "<USERNAME>"
password_file = "<PASSWORD_FILE>"
}
}
}
loki.source.awsfirehose "loki_fh_receiver" {
http {
listen_address = "0.0.0.0"
listen_port = 9999
}
forward_to = [
loki.write.local.receiver,
]
}
_<USERNAME>
_: 您的用户名。
- _
<PASSWORD_FILE>
_: 您的密码文件。 - 另一个示例是,如果您接收来自 CloudWatch 日志订阅的记录,则可以通过重新打标签内部标签来丰富每个接收到的条目。以下配置基于上述配置构建,但将原始日志流和组分别保留为
log_stream
和log_group
。
loki.source.awsfirehose
可以接受来自以下组件的参数
loki.write "local" {
endpoint {
url = "http://loki:3100/api/v1/push"
basic_auth {
username = "<USERNAME>"
password_file = "<PASSWORD_FILE>"
}
}
}
loki.source.awsfirehose "loki_fh_receiver" {
http {
listen_address = "0.0.0.0"
listen_port = 9999
}
forward_to = [
loki.write.local.receiver,
]
relabel_rules = loki.relabel.logging_origin.rules
}
loki.relabel "logging_origin" {
rule {
action = "replace"
source_labels = ["__aws_cw_log_group"]
target_label = "log_group"
}
rule {
action = "replace"
source_labels = ["__aws_cw_log_stream"]
target_label = "log_stream"
}
forward_to = []
}
_<USERNAME>
_: 您的用户名。
- _
<PASSWORD_FILE>
_: 您的密码文件。 - 另一个示例是,如果您接收来自 CloudWatch 日志订阅的记录,则可以通过重新打标签内部标签来丰富每个接收到的条目。以下配置基于上述配置构建,但将原始日志流和组分别保留为
log_stream
和log_group
。
兼容组件
导出 Loki LogsReceiver
的组件
- 连接某些组件可能不合理,或者组件可能需要进一步配置才能使其连接正常工作。有关更多详细信息,请参阅链接的文档。
相关指标包含诸如
status_code
等标签,您可以使用这些标签来衡量请求成功率。此页面有帮助吗?