菜单
一般可用性 (GA)

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

该组件公开了一些内部标签,可用于重新标记。下表描述了来自任何来源的记录中可用的内部标签。

名称描述示例
__aws_firehose_request_idData Firehose 请求 ID。a1af4300-6c09-4916-ba8f-12f336176246
__aws_firehose_source_arnData 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

有关显示如何使用这些标签丰富每个日志条目的完整配置示例,请参阅示例

用法

alloy
loki.source.awsfirehose "<LABEL>" {
    http {
        listen_address = "<LISTEN_ADDRESS>"
        listen_port = "<PORT>"
    }
    forward_to = RECEIVER_LIST
}

该组件在配置的端口和地址上启动一个 HTTP 服务器,并具有以下端点

您可以使用 `X-Amz-Firehose-Common-Attributes` 标头来设置额外的静态标签。您可以在 Data Firehose 交付流配置的 **Parameters** 部分配置标头。标签名称必须以 `lbl_` 为前缀。前缀在标签存储在日志条目之前被删除。标签名称和标签值必须与 Prometheus 数据模型 规范兼容。

包含两个自定义标签的有效 X-Amz-Firehose-Common-Attributes 值的示例

json
{
  "commonAttributes": {
    "lbl_label1": "value1",
    "lbl_label2": "value2"
  }
}

参数

您可以对 loki.source.awsfirehose 使用以下参数

名称类型描述默认值必需
forward_tolist(LogsReceiver)要将日志条目发送到的接收器列表。
access_keysecret如果设置,则要求 Data Firehose 提供匹配的密钥。""
relabel_rulesRelabelRules要应用于日志条目的重新标记规则。{}
use_incoming_timestampbool是否使用从请求接收的时间戳。

relabel_rules 字段可以使用 loki.relabel 组件中的 `rules` 导出值,以便在将日志条目转发到 `forward_to` 中的接收器列表之前,对日志条目应用一个或多个重新标记规则。

您可以对 loki.source.awsfirehose 使用以下块

名称描述必需
grpc配置接收请求的 gRPC 服务器。
http配置接收请求的 HTTP 服务器。

grpc

grpc 块配置 gRPC 服务器。

您可以使用以下参数来配置 grpc 块。任何省略的字段都将采用其默认值。

名称类型描述默认值必需
conn_limitint最大同时 HTTP 连接数。默认为无限制。0
listen_addressstring服务器侦听新连接的网络地址。 默认情况下,它接受所有传入连接。""
listen_portint服务器侦听新连接的端口号。 默认为随机空闲端口。0
max_connection_age_gracedurationmax_connection_age 之后的一个附加周期,在此周期之后,连接将被强制关闭。"infinity"
max_connection_ageduration连接在关闭之前可能存在的最长时间的持续时间。"infinity"
max_connection_idleduration空闲连接关闭后的持续时间。"infinity"
server_max_concurrent_streamsintgRPC 调用的并发流数量限制(0 = 无限制)。100
server_max_recv_msg_sizeint此服务器可以接收的 gRPC 消息大小限制(字节)。4MB
server_max_send_msg_sizeint此服务器可以发送的 gRPC 消息大小限制(字节)。4MB

http

http 块配置 HTTP 服务器。

您可以使用以下参数来配置 http 块。任何省略的字段都将采用其默认值。

名称类型描述默认值必需
conn_limitint最大同时 HTTP 连接数。默认为无限制。0
listen_addressstring服务器侦听新连接的网络地址。 默认情况下,它接受所有传入连接。""
listen_portint服务器侦听新连接的端口号。8080
server_idle_timeoutdurationHTTP 服务器的空闲超时。"120s"
server_read_timeoutdurationHTTP 服务器的读取超时。"30s"
server_write_timeoutdurationHTTP 服务器的写入超时。"30s"

导出字段

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

alloy
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,
    ]
}

替换以下内容

  • <用户名>: 您的用户名。
  • <密码文件>: 您的密码文件。

作为另一个示例,如果您正在接收来自 CloudWatch 日志订阅的记录,则可以通过重新标记内部标签来丰富每个接收到的条目。以下配置基于上述配置构建,但将原始日志流和组分别保留为 `log_stream` 和 `log_group`。

alloy
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 = []
}

替换以下内容

  • <用户名>: 您的用户名。
  • <密码文件>: 您的密码文件。

兼容的组件

loki.source.awsfirehose 可以接受来自以下组件的参数

  • 导出 Loki LogsReceiver 的组件

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。