<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>faro on Grafana Labs</title><link>https://grafana.com/docs/alloy/v1.20/reference/components/faro/</link><description>Recent content in faro on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/alloy/v1.20/reference/components/faro/index.xml" rel="self" type="application/rss+xml"/><item><title>faro.receiver</title><link>https://grafana.com/docs/alloy/v1.20/reference/components/faro/faro.receiver/</link><pubDate>Wed, 14 Oct 2026 20:19:24 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.20/reference/components/faro/faro.receiver/</guid><content><![CDATA[&lt;h1 id=&#34;faroreceiver&#34;&gt;&lt;code&gt;faro.receiver&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;faro.receiver&lt;/code&gt; accepts web application telemetry data from the &lt;a href=&#34;https://github.com/grafana/faro-web-sdk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana Faro Web SDK&lt;/a&gt; and forwards it to other components for processing.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;This component does not work with &lt;a href=&#34;/products/cloud/frontend-observability/&#34;&gt;Grafana Cloud Frontend Observability&lt;/a&gt;.
For more information, refer to the &lt;a href=&#34;../../../../collect/choose-component/#frontend-telemetry&#34;&gt;Choose a component&lt;/a&gt; guide.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;faro.receiver &amp;#34;&amp;lt;LABEL&amp;gt;&amp;#34; {
    output {
        logs   = [&amp;lt;LOKI_RECEIVERS&amp;gt;]
        traces = [&amp;lt;OTELCOL_COMPONENTS&amp;gt;]
    }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;arguments&#34;&gt;Arguments&lt;/h2&gt;
&lt;p&gt;You can use the following arguments with &lt;code&gt;faro.receiver&lt;/code&gt;:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;extra_log_labels&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;map(string)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Extra labels to attach to emitted log lines.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;log_format&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Export format for the logs.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;logfmt&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;log-format&#34;&gt;Log format&lt;/h3&gt;
&lt;p&gt;The following strings are valid log line formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;json&amp;quot;&lt;/code&gt;: Export logs as JSON objects.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;logfmt&amp;quot;&lt;/code&gt;: Export logs as &lt;a href=&#34;https://brandur.org/logfmt&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;logfmt&lt;/code&gt;&lt;/a&gt; lines.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;blocks&#34;&gt;Blocks&lt;/h2&gt;
&lt;p&gt;You can use the following blocks with &lt;code&gt;faro.receiver&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;config-app&#34; style=&#34;--config-tree-row-count: 6;&#34; x3-data=&#34;configVisualizer(&amp;#34;\u003csection class=\&amp;#34;expand-table-wrapper\&amp;#34;\u003e\u003cdiv class=\&amp;#34;button-div\&amp;#34;\u003e\n      \u003cbutton class=\&amp;#34;expand-table-btn\&amp;#34;\u003eExpand table\u003c/button\u003e\n    \u003c/div\u003e\u003cdiv class=\&amp;#34;responsive-table-wrapper\&amp;#34;\u003e\n    \u003ctable\u003e\n      \u003cthead\u003e\n          \u003ctr\u003e\n              \u003cth\u003eBlock\u003c/th\u003e\n              \u003cth\u003eDescription\u003c/th\u003e\n              \u003cth\u003eRequired\u003c/th\u003e\n          \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e\u003ca href=\&amp;#34;#output\&amp;#34;\u003e\u003ccode\u003eoutput\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n              \u003ctd\u003eConfigures where to send collected telemetry data.\u003c/td\u003e\n              \u003ctd\u003eyes\u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e\u003ca href=\&amp;#34;#server\&amp;#34;\u003e\u003ccode\u003eserver\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n              \u003ctd\u003eConfigures the HTTP server.\u003c/td\u003e\n              \u003ctd\u003eno\u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e\u003ccode\u003eserver\u003c/code\u003e \u0026gt;  \u003ca href=\&amp;#34;#rate_limiting\&amp;#34;\u003e\u003ccode\u003erate_limiting\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n              \u003ctd\u003eConfigures rate limiting for the HTTP server.\u003c/td\u003e\n              \u003ctd\u003eno\u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e\u003ca href=\&amp;#34;#sourcemaps\&amp;#34;\u003e\u003ccode\u003esourcemaps\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n              \u003ctd\u003eConfigures sourcemap retrieval.\u003c/td\u003e\n              \u003ctd\u003eno\u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e\u003ccode\u003esourcemaps\u003c/code\u003e \u0026gt; \u003ca href=\&amp;#34;#cache\&amp;#34;\u003e\u003ccode\u003ecache\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n              \u003ctd\u003eConfigures sourcemap caching behavior.\u003c/td\u003e\n              \u003ctd\u003eno\u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e\u003ccode\u003esourcemaps\u003c/code\u003e \u0026gt;  \u003ca href=\&amp;#34;#location\&amp;#34;\u003e\u003ccode\u003elocation\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n              \u003ctd\u003eConfigures the location for sourcemap retrieval.\u003c/td\u003e\n              \u003ctd\u003eno\u003c/td\u003e\n          \u003c/tr\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/section\u003e&amp;#34;)&#34;&gt;
  &lt;noscript&gt;
    &lt;div class=&#34;config-app__noscript&#34;&gt;&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Block&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;#output&#34;&gt;&lt;code&gt;output&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;Configures where to send collected telemetry data.&lt;/td&gt;
              &lt;td&gt;yes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;#server&#34;&gt;&lt;code&gt;server&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;Configures the HTTP server.&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;server&lt;/code&gt; &amp;gt;  &lt;a href=&#34;#rate_limiting&#34;&gt;&lt;code&gt;rate_limiting&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;Configures rate limiting for the HTTP server.&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;#sourcemaps&#34;&gt;&lt;code&gt;sourcemaps&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;Configures sourcemap retrieval.&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;sourcemaps&lt;/code&gt; &amp;gt; &lt;a href=&#34;#cache&#34;&gt;&lt;code&gt;cache&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;Configures sourcemap caching behavior.&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;sourcemaps&lt;/code&gt; &amp;gt;  &lt;a href=&#34;#location&#34;&gt;&lt;code&gt;location&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;Configures the location for sourcemap retrieval.&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;/div&gt;
  &lt;/noscript&gt;
  &lt;main class=&#34;config-app__main&#34;&gt;
    &lt;template x3-if=&#34;flatBlocks.length === 0&#34;&gt;
      &lt;div class=&#34;empty-state&#34;&gt;
        &lt;div class=&#34;empty-state__icon&#34; x3-html=&#34;icons.AlertCircle&#34;&gt;&lt;/div&gt;
        &lt;p&gt;No valid configuration blocks found.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/template&gt;

    &lt;template x3-if=&#34;flatBlocks.length &gt; 0&#34;&gt;
      &lt;div class=&#34;config-tree&#34;&gt;
        &lt;div class=&#34;config-tree__toolbar&#34;&gt;
          &lt;div class=&#34;config-tree__title&#34;&gt;&lt;/div&gt;
          &lt;button
            class=&#34;tree-explorer__button w-130 text-right&#34;
            x3-on:click=&#34;toggleExpandAll&#34;
            x3-bind:title=&#34;allExpanded ? &#39;Collapse all&#39; : &#39;Expand all&#39;&#34;
          &gt;
            &lt;span x3-text=&#34;allExpanded ? &#39;Collapse all&#39; : &#39;Expand all&#39;&#34;&gt;&lt;/span&gt;
            &lt;svg class=&#34;api-icon&#34; viewBox=&#34;0 0 24 24&#34;&gt;
              &lt;path x3-show=&#34;!allExpanded&#34; d=&#34;m6 9 6 6 6-6&#34; /&gt;
              &lt;path x3-show=&#34;allExpanded&#34; d=&#34;m18 15-6-6-6 6&#34; /&gt;
            &lt;/svg&gt;
          &lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&#34;nodes-container&#34;&gt;
          &lt;template x3-for=&#34;block in flatBlocks&#34; x3-bind:key=&#34;block.id&#34;&gt;
            &lt;div class=&#34;node&#34; x3-bind:class=&#34;isNodeVisible(block) ? &#39;node--visible&#39; : &#39;node--hidden&#39;&#34;&gt;
              &lt;div
                class=&#34;node__row&#34;
                x3-bind:class=&#34;getRowClass(block)&#34;
                x3-bind:style=&#34;`padding-left: ${block.level * 24 &#43; 16}px`&#34;
                x3-on:click=&#34;toggleNode(block.id)&#34;
              &gt;
                &lt;div class=&#34;node__left&#34;&gt;
                  &lt;div class=&#34;node__indicator&#34;&gt;
                    &lt;template x3-if=&#34;block.hasChildren&#34;&gt;
                      &lt;button type=&#34;button&#34; class=&#34;node__toggle&#34; x3-on:click.stop=&#34;toggleNode(block.id)&#34;&gt;
                        &lt;div
                          class=&#34;node__toggle-icon&#34;
                          x3-bind:class=&#34;block.expanded ? &#39;node__toggle-icon--expanded&#39; : &#39;&#39;&#34;
                          x3-html=&#34;icons.ChevronDown&#34;
                        &gt;&lt;/div&gt;
                      &lt;/button&gt;
                    &lt;/template&gt;
                    &lt;template x3-if=&#34;!block.hasChildren&#34;&gt;
                      &lt;div class=&#34;node__toggle-spacer&#34;&gt;&lt;/div&gt;
                    &lt;/template&gt;
                  &lt;/div&gt;

                  &lt;div class=&#34;node__content&#34;&gt;
                    &lt;div
                      class=&#34;node__title prose&#34;
                      x3-bind:class=&#34;block.level === 0 ? &#39;node__title--root&#39; : &#39;node__title--nested&#39;&#34;
                      x3-html=&#34;block.displayName&#34;
                    &gt;&lt;/div&gt;
                    &lt;div class=&#34;node__description body-xsmall&#34; x3-html=&#34;block.description&#34;&gt;&lt;/div&gt;
                  &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&#34;node__meta&#34;&gt;
                  &lt;span
                    class=&#34;badge&#34;
                    x3-bind:class=&#34;block.required ? &#39;badge--required&#39; : &#39;badge--optional&#39;&#34;
                    x3-text=&#34;block.required ? &#39;Required&#39; : &#39;Optional&#39;&#34;
                  &gt;&lt;/span&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/template&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/template&gt;
  &lt;/main&gt;
&lt;/div&gt;

&lt;h3 id=&#34;output&#34;&gt;&lt;code&gt;output&lt;/code&gt;&lt;/h3&gt;
&lt;span&gt;
  &lt;Badge color=&#34;blue&#34; text=&#34;Required&#34; icon=&#34;question-circle&#34;&gt;&lt;/Badge&gt;
  &lt;/span&gt;


&lt;p&gt;The &lt;code&gt;output&lt;/code&gt; block specifies where to forward collected logs and traces.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;logs&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;list(LogsReceiver)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A list of &lt;code&gt;loki&lt;/code&gt; components to forward logs to.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;traces&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;list(otelcol.Consumer)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A list of &lt;code&gt;otelcol&lt;/code&gt; components to forward traces to.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;server&#34;&gt;&lt;code&gt;server&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;server&lt;/code&gt; block configures the HTTP server managed by the &lt;code&gt;faro.receiver&lt;/code&gt; component.
Clients using the &lt;a href=&#34;https://github.com/grafana/faro-web-sdk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana Faro Web SDK&lt;/a&gt; forward telemetry data to this HTTP server for processing.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;listen_address&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Address to listen for HTTP traffic on.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;listen_port&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Port to listen for HTTP traffic on.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;12347&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;cors_allowed_origins&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;list(string)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Origins for which cross-origin requests are permitted.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;api_key&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Optional API key to validate client requests with.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;max_allowed_payload_size&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Maximum size (in bytes) for client requests.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;5MiB&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;include_metadata&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Propagate incoming connection metadata to downstream consumers.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;By default, telemetry data is only accepted from applications on the same local network as the browser.
To accept telemetry data from a wider set of clients, modify the &lt;code&gt;listen_address&lt;/code&gt; attribute to the IP address of the appropriate network interface to use.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;cors_allowed_origins&lt;/code&gt; argument determines what origins browser requests may come from.
The default value, &lt;code&gt;[]&lt;/code&gt;, disables CORS support.
To support requests from all origins, set &lt;code&gt;cors_allowed_origins&lt;/code&gt; to &lt;code&gt;[&amp;quot;*&amp;quot;]&lt;/code&gt;.
The &lt;code&gt;*&lt;/code&gt; character indicates a wildcard.&lt;/p&gt;
&lt;p&gt;You can use the following headers for cross-domain requests: &lt;code&gt;Content-Type&lt;/code&gt;, &lt;code&gt;Content-Encoding&lt;/code&gt;, &lt;code&gt;Idempotency-Key&lt;/code&gt;, &lt;code&gt;Traceparent&lt;/code&gt;, &lt;code&gt;X-API-Key&lt;/code&gt;, &lt;code&gt;X-Faro-Session-Id&lt;/code&gt;, or &lt;code&gt;X-Scope-OrgID&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Browser clients can read the &lt;code&gt;Retry-After&lt;/code&gt; response header when it&amp;rsquo;s present.
&lt;code&gt;faro.receiver&lt;/code&gt; doesn&amp;rsquo;t generate this header or deduplicate requests based on &lt;code&gt;Idempotency-Key&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The server supports gzip-compressed request bodies.
When a client sends a request with a &lt;code&gt;Content-Encoding: gzip&lt;/code&gt; header, the server automatically decompresses the body before processing.&lt;/p&gt;
&lt;p&gt;When the &lt;code&gt;api_key&lt;/code&gt; argument is non-empty, client requests must have an HTTP header called &lt;code&gt;X-API-Key&lt;/code&gt; matching the value of the &lt;code&gt;api_key&lt;/code&gt; argument.
Requests that are missing the header or have the wrong value are rejected with an &lt;code&gt;HTTP 401 Unauthorized&lt;/code&gt; status code.
If the &lt;code&gt;api_key&lt;/code&gt; argument is empty, no authentication checks are performed, and the &lt;code&gt;X-API-Key&lt;/code&gt; HTTP header is ignored.&lt;/p&gt;
&lt;h4 id=&#34;rate_limiting&#34;&gt;&lt;code&gt;rate_limiting&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;rate_limiting&lt;/code&gt; block configures rate limiting for client requests.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Whether to enable rate limiting.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;strategy&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The strategy to use for rate limiting.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;global&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;rate&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Rate of allowed requests per second.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;50&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;burst_size&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Allowed burst size of requests.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The following &lt;code&gt;strategy&lt;/code&gt; strings are valid:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;global&amp;quot;&lt;/code&gt;: Global rate limiting.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;per_app&amp;quot;&lt;/code&gt;: Application/Environment based rate limiting.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rate limiting functions as a &lt;a href=&#34;https://en.wikipedia.org/wiki/Token_bucket&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;token bucket algorithm&lt;/a&gt;, where a bucket has a maximum capacity for up to &lt;code&gt;burst_size&lt;/code&gt; requests and refills at a rate of &lt;code&gt;rate&lt;/code&gt; per second.&lt;/p&gt;
&lt;p&gt;Each HTTP request drains the capacity of the bucket by one.&lt;/p&gt;
&lt;p&gt;After the bucket is empty, HTTP requests are rejected with an &lt;code&gt;HTTP 429 Too Many Requests&lt;/code&gt; status code until the bucket has more available capacity.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;strategy&lt;/code&gt; is &lt;code&gt;per_app&lt;/code&gt;, rate limiting is applied per application and environment combination instead of globally.&lt;/p&gt;
&lt;p&gt;This prevents one application from affecting the rate limits of other applications sending their data on the same gateway.&lt;/p&gt;
&lt;p&gt;The application and environment are extracted from the Faro payload metadata using the &lt;code&gt;app.name&lt;/code&gt; and &lt;code&gt;app.environment&lt;/code&gt; fields. If these fields are missing, the request shares a rate limiter with other requests that also lack this metadata.&lt;/p&gt;
&lt;p&gt;Configuring the &lt;code&gt;rate&lt;/code&gt; argument determines how fast the bucket refills, and configuring the &lt;code&gt;burst_size&lt;/code&gt; argument determines how many requests can be received in a burst before the bucket is empty and starts rejecting requests.&lt;/p&gt;
&lt;h3 id=&#34;sourcemaps&#34;&gt;&lt;code&gt;sourcemaps&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;sourcemaps&lt;/code&gt; block configures how to retrieve sourcemaps.
Sourcemaps are then used to transform file and line information from minified code into the file and line information from the original source code.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;download&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Whether to download sourcemaps.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;download_from_origins&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;list(string)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Which origins to download sourcemaps from.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;[&amp;quot;*&amp;quot;]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;download_timeout&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;duration&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Timeout when downloading sourcemaps.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;1s&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;When exceptions are sent to the &lt;code&gt;faro.receiver&lt;/code&gt; component, it can download sourcemaps from the web application.
You can disable this behavior by setting the &lt;code&gt;download&lt;/code&gt; argument to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-warning&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;By default, &lt;code&gt;faro.receiver&lt;/code&gt; downloads sourcemaps by requesting any URL that a client includes in its telemetry.
Those requests come from the host that runs Alloy, so any client that reaches the receiver can make Alloy send HTTP or HTTPS requests to any address the host can reach, including internal services.&lt;/p&gt;
&lt;p&gt;If the receiver accepts telemetry from the internet or from other networks that you don&amp;rsquo;t trust, take one or more of the following steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;download&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;, and provide sourcemaps with &lt;a href=&#34;#location&#34;&gt;&lt;code&gt;location&lt;/code&gt; blocks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;download_from_origins&lt;/code&gt; so Alloy downloads sourcemaps only for scripts served from your own origins, and end each origin with a &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Restrict outbound network access from the host that runs Alloy, for example with a network policy or firewall rules, so that it can only reach the destinations it needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;download_from_origins&lt;/code&gt; only restricts the script URLs that Alloy fetches.
It doesn&amp;rsquo;t restrict the sourcemap URL that a script refers to, so restrict outbound network access as well.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;download_from_origins&lt;/code&gt; argument restricts sourcemap downloads to scripts served from the listed origins.
The receiver compares the URL of the script file in each stack frame of the telemetry it receives with these origins.
The client that sends the telemetry sets that URL.
The default value, &lt;code&gt;[&amp;quot;*&amp;quot;]&lt;/code&gt;, enables downloading sourcemaps from all origins.
The &lt;code&gt;*&lt;/code&gt; character indicates a wildcard.&lt;/p&gt;
&lt;p&gt;The receiver matches each origin as a prefix of the full URL, where &lt;code&gt;*&lt;/code&gt; matches any characters, including &lt;code&gt;/&lt;/code&gt;, and &lt;code&gt;?&lt;/code&gt; matches a single character.
End each origin with a &lt;code&gt;/&lt;/code&gt; so that it can&amp;rsquo;t match a longer host name.
For example, the origin &lt;code&gt;https://app.example.com/&lt;/code&gt; doesn&amp;rsquo;t match a script at  &lt;code&gt;https://app.example.com.example.net/app.js&lt;/code&gt;, but the origin &lt;code&gt;https://app.example.com&lt;/code&gt; does.
Avoid using &lt;code&gt;*&lt;/code&gt; in the host part of an origin.
For example, &lt;code&gt;https://*.example.com/&lt;/code&gt; also matches &lt;code&gt;https://example.net/x.example.com/app.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The following example downloads sourcemaps only for scripts served from &lt;code&gt;https://app.example.com/&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;faro.receiver &amp;#34;default&amp;#34; {
    sourcemaps {
        download_from_origins = [&amp;#34;https://app.example.com/&amp;#34;]
    }

    output {
        logs   = [loki.write.default.receiver]
        traces = [otelcol.exporter.otlphttp.traces.input]
    }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;By default, sourcemap downloads are subject to a timeout of &lt;code&gt;&amp;quot;1s&amp;quot;&lt;/code&gt;, specified by the &lt;code&gt;download_timeout&lt;/code&gt; argument.
Setting &lt;code&gt;download_timeout&lt;/code&gt; to &lt;code&gt;&amp;quot;0s&amp;quot;&lt;/code&gt; disables timeouts.&lt;/p&gt;
&lt;p&gt;To retrieve sourcemaps from disk or another network location, specify one or more &lt;a href=&#34;#location&#34;&gt;&lt;code&gt;location&lt;/code&gt; blocks&lt;/a&gt;.
When &lt;code&gt;location&lt;/code&gt; blocks are provided, they&amp;rsquo;re checked first for sourcemaps before falling back to downloading.&lt;/p&gt;
&lt;h4 id=&#34;cache&#34;&gt;&lt;code&gt;cache&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;cache&lt;/code&gt; block configures sourcemap caching behavior.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;cleanup_check_interval&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;duration&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;How often Alloy checks cached sourcemaps for cleanup.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;30s&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;error_cleanup_interval&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;duration&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;How long Alloy waits before retrying a failed source map download.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;1h&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;ttl&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;duration&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;How long Alloy keeps an unused source map in the cache.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;inf&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;no&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;By default, Alloy keeps sourcemaps in memory indefinitely.
Set &lt;code&gt;ttl&lt;/code&gt; to remove sourcemaps that are not accessed within the specified duration.&lt;/p&gt;
&lt;p&gt;Alloy caches errors that occur while downloading or parsing a sourcemap.
Use &lt;code&gt;error_cleanup_interval&lt;/code&gt; to control how long these errors remain cached.&lt;/p&gt;
&lt;p&gt;Cached sourcemaps are checked for cleanup every 30 seconds by default.
Set &lt;code&gt;cleanup_check_interval&lt;/code&gt; to adjust this frequency.&lt;/p&gt;
&lt;h4 id=&#34;location&#34;&gt;&lt;code&gt;location&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;location&lt;/code&gt; block declares a location where sourcemaps are stored on the filesystem.
You can specify the &lt;code&gt;location&lt;/code&gt; block multiple times to declare multiple locations where sourcemaps are stored.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
              &lt;th&gt;Default&lt;/th&gt;
              &lt;th&gt;Required&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;minified_path_prefix&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The prefix of the minified path sent from browsers.&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;yes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;path&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The path on disk or base URL where sourcemaps are stored.&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;yes&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The &lt;code&gt;minified_path_prefix&lt;/code&gt; argument determines the prefix of paths to JavaScript files, such as &lt;code&gt;http://example.com/&lt;/code&gt;.
The &lt;code&gt;path&lt;/code&gt; argument then determines where to find the sourcemap for the file.&lt;/p&gt;
&lt;p&gt;For example, given the following location block:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;location {
    path                 = &amp;#34;/var/my-app/build&amp;#34;
    minified_path_prefix = &amp;#34;http://example.com/&amp;#34;
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To look up the sourcemaps for a file hosted at &lt;code&gt;http://example.com/example.js&lt;/code&gt;, the &lt;code&gt;faro.receiver&lt;/code&gt; component:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Removes the minified path prefix to extract the path to the file &lt;code&gt;example.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Searches the path for the file with a &lt;code&gt;.map&lt;/code&gt; extension, for example &lt;code&gt;example.js.map&lt;/code&gt; in the path &lt;code&gt;/var/my-app/build/example.js.map&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Optionally, the value for the &lt;code&gt;path&lt;/code&gt; argument may contain &lt;code&gt;{{ .Release }}&lt;/code&gt; as a template value, such as &lt;code&gt;/var/my-app/{{ .Release }}/build&lt;/code&gt;.
The template value is replaced with the release value provided by the &lt;a href=&#34;https://github.com/grafana/faro-web-sdk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Faro Web App SDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you specify a remote location, the procedure for retrieving the sourcemaps is the same as for a location block with a local path, except that the component retrieves the sourcemap from a remote HTTP server.&lt;/p&gt;
&lt;p&gt;In the following example, the &lt;code&gt;faro.receiver&lt;/code&gt; sends a GET request to &lt;code&gt;http://storage.example.com/blob/sourcemaps/example.js.map&lt;/code&gt; and retrieves the sourcemap for a file hosted at
&lt;code&gt;http://example.com/example.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can specify multiple location blocks. For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;location {
    path                 = &amp;#34;http://storage.example.com/blob/sourcemaps/&amp;#34;
    minified_path_prefix = &amp;#34;http://example.com/&amp;#34;
}

```alloy
location {
    path                 = &amp;#34;/var/my-app/build&amp;#34;
    minified_path_prefix = &amp;#34;http://example.com/&amp;#34;
}
location {
    path                 = &amp;#34;http://storage.example.com/blob/sourcemaps/&amp;#34;
    minified_path_prefix = &amp;#34;http://example.com/&amp;#34;
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;faro.receiver&lt;/code&gt; component searches through all locations for the sourcemap files.
Local on-disk paths take precedence over remote paths.
For a file hosted at &lt;code&gt;http://example.com/example.js&lt;/code&gt;, the &lt;code&gt;faro.receiver&lt;/code&gt; first checks
the path &lt;code&gt;/var/my-app/build/example.js.map&lt;/code&gt;, and then tries to retrieve &lt;code&gt;http://storage.example.com/blob/sourcemaps/example.js.map&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;exported-fields&#34;&gt;Exported fields&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;faro.receiver&lt;/code&gt; doesn&amp;rsquo;t export any fields.&lt;/p&gt;
&lt;h2 id=&#34;component-health&#34;&gt;Component health&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;faro.receiver&lt;/code&gt; is reported as unhealthy when the integrated server fails to start.&lt;/p&gt;
&lt;h2 id=&#34;debug-information&#34;&gt;Debug information&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;faro.receiver&lt;/code&gt; doesn&amp;rsquo;t expose any component-specific debug information.&lt;/p&gt;
&lt;h2 id=&#34;debug-metrics&#34;&gt;Debug metrics&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;faro.receiver&lt;/code&gt; exposes the following metrics for monitoring the component:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_logs_total&lt;/code&gt; (counter): Total number of ingested logs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_measurements_total&lt;/code&gt; (counter): Total number of ingested measurements.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_exceptions_total&lt;/code&gt; (counter): Total number of ingested exceptions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_events_total&lt;/code&gt; (counter): Total number of ingested events.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_exporter_errors_total&lt;/code&gt; (counter): Total number of errors produced by an internal exporter.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_request_duration_seconds&lt;/code&gt; (histogram): Time (in seconds) spent serving HTTP requests.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_request_message_bytes&lt;/code&gt; (histogram): Size (in bytes) of HTTP requests received from clients.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_response_message_bytes&lt;/code&gt; (histogram): Size (in bytes) of HTTP responses sent to clients.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_inflight_requests&lt;/code&gt; (gauge): Current number of inflight requests.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_sourcemap_cache_size&lt;/code&gt; (gauge): Number of items in sourcemap cache per origin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_sourcemap_downloads_total&lt;/code&gt; (counter): Total number of sourcemap downloads performed per origin and status.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_sourcemap_file_reads_total&lt;/code&gt; (counter): Total number of sourcemap retrievals using the filesystem per origin and status.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_rate_limiter_active_app&lt;/code&gt; (gauge): Number of active applications with rate limiters. Inactive limiters are cleaned up every 10 minutes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;faro_receiver_rate_limiter_requests_total&lt;/code&gt; (counter): Total number of requests processed by the rate limiter per app/environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;faro.receiver &amp;#34;default&amp;#34; {
    server {
        listen_address = &amp;#34;&amp;lt;NETWORK_ADDRESS&amp;gt;&amp;#34;
    }

    sourcemaps {
        location {
            path                 = &amp;#34;&amp;lt;PATH_TO_SOURCEMAPS&amp;gt;&amp;#34;
            minified_path_prefix = &amp;#34;&amp;lt;WEB_APP_PREFIX&amp;gt;&amp;#34;
        }
    }

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

loki.write &amp;#34;default&amp;#34; {
    endpoint {
        url = &amp;#34;https://LOKI_ADDRESS/loki/api/v1/push&amp;#34;
    }
}

otelcol.exporter.otlphttp &amp;#34;traces&amp;#34; {
    client {
        endpoint = &amp;#34;&amp;lt;OTLP_ADDRESS&amp;gt;&amp;#34;
    }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Replace the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;code&gt;&amp;lt;NETWORK_ADDRESS&amp;gt;&lt;/code&gt;&lt;/em&gt;: The IP address of the network interface to listen to traffic on.
This IP address must be reachable by browsers using the web application to instrument.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;code&gt;&amp;lt;PATH_TO_SOURCEMAPS&amp;gt;&lt;/code&gt;&lt;/em&gt;: The path on disk where sourcemaps are located.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;code&gt;&amp;lt;WEB_APP_PREFIX&amp;gt;&lt;/code&gt;&lt;/em&gt;: Prefix of the web application being instrumented.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LOKI_ADDRESS&lt;/code&gt;: Address of the Loki server to send logs to.
Refer to &lt;a href=&#34;../../loki/loki.write/&#34;&gt;&lt;code&gt;loki.write&lt;/code&gt;&lt;/a&gt; if you want to use authentication to send logs to the Loki server.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;code&gt;&amp;lt;OTLP_ADDRESS&amp;gt;&lt;/code&gt;&lt;/em&gt;: The address of the OTLP-compatible server to send traces to.
Refer to&lt;a href=&#34;../../otelcol/otelcol.exporter.otlphttp/&#34;&gt;&lt;code&gt;otelcol.exporter.otlphttp&lt;/code&gt;&lt;/a&gt; if you want to use authentication to send logs to an OTLP server.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- START GENERATED COMPATIBLE COMPONENTS --&gt;
&lt;h2 id=&#34;compatible-components&#34;&gt;Compatible components&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;faro.receiver&lt;/code&gt; can accept arguments from the following components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Components that export &lt;a href=&#34;../../../compatibility/#loki-logsreceiver-exporters&#34;&gt;Loki &lt;code&gt;LogsReceiver&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Components that export &lt;a href=&#34;../../../compatibility/#opentelemetry-otelcolconsumer-exporters&#34;&gt;OpenTelemetry &lt;code&gt;otelcol.Consumer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Connecting some components may not be sensible or components may require further configuration to make the connection work correctly.
Refer to the linked documentation for more details.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;!-- END GENERATED COMPATIBLE COMPONENTS --&gt;
]]></content><description>&lt;h1 id="faroreceiver">&lt;code>faro.receiver&lt;/code>&lt;/h1>
&lt;p>&lt;code>faro.receiver&lt;/code> accepts web application telemetry data from the &lt;a href="https://github.com/grafana/faro-web-sdk" target="_blank" rel="noopener noreferrer">Grafana Faro Web SDK&lt;/a> and forwards it to other components for processing.&lt;/p>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>This component does not work with &lt;a href="/products/cloud/frontend-observability/">Grafana Cloud Frontend Observability&lt;/a>.
For more information, refer to the &lt;a href="../../../../collect/choose-component/#frontend-telemetry">Choose a component&lt;/a> guide.&lt;/p></description></item></channel></rss>