菜单
文档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
    • 如果record来自CloudWatch日志订阅过滤器,则对其进行解码,并将每个日志事件写入Loki
    • 所有其他记录都以原始形式写入Loki

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

名称描述示例
__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)要发送日志条目的接收器列表。yes
use_incoming_timestampbool是否使用从请求中接收的时间戳。falseno
relabel_rulesRelabelRules应用于日志条目的重命名规则。{}no
access_keysecret如果设置,则要求AWS Firehose提供匹配的密钥。""no

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

以下块支持在loki.source.awsfirehose定义中

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

HTTP

http块配置HTTP服务器。

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

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

grpc

grpc块配置gRPC服务器。

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

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

导出字段

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可以从以下组件接受参数

注意

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