菜单
开源

faro.receiver

faro.receiver 接收来自 Grafana Faro Web SDK 的 Web 应用程序遥测数据,并将其转发到其他组件以进行后续处理。

使用方法

alloy
faro.receiver "LABEL" {
    output {
        logs   = [LOKI_RECEIVERS]
        traces = [OTELCOL_COMPONENTS]
    }
}

参数

以下参数受支持

名称类型描述默认值必需
extra_log_labelsmap(string)附加到发出日志行的额外标签。{}no

以下块在 faro.receiver 的定义内部受支持

层次结构描述必需
serverserver配置 HTTP 服务器。no
server > rate_limitingrate_limiting配置 HTTP 服务器速率限制。no
sourcemapssourcemaps配置 sourcemap 获取。no
sourcemaps > locationlocation配置 sourcemap 获取的磁盘位置。no
outputoutput配置收集的遥测数据发送到何处。yes

server 块

server 块配置由 faro.receiver 组件管理的 HTTP 服务器。使用 Grafana Faro Web SDK 的客户端将遥测数据转发到此 HTTP 服务器进行处理。

名称类型描述默认值必需
listen_address字符串监听HTTP流量的地址。127.0.0.1no
listen_port数字监听HTTP流量的端口。12347no
cors_allowed_origins字符串列表允许跨源请求的源。[]no
api_key密钥可选的API密钥,用于验证客户端请求。""no
max_allowed_payload_size字符串客户端请求的最大大小(以字节为单位)。"5MiB"no
include_metadata布尔值将传入连接的元数据传播到下游消费者。falseno

默认情况下,遥测数据仅从与浏览器同一本地网络上的应用程序接受。要从更广泛的客户端接受遥测数据,将listen_address属性修改为要使用的适当网络接口的IP地址。

cors_allowed_origins参数确定浏览器请求可能来自哪些源。默认值[]禁用CORS支持。要支持来自所有源的请求,将cors_allowed_origins设置为["*"]。星号字符表示通配符。

api_key参数非空时,客户端请求必须有一个名为X-API-Key的HTTP头,其值与api_key参数的值匹配。缺少头或包含错误值的请求将被拒绝,返回HTTP 401 Unauthorized状态码。如果api_key参数为空,则不执行身份验证检查,并忽略X-API-Key HTTP头。

rate_limiting block

rate_limiting块配置客户端请求的速率限制。

名称类型描述默认值必需
enabled布尔值是否启用速率限制。trueno
rate数字每秒允许的请求数量。50no
burst_size数字请求的允许突发大小。100no

速率限制作为一个令牌桶算法运行,其中桶的最大容量为burst_size个请求,并且以每秒rate的速度补充。

每个HTTP请求会消耗桶中的一个容量。一旦桶为空,HTTP请求会以HTTP 429 Too Many Requests状态码被拒绝,直到桶有更多的可用容量。

配置rate参数确定桶补充的速度,配置burst_size参数确定在桶为空并开始拒绝请求之前可以接收多少个请求。

sourcemaps block

sourcemaps块配置如何检索sourcemaps。然后使用sourcemaps将压缩代码中的文件和行信息转换为原始源代码中的文件和行信息。

名称类型描述默认值必需
download布尔值是否下载sourcemaps。trueno
download_from_origins字符串列表从哪些源下载sourcemaps。["*"]no
download_timeout持续时间下载sourcemaps时的超时时间。"1s"no

当异常发送到faro.receiver组件时,它可以从Web应用程序下载sourcemaps。您可以通过将download参数设置为false来禁用此行为。

download_from_origins参数确定可以从哪些源下载sourcemaps。源附加到浏览器从其中发送遥测数据的URL。默认值["*"]启用从所有源下载sourcemaps。星号字符表示通配符。

默认情况下,sourcemaps下载受"1s"超时限制,由download_timeout参数指定。将download_timeout设置为"0s"禁用超时。

要从磁盘而不是网络检索源映射,请指定一个或多个 location。当提供 location 块时,将首先检查这些块以查找源映射,然后再回退到下载。

location 块

location 块声明了在文件系统中存储源映射的位置。可以通过指定多次 location 块来声明多个存储源映射的位置。

名称类型描述默认值必需
路径字符串存储源映射的磁盘上的路径。yes
minified_path_prefix字符串从浏览器发送的压缩路径的前缀。yes

minified_path_prefix 参数决定了 JavaScript 文件路径的前缀,例如 http://example.com/。然后,path 参数将决定如何找到文件的源映射。

例如,给定以下 location 块

location {
    path                 = "/var/my-app/build"
    minified_path_prefix = "http://example.com/"
}

要查找位于 http://example.com/foo.js 的文件的源映射,faro.receiver 组件将

  1. 移除压缩路径前缀以提取文件的路径(foo.js)。
  2. path 中搜索具有 .map 扩展名的该文件路径(foo.js.map)(例如 /var/my-app/build/foo.js.map)。

可选地,path 参数的值可以包含模板值 {{ .Release }},例如 /var/my-app/{{ .Release }}/build。模板值将被 Faro Web App SDK 提供的发布值替换。

output 块

output 块指定了收集到的日志和跟踪的转发位置。

名称类型描述默认值必需
日志list(LogsReceiver)要转发日志的 loki 组件列表。[]no
跟踪list(otelcol.Consumer)要转发跟踪的 otelcol 组件列表。[]no

导出字段

faro.receiver 不导出任何字段。

组件健康状态

当集成服务器启动失败时,faro.receiver 被报告为不健康。

调试信息

faro.receiver 不暴露任何特定于组件的调试信息。

调试指标

faro.receiver 暴露以下指标以监控组件

  • faro_receiver_logs_total(计数器):已摄取日志的总数。
  • faro_receiver_measurements_total(计数器):已摄取测量的总数。
  • faro_receiver_exceptions_total(计数器):已摄取异常的总数。
  • faro_receiver_events_total(计数器):已摄取事件的总数。
  • faro_receiver_exporter_errors_total(计数器):内部导出器产生的错误总数。
  • faro_receiver_request_duration_seconds(直方图):处理 HTTP 请求花费的时间(以秒为单位)。
  • faro_receiver_request_message_bytes(直方图):来自客户端接收到的 HTTP 请求的大小(以字节为单位)。
  • faro_receiver_response_message_bytes(直方图):发送给客户端的 HTTP 响应的大小(以字节为单位)。
  • faro_receiver_inflight_requests(仪表盘):当前正在进行的请求数量。
  • faro_receiver_sourcemap_cache_size(计数器):每个源源映射缓存中的项目数量。
  • faro_receiver_sourcemap_downloads_total(计数器):每个源和状态下执行的源映射下载总数。
  • faro_receiver_sourcemap_file_reads_total(计数器):每个源和状态下使用文件系统检索源映射的总数。

示例

alloy
faro.receiver "default" {
    server {
        listen_address = "NETWORK_ADDRESS"
    }

    sourcemaps {
        location {
            path                 = "PATH_TO_SOURCEMAPS"
            minified_path_prefix = "WEB_APP_PREFIX"
        }
    }

    output {
        logs   = [loki.write.default.receiver]
        traces = [otelcol.exporter.otlp.traces.input]
    }
}

loki.write "default" {
    endpoint {
        url = "https://LOKI_ADDRESS/loki/api/v1/push"
    }
}

otelcol.exporter.otlp "traces" {
    client {
        endpoint = "OTLP_ADDRESS"
    }
}

替换以下

  • NETWORK_ADDRESS:要监听流量的网络接口的 IP 地址。此 IP 地址必须可通过使用 Web 应用程序进行仪器化的浏览器访问。

  • PATH_TO_SOURCEMAPS:源映射所在的磁盘上的路径。

  • WEB_APP_PREFIX:正在被测量的 Web 应用程序的前缀。

  • LOKI_ADDRESS:要发送日志的 Loki 服务器的地址。

    • 如果需要通过 Loki 服务器发送日志进行身份验证,请参阅 loki.write 的文档以获取更多信息。
  • OTLP_ADDRESS:发送跟踪的 OTLP 兼容服务器的地址。

    • 如果需要认证才能将日志发送到 Loki 服务器,请参阅 otelcol.exporter.otlp 的文档以获取更多信息。

兼容组件

faro.receiver 可以接受以下组件的参数

注意

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