> ## Documentation Index
>
> Fetch the complete documentation index at: [/docs/llms.txt](/content/docs/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](/content/docs/agent-analytics/integrations/google-cloud-dns#content-area/index.html)

Use the Google Cloud DNS integration when your domain records are managed in Google Cloud DNS and you want Lightsage to track AI agent visits without installing application middleware.Google Cloud DNS manages the records that send traffic to your site. To collect agent analytics, route those DNS records to a Google external Application Load Balancer first. The load balancer produces the HTTP request logs that Lightsage receives through Cloud Logging and Pub/Sub.

Google Cloud DNS alone does not produce request logs. DNS records do not include request paths, user agents, status codes, or client IP addresses. This setup uses Google Cloud DNS for routing and Google Cloud Load Balancing for request logging.

## [​](/content/docs/agent-analytics/integrations/google-cloud-dns\#how-it-works/index.html)  How it works

```
Visitor
  -> Google Cloud DNS
  -> Google external Application Load Balancer
  -> Your origin, such as Webflow

Google load balancer request logs
  -> Cloud Logging sink
  -> Pub/Sub topic
  -> Pub/Sub push subscription
  -> Lightsage Agent Analytics
```

Lightsage only requires the load balancer request logs. Google Cloud CDN is optional and covered in [Cloud CDN](/content/docs/agent-analytics/integrations/google-cloud-dns#cloud-cdn/index.html) below.

## [​](/content/docs/agent-analytics/integrations/google-cloud-dns\#before-you-begin/index.html)  Before you begin

You need:

- Access to the GCP project that manages the domain’s Cloud DNS zone
- Permission to edit Cloud DNS records, load balancers, Cloud Logging sinks, Pub/Sub topics, Pub/Sub subscriptions, and service accounts
- An origin that Google can proxy to, such as Webflow, a docs platform, or your own web server
- Access to **Agent Analytics > Integrations > Google Cloud DNS** in Lightsage

Start with a test subdomain, such as `agent-test.example.com`, before moving production traffic.

## [​](/content/docs/agent-analytics/integrations/google-cloud-dns\#configure-the-integration/index.html)  Configure the integration

1

Open the Google Cloud DNS integration in Lightsage

In Lightsage, go to **Agent Analytics > Integrations > Google Cloud DNS**.Copy the **Push endpoint** shown in the setup screen. You will use it as the Pub/Sub push endpoint after you create the log export.

2

Create a Google external Application Load Balancer

In the GCP Console, create a Google external Application Load Balancer for the domain or test subdomain you want to track.Configure the load balancer with:

- A frontend for the tracked hostname
- A managed certificate or certificate that covers the tracked hostname
- A backend that points to your origin

You enable backend logging in a later step.Because your origin lives outside Google Cloud, the backend must point to an **internet network endpoint group (internet NEG)** rather than a Google Cloud instance group. Create an internet NEG with an `INTERNET_FQDN_PORT` endpoint for your origin hostname, such as `your-site.webflow.io:443`, and attach it to the backend service.

Internet NEGs require the **Premium** network service tier. On a global external Application Load Balancer, the internet NEG holds a single endpoint and cannot be combined with other backend types. When you use an `INTERNET_FQDN_PORT` endpoint, Google validates the origin’s certificate against public CAs, so the origin must serve a valid publicly trusted certificate.

For Webflow, point the internet NEG at the Webflow-hosted origin and validate the setup on a test subdomain before changing production DNS.

3

Point Google Cloud DNS to the load balancer

In **Cloud DNS**, update the tracked hostname so it points to the load balancer frontend instead of pointing directly to your origin.The load balancer frontend uses a global anycast IP address, so point the tracked hostname at that IP with an `A` record, whether it is an apex domain or a subdomain:

```
example.com.       A  LOAD_BALANCER_IP
docs.example.com.  A  LOAD_BALANCER_IP
```

Wait for DNS propagation, then verify the hostname serves the same site through the load balancer.

4

Enable load balancer logging

In the load balancer backend service, enable logging and set the sample rate to `1.0` while validating the integration.A sample rate of `1.0` exports every request handled by the load balancer. You can lower it later if your organization wants to reduce log volume, but Lightsage will then only receive the sampled fraction of requests.

5

Create a Pub/Sub topic

In the GCP Console, open **Pub/Sub > Topics**.Click **Create topic** and use a clear name, such as:

```
lightsage-agent-analytics-logs
```

Keep the topic in the same project as the load balancer logs.

6

Create a push service account

Create or select a service account for authenticated Pub/Sub delivery.A recommended name is:

```
lightsage-agent-analytics-push
```

Copy the service account email. You will paste this email into Lightsage so Lightsage can verify that push requests came from your GCP project.

If Pub/Sub cannot sign push requests with this account, grant the Pub/Sub service agent the **Service Account Token Creator** role on the push service account.

7

Create a Pub/Sub push subscription

Open **Pub/Sub > Subscriptions** and click **Create subscription**.Configure the subscription:

| Field | Value |
| --- | --- |
| **Topic** | Select the topic you created |
| **Delivery type** | `Push` |
| **Endpoint URL** | Paste the Lightsage **Push endpoint** |
| **Authentication** | Enabled |
| **Service account** | Select the push service account |
| **Audience** | Leave blank unless Lightsage shows an audience value |
| **Payload unwrapping** | Enabled |

Keep retry and retention settings at your organization’s defaults unless you need a specific retention policy.

8

Add a subscription transform

In the subscription configuration, click **Add a transform**.Use this function name:

```
lightsage_agent_analytics_reduce
```

Paste this transform:

```
function lightsage_agent_analytics_reduce(message, metadata) {
  const data = JSON.parse(message.data);

delete data.insertId;
  delete data.jsonPayload;
  delete data.logName;
  delete data.receiveTimestamp;
  delete data.resource;
  delete data.severity;
  delete data.spanId;
  delete data.trace;

message.data = JSON.stringify(data);

return message;
}
```

Click **Validate**. The transform removes fields Lightsage does not need before the message is delivered.

9

Create a Cloud Logging sink

In the GCP Console, open **Logging > Log Router**.Click **Create sink**. Give the sink a name, such as:

```
lightsage-agent-analytics
```

For **Sink destination**, choose **Cloud Pub/Sub topic** and select the topic you created.

After you create the sink, grant its **writer identity** the **Pub/Sub Publisher** role (`roles/pubsub.publisher`) on the destination topic. Cloud Logging configures this automatically only when you create the sink from the console with Owner access to the topic’s project. Otherwise, copy the writer identity email from the sink details and grant the role manually. Without this permission, logs route into the sink but never reach the topic, and no error is shown.

10

Filter the sink to your load balancer

In **Choose logs to include in sink**, add a filter for your load balancer.Replace the placeholder values with your forwarding rule and URL map names:

```
resource.type="http_load_balancer"
resource.labels.forwarding_rule_name="MY-FORWARDING-RULE-NAME"
resource.labels.url_map_name="MY-URL-MAP-NAME"
```

If you export logs from multiple load balancers, include each pair explicitly:

```
resource.type="http_load_balancer"
AND (
  (
    resource.labels.forwarding_rule_name="MY-FORWARDING-RULE-NAME"
    AND resource.labels.url_map_name="MY-URL-MAP-NAME"
  )
  OR
  (
    resource.labels.forwarding_rule_name="MY-FORWARDING-RULE-NAME-2"
    AND resource.labels.url_map_name="MY-URL-MAP-NAME-2"
  )
)
```

Click **Create sink**.

11

Save the service account in Lightsage

Return to **Agent Analytics > Integrations > Google Cloud DNS** in Lightsage.Paste the push service account email into **GCP service account** and click **Save**.Lightsage uses this email to verify authenticated Pub/Sub push requests.

12

Verify log delivery

Send a test request through the tracked hostname:

```
curl -A "ClaudeBot/1.0" https://docs.example.com/
```

Check **Agent Analytics** after a few minutes. The tracked domain should appear after Lightsage receives the first matching request log.

## [​](/content/docs/agent-analytics/integrations/google-cloud-dns\#webflow-domains/index.html)  Webflow domains

For Webflow sites, the common starting point is:

```
Google Cloud DNS -> Webflow
```

That setup does not produce Google HTTP request logs. To use this integration, update the path to:

```
Google Cloud DNS -> Google external Application Load Balancer -> Webflow
```

Validate the load balancer on a test subdomain before moving production traffic. Confirm that pages, assets, redirects, forms, cookies, and canonical-domain behavior still work.

## [​](/content/docs/agent-analytics/integrations/google-cloud-dns\#cloud-cdn/index.html)  Cloud CDN

Cloud CDN is not required for this integration. If you do not already use a CDN, leave it disabled; the load balancer still logs every request, which is all Lightsage needs.You can enable Cloud CDN on the load balancer later if you want Google to cache content at the edge. Cache hits are still logged by the load balancer, so agent analytics keeps working.

## [​](/content/docs/agent-analytics/integrations/google-cloud-dns\#troubleshooting/index.html)  Troubleshooting

| Symptom | Check |
| --- | --- |
| The site works, but no logs appear | Confirm traffic reaches the Google load balancer, not the old origin DNS record. |
| Logs appear in Cloud Logging but not Lightsage | Confirm the Log Router sink destination is the Pub/Sub topic used by the push subscription, and that the sink’s writer identity has the **Pub/Sub Publisher** role on that topic. |
| Pub/Sub push requests are rejected | Confirm the service account email in Lightsage matches the service account used by the push subscription. |
| Only some requests appear | Confirm backend logging sample rate is `1.0`. |
| Webflow pages fail behind the load balancer | Validate host, TLS, redirect, and canonical-domain behavior before switching production DNS. |

After Cloud DNS points to the load balancer and the sink and push subscription are active, Google request logs should appear in Lightsage Agent Analytics within a few minutes.

{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lightsage","colors":{"primary":"#0EA5E9","light":"#38BDF8","dark":"#0284C7"},"logo":{"light":"https://mintcdn.com/sapient-14d4e375/0RQiSxJPQv6MyuZt/images/lightsage-logo-with-text-light.svg?fit=max\\u0026auto=format\\u0026n=0RQiSxJPQv6MyuZt\\u0026q=85\\u0026s=843d0563baa54c778891f942711ab938","dark":"https://mintcdn.com/sapient-14d4e375/0RQiSxJPQv6MyuZt/images/lightsage-logo-with-text-dark.svg?fit=max\\u0026auto=format\\u0026n=0RQiSxJPQv6MyuZt\\u0026q=85\\u0026s=0ec933f6e5153f8392cb4c5f19b7017f"},"favicon":"https://mintcdn.com/sapient-14d4e375/lnqlKs8p\_hzadcGt/images/favicon.png?fit=max\\u0026auto=format\\u0026n=lnqlKs8p\_hzadcGt\\u0026q=85\\u0026s=358b3be56f25189cd6d5417fd300fefc","background":{"color":{"light":"#FFFFFF","dark":"#0D0C0C"}},"navbar":{"links":\[{"href":"https://lightsage.com","label":"Homepage"}\],"primary":{"type":"button","label":"Dashboard","href":"https://app.lightsage.com"}},"seo":{"indexing":"all"},"fonts":{"family":"Geist"},"integrations":{"ga4":{"measurementId":"G-417S0EJVMS"},"posthog":{"apiKey":"phc\_yrA1TjjqeYfsoJEofjxd0Bw7cTrxs8N402k3NwusII7"}},"contextual":{"options":\["copy","chatgpt","cursor","vscode"\],"display":"header"},"styling":{"latex":false},"navigation":{"pages":\[\]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sapient-14d4e375","hasAudioNarration":false,"actualSubdomain":"sapient-14d4e375","customDomains":\["lightsage.com"\],"gitSource":{"type":"github","owner":"lightsagehq","repo":"docs","deployBranch":"main","isPrivate":true,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae02c324c09e96410641fcb","collectionId":"82419905-7508-4f98-a30d-d180f437b2ae","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae02c324c09e96410641fcb"},"entitlements":{"AI\_CHAT":{"status":"DISABLED"}},"buildId":"6ae02c324c09e96410641fcb","clientVersion":"0.0.3971","searchFilterCounts":\[{"language":"default","tag":"API Reference","count":74},{"language":"default","tag":"CLI Reference","count":18},{"language":"default","tag":"Evals","count":14},{"language":"default","tag":"Documentation","count":13},{"language":"default","tag":"Prompts","count":13},{"language":"default","tag":"Visibility","count":12},{"language":"default","tag":"MCP Reference","count":10},{"language":"default","tag":"Clients","count":9},{"language":"default","tag":"Agent Preference","count":8},{"language":"default","tag":"Agent Analytics","count":7}\]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":\[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false}\],"isAtlas":false,"googleFontsInlined":true},"customCss":\[\],"page":{"pagePath":"agent-analytics/integrations/google-cloud-dns","slug":"/agent-analytics/integrations/google-cloud-dns","pageMetadata":{"title":"Google Cloud DNS integration","description":"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.","sidebarTitle":"Google Cloud DNS","href":"/agent-analytics/integrations/google-cloud-dns"},"description":{"compiledSource":"\\"use strict\\";\\nconst {jsx: \_jsx} = arguments\[0\];\\nconst {useMDXComponents: \_provideComponents} = arguments\[0\];\\nfunction \_createMdxContent(props) {\\n const \_components = {\\n p: \\"p\\",\\n ...\_provideComponents(),\\n ...props.components\\n };\\n return \_jsx(\_components.p, {\\n children: \\"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.\\"\\n });\\n}\\nfunction MDXContent(props = {}) {\\n const {wrapper: MDXLayout} = {\\n ...\_provideComponents(),\\n ...props.components\\n };\\n return MDXLayout ? \_jsx(MDXLayout, {\\n ...props,\\n children: \_jsx(\_createMdxContent, {\\n ...props\\n })\\n }) : \_createMdxContent(props);\\n}\\nreturn {\\n default: MDXContent\\n};\\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\\"use strict\\";const{Fragment:\_Fragment,jsx:\_jsx,jsxs:\_jsxs}=arguments\[0\];const{useMDXComponents:\_provideComponents}=arguments\[0\];function \_createMdxContent(props){const \_components={a:\`a\`,code:\`code\`,li:\`li\`,p:\`p\`,pre:\`pre\`,span:\`span\`,strong:\`strong\`,tbody:\`tbody\`,td:\`td\`,th:\`th\`,thead:\`thead\`,tr:\`tr\`,ul:\`ul\`,...\_provideComponents(),...props.components},{Check,CodeBlock,Heading,Info,Step,Steps,Table,Tip,Warning}=\_components;if(!Check)\_missingMdxReference(\`Check\`,true);if(!CodeBlock)\_missingMdxReference(\`CodeBlock\`,true);if(!Heading)\_missingMdxReference(\`Heading\`,true);if(!Info)\_missingMdxReference(\`Info\`,true);if(!Step)\_missingMdxReference(\`Step\`,true);if(!Steps)\_missingMdxReference(\`Steps\`,true);if(!Table)\_missingMdxReference(\`Table\`,true);if(!Tip)\_missingMdxReference(\`Tip\`,true);if(!Warning)\_missingMdxReference(\`Warning\`,true);return \_jsxs(\_Fragment,{children:\[\_jsx(\_components.p,{children:\`Use the Google Cloud DNS integration when your domain records are managed in Google Cloud DNS and you want Lightsage to track AI agent visits without installing application middleware.\`}),\`\\n\`,\_jsx(\_components.p,{children:\`Google Cloud DNS manages the records that send traffic to your site. To collect agent analytics, route those DNS records to a Google external Application Load Balancer first. The load balancer produces the HTTP request logs that Lightsage receives through Cloud Logging and Pub/Sub.\`}),\`\\n\`,\_jsx(Warning,{children:\_jsx(\_components.p,{children:\`Google Cloud DNS alone does not produce request logs. DNS records do not include request paths, user agents, status codes, or client IP addresses. This setup uses Google Cloud DNS for routing and Google Cloud Load Balancing for request logging.\`})}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`how-it-works\`,children:\`How it works\`}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`11\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`11\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`Visitor\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Google Cloud DNS\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Google external Application Load Balancer\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Your origin, such as Webflow\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`Google load balancer request logs\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Cloud Logging sink\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Pub/Sub topic\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Pub/Sub push subscription\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` -> Lightsage Agent Analytics\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`Lightsage only requires the load balancer request logs. Google Cloud CDN is optional and covered in \`,\_jsx(\_components.a,{href:\`#cloud-cdn\`,children:\`Cloud CDN\`}),\` below.\`\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`before-you-begin\`,children:\`Before you begin\`}),\`\\n\`,\_jsx(\_components.p,{children:\`You need:\`}),\`\\n\`,\_jsxs(\_components.ul,{children:\[\`\\n\`,\_jsx(\_components.li,{children:\`Access to the GCP project that manages the domain’s Cloud DNS zone\`}),\`\\n\`,\_jsx(\_components.li,{children:\`Permission to edit Cloud DNS records, load balancers, Cloud Logging sinks, Pub/Sub topics, Pub/Sub subscriptions, and service accounts\`}),\`\\n\`,\_jsx(\_components.li,{children:\`An origin that Google can proxy to, such as Webflow, a docs platform, or your own web server\`}),\`\\n\`,\_jsxs(\_components.li,{children:\[\`Access to \`,\_jsx(\_components.strong,{children:\`Agent Analytics > Integrations > Google Cloud DNS\`}),\` in Lightsage\`\]}),\`\\n\`\]}),\`\\n\`,\_jsx(Tip,{children:\_jsxs(\_components.p,{children:\[\`Start with a test subdomain, such as \`,\_jsx(\_components.code,{children:\`agent-test.example.com\`}),\`, before moving production traffic.\`\]})}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`configure-the-integration\`,children:\`Configure the integration\`}),\`\\n\`,\_jsxs(Steps,{children:\[\_jsxs(Step,{title:\`Open the Google Cloud DNS integration in Lightsage\`,children:\[\_jsxs(\_components.p,{children:\[\`In Lightsage, go to \`,\_jsx(\_components.strong,{children:\`Agent Analytics > Integrations > Google Cloud DNS\`}),\`.\`\]}),\_jsxs(\_components.p,{children:\[\`Copy the \`,\_jsx(\_components.strong,{children:\`Push endpoint\`}),\` shown in the setup screen. You will use it as the Pub/Sub push endpoint after you create the log export.\`\]})\]}),\_jsxs(Step,{title:\`Create a Google external Application Load Balancer\`,children:\[\_jsx(\_components.p,{children:\`In the GCP Console, create a Google external Application Load Balancer for the domain or test subdomain you want to track.\`}),\_jsx(\_components.p,{children:\`Configure the load balancer with:\`}),\_jsxs(\_components.ul,{children:\[\`\\n\`,\_jsx(\_components.li,{children:\`A frontend for the tracked hostname\`}),\`\\n\`,\_jsx(\_components.li,{children:\`A managed certificate or certificate that covers the tracked hostname\`}),\`\\n\`,\_jsx(\_components.li,{children:\`A backend that points to your origin\`}),\`\\n\`\]}),\_jsx(\_components.p,{children:\`You enable backend logging in a later step.\`}),\_jsxs(\_components.p,{children:\[\`Because your origin lives outside Google Cloud, the backend must point to an \`,\_jsx(\_components.strong,{children:\`internet network endpoint group (internet NEG)\`}),\` rather than a Google Cloud instance group. Create an internet NEG with an \`,\_jsx(\_components.code,{children:\`INTERNET\_FQDN\_PORT\`}),\` endpoint for your origin hostname, such as \`,\_jsx(\_components.code,{children:\`your-site.webflow.io:443\`}),\`, and attach it to the backend service.\`\]}),\_jsx(Info,{children:\_jsxs(\_components.p,{children:\[\`Internet NEGs require the \`,\_jsx(\_components.strong,{children:\`Premium\`}),\` network service tier. On a global external Application Load Balancer, the internet NEG holds a single endpoint and cannot be combined with other backend types. When you use an \`,\_jsx(\_components.code,{children:\`INTERNET\_FQDN\_PORT\`}),\` endpoint, Google validates the origin’s certificate against public CAs, so the origin must serve a valid publicly trusted certificate.\`\]})}),\_jsx(\_components.p,{children:\`For Webflow, point the internet NEG at the Webflow-hosted origin and validate the setup on a test subdomain before changing production DNS.\`})\]}),\_jsxs(Step,{title:\`Point Google Cloud DNS to the load balancer\`,children:\[\_jsxs(\_components.p,{children:\[\`In \`,\_jsx(\_components.strong,{children:\`Cloud DNS\`}),\`, update the tracked hostname so it points to the load balancer frontend instead of pointing directly to your origin.\`\]}),\_jsxs(\_components.p,{children:\[\`The load balancer frontend uses a global anycast IP address, so point the tracked hostname at that IP with an \`,\_jsx(\_components.code,{children:\`A\`}),\` record, whether it is an apex domain or a subdomain:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`3\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`3\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`example.com. A LOAD\_BALANCER\_IP\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`docs.example.com. A LOAD\_BALANCER\_IP\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsx(\_components.p,{children:\`Wait for DNS propagation, then verify the hostname serves the same site through the load balancer.\`})\]}),\_jsxs(Step,{title:\`Enable load balancer logging\`,children:\[\_jsxs(\_components.p,{children:\[\`In the load balancer backend service, enable logging and set the sample rate to \`,\_jsx(\_components.code,{children:\`1.0\`}),\` while validating the integration.\`\]}),\_jsxs(\_components.p,{children:\[\`A sample rate of \`,\_jsx(\_components.code,{children:\`1.0\`}),\` exports every request handled by the load balancer. You can lower it later if your organization wants to reduce log volume, but Lightsage will then only receive the sampled fraction of requests.\`\]})\]}),\_jsxs(Step,{title:\`Create a Pub/Sub topic\`,children:\[\_jsxs(\_components.p,{children:\[\`In the GCP Console, open \`,\_jsx(\_components.strong,{children:\`Pub/Sub > Topics\`}),\`.\`\]}),\_jsxs(\_components.p,{children:\[\`Click \`,\_jsx(\_components.strong,{children:\`Create topic\`}),\` and use a clear name, such as:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`2\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`lightsage-agent-analytics-logs\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsx(\_components.p,{children:\`Keep the topic in the same project as the load balancer logs.\`})\]}),\_jsxs(Step,{title:\`Create a push service account\`,children:\[\_jsx(\_components.p,{children:\`Create or select a service account for authenticated Pub/Sub delivery.\`}),\_jsx(\_components.p,{children:\`A recommended name is:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`2\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`lightsage-agent-analytics-push\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsx(\_components.p,{children:\`Copy the service account email. You will paste this email into Lightsage so Lightsage can verify that push requests came from your GCP project.\`}),\_jsx(Info,{children:\_jsxs(\_components.p,{children:\[\`If Pub/Sub cannot sign push requests with this account, grant the Pub/Sub service agent the \`,\_jsx(\_components.strong,{children:\`Service Account Token Creator\`}),\` role on the push service account.\`\]})})\]}),\_jsxs(Step,{title:\`Create a Pub/Sub push subscription\`,children:\[\_jsxs(\_components.p,{children:\[\`Open \`,\_jsx(\_components.strong,{children:\`Pub/Sub > Subscriptions\`}),\` and click \`,\_jsx(\_components.strong,{children:\`Create subscription\`}),\`.\`\]}),\_jsx(\_components.p,{children:\`Configure the subscription:\`}),\_jsxs(Table,{children:\[\_jsx(\_components.thead,{children:\_jsxs(\_components.tr,{children:\[\_jsx(\_components.th,{children:\`Field\`}),\_jsx(\_components.th,{children:\`Value\`})\]})}),\_jsxs(\_components.tbody,{children:\[\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Topic\`})}),\_jsx(\_components.td,{children:\`Select the topic you created\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Delivery type\`})}),\_jsx(\_components.td,{children:\_jsx(\_components.code,{children:\`Push\`})})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Endpoint URL\`})}),\_jsxs(\_components.td,{children:\[\`Paste the Lightsage \`,\_jsx(\_components.strong,{children:\`Push endpoint\`})\]})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Authentication\`})}),\_jsx(\_components.td,{children:\`Enabled\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Service account\`})}),\_jsx(\_components.td,{children:\`Select the push service account\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Audience\`})}),\_jsx(\_components.td,{children:\`Leave blank unless Lightsage shows an audience value\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\_jsx(\_components.strong,{children:\`Payload unwrapping\`})}),\_jsx(\_components.td,{children:\`Enabled\`})\]})\]})\]}),\_jsx(\_components.p,{children:\`Keep retry and retention settings at your organization’s defaults unless you need a specific retention policy.\`})\]}),\_jsxs(Step,{title:\`Add a subscription transform\`,children:\[\_jsxs(\_components.p,{children:\[\`In the subscription configuration, click \`,\_jsx(\_components.strong,{children:\`Add a transform\`}),\`.\`\]}),\_jsx(\_components.p,{children:\`Use this function name:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`2\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`lightsage\_agent\_analytics\_reduce\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsx(\_components.p,{children:\`Paste this transform:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`16\`,language:\`javascript\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`javascript\`,children:\_jsxs(\_components.code,{language:\`javascript\`,numberOfLines:\`16\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`function\`}),\_jsx(\_components.span,{style:{color:\`#8250DF\`,\\"--shiki-dark\\":\`#DCDCAA\`},children:\` lightsage\_agent\_analytics\_reduce\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`(\`}),\_jsx(\_components.span,{style:{color:\`#953800\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`message\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`, \`}),\_jsx(\_components.span,{style:{color:\`#953800\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`metadata\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`) {\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` const\`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#4FC1FF\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` =\`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#4FC1FF\`},children:\` JSON\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#8250DF\`,\\"--shiki-dark\\":\`#DCDCAA\`},children:\`parse\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`(\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`message\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`);\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`insertId\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`jsonPayload\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`logName\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`receiveTimestamp\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`resource\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`severity\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`spanId\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` delete\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`trace\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` message\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`data\`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` =\`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#4FC1FF\`},children:\` JSON\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`.\`}),\_jsx(\_components.span,{style:{color:\`#8250DF\`,\\"--shiki-dark\\":\`#DCDCAA\`},children:\`stringify\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`(\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\`data\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`);\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#C586C0\`},children:\` return\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#9CDCFE\`},children:\` message\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`;\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`}\`})}),\`\\n\`\]})})}),\_jsxs(\_components.p,{children:\[\`Click \`,\_jsx(\_components.strong,{children:\`Validate\`}),\`. The transform removes fields Lightsage does not need before the message is delivered.\`\]})\]}),\_jsxs(Step,{title:\`Create a Cloud Logging sink\`,children:\[\_jsxs(\_components.p,{children:\[\`In the GCP Console, open \`,\_jsx(\_components.strong,{children:\`Logging > Log Router\`}),\`.\`\]}),\_jsxs(\_components.p,{children:\[\`Click \`,\_jsx(\_components.strong,{children:\`Create sink\`}),\`. Give the sink a name, such as:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`2\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`lightsage-agent-analytics\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsxs(\_components.p,{children:\[\`For \`,\_jsx(\_components.strong,{children:\`Sink destination\`}),\`, choose \`,\_jsx(\_components.strong,{children:\`Cloud Pub/Sub topic\`}),\` and select the topic you created.\`\]}),\_jsx(Warning,{children:\_jsxs(\_components.p,{children:\[\`After you create the sink, grant its \`,\_jsx(\_components.strong,{children:\`writer identity\`}),\` the \`,\_jsx(\_components.strong,{children:\`Pub/Sub Publisher\`}),\` role (\`,\_jsx(\_components.code,{children:\`roles/pubsub.publisher\`}),\`) on the destination topic. Cloud Logging configures this automatically only when you create the sink from the console with Owner access to the topic’s project. Otherwise, copy the writer identity email from the sink details and grant the role manually. Without this permission, logs route into the sink but never reach the topic, and no error is shown.\`\]})})\]}),\_jsxs(Step,{title:\`Filter the sink to your load balancer\`,children:\[\_jsxs(\_components.p,{children:\[\`In \`,\_jsx(\_components.strong,{children:\`Choose logs to include in sink\`}),\`, add a filter for your load balancer.\`\]}),\_jsx(\_components.p,{children:\`Replace the placeholder values with your forwarding rule and URL map names:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`4\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`4\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`resource.type=\\"http\_load\_balancer\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`resource.labels.forwarding\_rule\_name=\\"MY-FORWARDING-RULE-NAME\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`resource.labels.url\_map\_name=\\"MY-URL-MAP-NAME\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsx(\_components.p,{children:\`If you export logs from multiple load balancers, include each pair explicitly:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`13\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`13\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`resource.type=\\"http\_load\_balancer\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`AND (\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` (\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` resource.labels.forwarding\_rule\_name=\\"MY-FORWARDING-RULE-NAME\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` AND resource.labels.url\_map\_name=\\"MY-URL-MAP-NAME\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` )\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` OR\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` (\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` resource.labels.forwarding\_rule\_name=\\"MY-FORWARDING-RULE-NAME-2\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` AND resource.labels.url\_map\_name=\\"MY-URL-MAP-NAME-2\\"\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\` )\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`)\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\_jsxs(\_components.p,{children:\[\`Click \`,\_jsx(\_components.strong,{children:\`Create sink\`}),\`.\`\]})\]}),\_jsxs(Step,{title:\`Save the service account in Lightsage\`,children:\[\_jsxs(\_components.p,{children:\[\`Return to \`,\_jsx(\_components.strong,{children:\`Agent Analytics > Integrations > Google Cloud DNS\`}),\` in Lightsage.\`\]}),\_jsxs(\_components.p,{children:\[\`Paste the push service account email into \`,\_jsx(\_components.strong,{children:\`GCP service account\`}),\` and click \`,\_jsx(\_components.strong,{children:\`Save\`}),\`.\`\]}),\_jsx(\_components.p,{children:\`Lightsage uses this email to verify authenticated Pub/Sub push requests.\`})\]}),\_jsxs(Step,{title:\`Verify log delivery\`,children:\[\_jsx(\_components.p,{children:\`Send a test request through the tracked hostname:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`1\`,language:\`shellscript\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`shellscript\`,children:\_jsxs(\_components.code,{language:\`shellscript\`,numberOfLines:\`1\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#953800\`,\\"--shiki-dark\\":\`#DCDCAA\`},children:\`curl\`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` -A\`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` \\"ClaudeBot/1.0\\"\`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` https://docs.example.com/\`})\]}),\`\\n\`\]})})}),\_jsxs(\_components.p,{children:\[\`Check \`,\_jsx(\_components.strong,{children:\`Agent Analytics\`}),\` after a few minutes. The tracked domain should appear after Lightsage receives the first matching request log.\`\]})\]})\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`webflow-domains\`,children:\`Webflow domains\`}),\`\\n\`,\_jsx(\_components.p,{children:\`For Webflow sites, the common starting point is:\`}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`2\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`Google Cloud DNS -> Webflow\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\`\\n\`,\_jsx(\_components.p,{children:\`That setup does not produce Google HTTP request logs. To use this integration, update the path to:\`}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`text\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`text\`,children:\_jsxs(\_components.code,{language:\`text\`,numberOfLines:\`2\`,children:\[\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{children:\`Google Cloud DNS -> Google external Application Load Balancer -> Webflow\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{})})\]})})}),\`\\n\`,\_jsx(\_components.p,{children:\`Validate the load balancer on a test subdomain before moving production traffic. Confirm that pages, assets, redirects, forms, cookies, and canonical-domain behavior still work.\`}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`cloud-cdn\`,children:\`Cloud CDN\`}),\`\\n\`,\_jsx(\_components.p,{children:\`Cloud CDN is not required for this integration. If you do not already use a CDN, leave it disabled; the load balancer still logs every request, which is all Lightsage needs.\`}),\`\\n\`,\_jsx(\_components.p,{children:\`You can enable Cloud CDN on the load balancer later if you want Google to cache content at the edge. Cache hits are still logged by the load balancer, so agent analytics keeps working.\`}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`troubleshooting\`,children:\`Troubleshooting\`}),\`\\n\`,\_jsxs(Table,{children:\[\_jsx(\_components.thead,{children:\_jsxs(\_components.tr,{children:\[\_jsx(\_components.th,{children:\`Symptom\`}),\_jsx(\_components.th,{children:\`Check\`})\]})}),\_jsxs(\_components.tbody,{children:\[\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`The site works, but no logs appear\`}),\_jsx(\_components.td,{children:\`Confirm traffic reaches the Google load balancer, not the old origin DNS record.\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`Logs appear in Cloud Logging but not Lightsage\`}),\_jsxs(\_components.td,{children:\[\`Confirm the Log Router sink destination is the Pub/Sub topic used by the push subscription, and that the sink’s writer identity has the \`,\_jsx(\_components.strong,{children:\`Pub/Sub Publisher\`}),\` role on that topic.\`\]})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`Pub/Sub push requests are rejected\`}),\_jsx(\_components.td,{children:\`Confirm the service account email in Lightsage matches the service account used by the push subscription.\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`Only some requests appear\`}),\_jsxs(\_components.td,{children:\[\`Confirm backend logging sample rate is \`,\_jsx(\_components.code,{children:\`1.0\`}),\`.\`\]})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`Webflow pages fail behind the load balancer\`}),\_jsx(\_components.td,{children:\`Validate host, TLS, redirect, and canonical-domain behavior before switching production DNS.\`})\]})\]})\]}),\`\\n\`,\_jsx(Check,{children:\_jsx(\_components.p,{children:\`After Cloud DNS points to the load balancer and the sink and push subscription are active, Google request logs should appear in Lightsage Agent Analytics within a few minutes.\`})})\]})}function MDXContent(props={}){const{wrapper:MDXLayout}={...\_provideComponents(),...props.components};return MDXLayout?\_jsx(MDXLayout,{...props,children:\_jsx(\_createMdxContent,{...props})}):\_createMdxContent(props)}return{default:MDXContent};function \_missingMdxReference(id,component){throw new Error(\`Expected \`+(component?\`component\`:\`object\`)+\\" \`\\"+id+\\"\` to be defined: you likely forgot to import, pass, or provide it.\\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Google Cloud DNS integration","description":"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.","sidebarTitle":"Google Cloud DNS","href":"/agent-analytics/integrations/google-cloud-dns"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":\[{"title":"How it works","slug":"how-it-works","depth":2,"children":\[\]},{"title":"Before you begin","slug":"before-you-begin","depth":2,"children":\[\]},{"title":"Configure the integration","slug":"configure-the-integration","depth":2,"children":\[\]},{"title":"Webflow domains","slug":"webflow-domains","depth":2,"children":\[\]},{"title":"Cloud CDN","slug":"cloud-cdn","depth":2,"children":\[\]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":\[\]}\],"codeExamples":{}},"jsLinks":\[\],"subdomain":"sapient-14d4e375","siteName":"Lightsage","title":"Google Cloud DNS integration - Lightsage","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-10T16:52:56.234Z","originalFileLocation":"agent-analytics/integrations/google-cloud-dns.mdx"},"headHtml":"\\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\\"isDarkMode\\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\\u0026\\u0026p!=='dark'\\u0026\\u0026p!=='system')p=\\"system\\"}var r=p==='system'?(matchMedia(\\"(prefers-color-scheme: dark)\\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\\"data-theme-preference\\",p)})();\\u003c/script>\\u003cmeta data-mint-head name=\\"description\\" content=\\"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.\\">\\u003cmeta data-mint-head name=\\"application-name\\" content=\\"Lightsage\\">\\u003cmeta data-mint-head name=\\"generator\\" content=\\"Mintlify\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"192x192\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon/android-chrome-192x192.png\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"apple-touch-icon\\" type=\\"image/png\\" sizes=\\"180x180\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon/apple-touch-icon.png\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"16x16\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon/favicon-16x16.png\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"32x32\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon/favicon-32x32.png\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"shortcut icon\\" type=\\"image/x-icon\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon/favicon.ico\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"192x192\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon-dark/android-chrome-192x192.png\\" media=\\"(prefers-color-scheme: dark)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"16x16\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon-dark/favicon-16x16.png\\" media=\\"(prefers-color-scheme: dark)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"32x32\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon-dark/favicon-32x32.png\\" media=\\"(prefers-color-scheme: dark)\\">\\u003clink data-mint-head rel=\\"shortcut icon\\" type=\\"image/x-icon\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon-dark/favicon.ico\\" media=\\"(prefers-color-scheme: dark)\\">\\u003cmeta data-mint-head property=\\"og:title\\" content=\\"Google Cloud DNS integration - Lightsage\\">\\u003cmeta data-mint-head property=\\"og:description\\" content=\\"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.\\">\\u003cmeta data-mint-head property=\\"og:site\_name\\" content=\\"Lightsage\\">\\u003cmeta data-mint-head property=\\"og:url\\" content=\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns\\">\\u003cmeta data-mint-head property=\\"og:type\\" content=\\"website\\">\\u003cmeta data-mint-head property=\\"og:image\\" content=\\"https://sapient-14d4e375.mintlify.app/\_mintlify/api/og/v2?division=Integrations\\u0026amp;title=Google+Cloud+DNS+integration\\u0026amp;description=Set+up+Lightsage+Agent+Analytics+for+a+domain+managed+in+Google+Cloud+DNS+by+routing+traffic+through+a+Google+load+balancer+and+exporting+request+logs.\\u0026amp;theme=dd8ce0054346ff07fc865000\\u0026amp;signature=c731b66d6805e7ee81f5240d2d999d9044af97cba2362da9f9a63fa850e80982\\">\\u003cmeta data-mint-head property=\\"og:image:width\\" content=\\"1200\\">\\u003cmeta data-mint-head property=\\"og:image:height\\" content=\\"630\\">\\u003cmeta data-mint-head name=\\"twitter:card\\" content=\\"summary\_large\_image\\">\\u003cmeta data-mint-head name=\\"twitter:title\\" content=\\"Google Cloud DNS integration - Lightsage\\">\\u003cmeta data-mint-head name=\\"twitter:description\\" content=\\"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.\\">\\u003cmeta data-mint-head name=\\"twitter:image\\" content=\\"https://sapient-14d4e375.mintlify.app/\_mintlify/api/og/v2?division=Integrations\\u0026amp;title=Google+Cloud+DNS+integration\\u0026amp;description=Set+up+Lightsage+Agent+Analytics+for+a+domain+managed+in+Google+Cloud+DNS+by+routing+traffic+through+a+Google+load+balancer+and+exporting+request+logs.\\u0026amp;theme=dd8ce0054346ff07fc865000\\u0026amp;signature=c731b66d6805e7ee81f5240d2d999d9044af97cba2362da9f9a63fa850e80982\\">\\u003cmeta data-mint-head name=\\"twitter:image:width\\" content=\\"1200\\">\\u003cmeta data-mint-head name=\\"twitter:image:height\\" content=\\"630\\">\\u003cmeta data-mint-head name=\\"msapplication-config\\" content=\\"/docs/mintlify-assets/\_mintlify/favicons/sapient-14d4e375/dqjrUzdCO-t6TId6/\_generated/favicon/browserconfig.xml\\">\\u003cmeta data-mint-head name=\\"apple-mobile-web-app-title\\" content=\\"Lightsage\\">\\u003cmeta data-mint-head name=\\"msapplication-TileColor\\" content=\\"#0EA5E9\\">\\u003clink data-mint-head rel=\\"canonical\\" href=\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns\\">\\u003clink data-mint-head rel=\\"alternate\\" type=\\"application/xml\\" href=\\"/docs/sitemap.xml\\">\\u003clink data-mint-head rel=\\"alternate\\" type=\\"text/markdown\\" href=\\"/docs/agent-analytics/integrations/google-cloud-dns.md\\">\\u003cscript data-mint-head type=\\"application/ld+json\\">{\\"@context\\":\\"https://schema.org\\",\\"@graph\\":\[{\\"@type\\":\\"Organization\\",\\"@id\\":\\"https://lightsage.com/#organization\\",\\"name\\":\\"Lightsage\\",\\"url\\":\\"https://lightsage.com\\",\\"logo\\":{\\"@type\\":\\"ImageObject\\",\\"url\\":\\"https://mintcdn.com/sapient-14d4e375/0RQiSxJPQv6MyuZt/images/lightsage-logo-with-text-light.svg?fit=max\\u0026auto=format\\u0026n=0RQiSxJPQv6MyuZt\\u0026q=85\\u0026s=843d0563baa54c778891f942711ab938\\"}},{\\"@type\\":\\"WebSite\\",\\"@id\\":\\"https://lightsage.com/docs#website\\",\\"name\\":\\"Lightsage\\",\\"url\\":\\"https://lightsage.com/docs\\",\\"publisher\\":{\\"@id\\":\\"https://lightsage.com/#organization\\"}},{\\"@type\\":\\"WebPage\\",\\"@id\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns#webpage\\",\\"url\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns\\",\\"name\\":\\"Google Cloud DNS integration\\",\\"description\\":\\"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.\\",\\"dateModified\\":\\"2026-08-10T16:52:56.234Z\\",\\"isPartOf\\":{\\"@id\\":\\"https://lightsage.com/docs#website\\"},\\"breadcrumb\\":{\\"@id\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns#breadcrumb\\"}},{\\"@type\\":\\"BreadcrumbList\\",\\"@id\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns#breadcrumb\\",\\"itemListElement\\":\[{\\"@type\\":\\"ListItem\\",\\"position\\":1,\\"name\\":\\"Lightsage\\",\\"item\\":\\"https://lightsage.com/docs\\"},{\\"@type\\":\\"ListItem\\",\\"position\\":2,\\"name\\":\\"Google Cloud DNS integration\\",\\"item\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns\\"}\]},{\\"@type\\":\[\\"Article\\",\\"TechArticle\\"\],\\"@id\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns#article\\",\\"headline\\":\\"Google Cloud DNS integration\\",\\"name\\":\\"Google Cloud DNS integration\\",\\"description\\":\\"Set up Lightsage Agent Analytics for a domain managed in Google Cloud DNS by routing traffic through a Google load balancer and exporting request logs.\\",\\"url\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns\\",\\"mainEntityOfPage\\":{\\"@id\\":\\"https://lightsage.com/docs/agent-analytics/integrations/google-cloud-dns#webpage\\"},\\"dateModified\\":\\"2026-08-10T16:52:56.234Z\\",\\"publisher\\":{\\"@id\\":\\"https://lightsage.com/#organization\\"},\\"isPartOf\\":{\\"@id\\":\\"https://lightsage.com/docs#website\\"}}\]}\\u003c/script>\\u003cscript data-mint-head type=\\"application/ld+json\\">{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebSite\\",\\"name\\":\\"Lightsage\\",\\"creator\\":{\\"@type\\":\\"Organization\\",\\"name\\":\\"Mintlify\\",\\"url\\":\\"https://mintlify.com\\"}}\\u003c/script>","siteName":"Lightsage","nav":{"global":null,"tabs":\[{"tab":"Documentation","pages":\[{"group":"Quickstart","pages":\[{"title":"Quickstart","sidebarTitle":"Quickstart","href":""},{"title":"Migrate from Sapient to Lightsage","sidebarTitle":"Migrate from Sapient","icon":"arrows-rotate","href":"/migration-guide"},{"group":"Onboard your AI agent","root":{"title":"Onboard your AI agent to Lightsage","sidebarTitle":"Onboard your AI agent","href":"/agent-onboarding"},"expanded":true,"pages":\[{"title":"Agent Skills","href":"/agent-onboarding/agent-skills"},{"title":"Lightsage MCP","href":"/agent-onboarding/lightsage-mcp"},{"title":"Lightsage CLI","href":"/agent-onboarding/lightsage-cli"},{"title":"Workflows","href":"/agent-onboarding/workflows"},{"title":"Docs for agents","href":"/agent-onboarding/docs-for-agents"}\]}\]},{"group":"Guides","pages":\[{"title":"Pull actionables into your agent","href":"/workflows/pull-actionables-into-your-agent"},{"title":"Running evals","href":"/guides/running-evals"}\]},{"group":"Agent Analytics","pages":\[{"title":"Measure agent-attributed growth","description":"Connect visits from recognized AI agent sources to sign-up, demo, checkout, and activation milestones in Agent Analytics.","sidebarTitle":"Attributed growth","href":"/agent-analytics/attributed-growth"}\]},{"group":"Integrations","pages":\[{"title":"Google Cloud DNS integration","sidebarTitle":"Google Cloud DNS","href":"/agent-analytics/integrations/google-cloud-dns"}\]},{"group":"Lightsage Docs Agent","pages":\[{"title":"Lightsage Docs Agent","sidebarTitle":"Overview","description":"Run Lightsage docs evals from GitHub pull requests before documentation changes ship.","href":"/lightsage-docs-agent/overview"},{"title":"Run docs evals from GitHub","sidebarTitle":"GitHub PR evals","href":"/lightsage-docs-agent/github-pr-evals"}\]}\]},{"tab":"CLI Reference","pages":\[{"title":"CLI Reference","href":"/cli-reference"}\]},{"tab":"MCP Reference","pages":\[{"title":"MCP Reference","href":"/mcp-reference"}\]},{"tab":"API Reference","pages":\[{"title":"API Reference","href":"/api-reference/introduction"}\]},{"tab":"Changelog","pages":\[{"title":"Changelog","href":"/changelog"}\]}\]},"title":"Google Cloud DNS integration - Lightsage","buildId":"dpl\_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl\_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":\[\],"chunks":\[\]}
