菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow lokibreadcrumb arrow loki.source.awsfirehose
开源

loki.source.awsfirehose

loki.source.awsfirehose 通过 HTTP 接收来自 AWS Firehose 的日志条目并将其转发到其他 loki.* 组件。

公开的 HTTP API 与 Firehose HTTP Delivery API 兼容。由于 AWS Firehose 使用 HTTP 传输数据时采用的 API 模型足够通用,因此相同的组件可以用于接收来自多个来源的数据。

该组件使用启发式算法尝试从每个日志记录中解码尽可能多的信息,如果失败则将原始记录写入Loki。解码过程如下

  • AWS Firehose发送批量请求
  • 每个记录单独处理
  • 对于每个请求中接收到的record

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

名称描述示例
__aws_firehose_request_idFirehose请求ID。a1af4300-6c09-4916-ba8f-12f336176246
__aws_firehose_source_arnFirehose传输流ARN。arn:aws:firehose:us-east-2:123:deliverystream/aws_firehose_test_stream

如果Firehose记录的来源是CloudWatch日志,则请求将进一步解码并添加更多标签,如下所示

名称描述示例
__aws_owner原始日志数据的AWS账户ID。111111111111
__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日志可能会发出具有CONTROL_MESSAGE类型的Kinesis Data Streams记录,主要用于检查目标是否可达。DATA_MESSAGE

请参考示例以获取如何使用这些标签丰富每个日志条目的完整配置示例。

用法

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

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

您可以使用X-Amz-Firehose-Common-Attributes头设置额外的静态标签。您可以在Amazon Data Firehose传输流配置的参数部分配置该头。标签名称必须以lbl_前缀开头。在标签存储到日志条目之前,将移除前缀。标签名称和标签值必须与Prometheus数据模型规范兼容。

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

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

参数

loki.source.awsfirehose 支持以下参数

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

relabel_rules 字段中,可以使用来自 loki.relabel 组件的 rules 导出值来应用一个或多个重命名规则,在将日志条目转发到 forward_to 中的接收者列表之前。

loki.source.awsfirehose 定义内部支持以下块

层次结构名称描述必需
HTTPHTTP配置接收请求的 HTTP 服务器。
grpcgrpc配置接收请求的 gRPC 服务器。

HTTP

http 块配置 HTTP 服务器。

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

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

grpc

grpc 块配置 gRPC 服务器。

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

名称类型描述默认值必需
conn_limitint同时进行的最大 HTTP 连接数。默认为无限制。0
listen_address字符串服务器监听新连接的网络地址。默认为接受所有传入连接。""
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

导出字段

loki.source.awsfirehose 不导出任何字段。

组件健康

loki.source.awsfirehose 仅在给定无效配置时报告为不健康。

调试指标

以下是一些在使用此组件时暴露的指标。

注意

指标包括诸如 status_code 等标签,您可以使用这些标签来衡量请求的成功率。
  • loki_source_awsfirehose_request_errors (计数器):接收请求时的错误计数。
  • loki_source_awsfirehose_record_errors (计数器):解码单个记录时的错误计数。
  • loki_source_awsfirehose_records_received (计数器):接收到的记录计数。
  • loki_source_awsfirehose_batch_size(直方图):每次请求接收的记录数(以单位计)。
  • loki_source_awsfirehose_invalid_static_labels_errors(计数器):处理 AWS Firehose 静态标签时发生的错误数量。

示例

以下示例在 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 = "<your username>"
            password_file = "<your 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_streamlog_group

alloy
loki.write "local" {
    endpoint {
        url = "http://loki:3100/api/v1/push"
        basic_auth {
            username = "<your username>"
            password_file = "<your 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 可以接受以下组件的参数

注意

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