Skip to main content

Lumar Log Manager

Early access

Lumar Log Manager ingests access logs directly from your CDN or web host, so your crawls carry log file analysis data without you running a log platform of your own. It is the successor to the Logz.io and Splunk integrations, which remain supported.

Two objects make up the integration:

  • A log source (LogManagerConnection) — one per place your logs come from, owned by the account.
  • A project attachment (LogManagerProjectSettings) — links a log source to one project and holds that project's ingestion settings. One log source can feed many projects, each with its own settings.
Early access

Lumar Log Manager is in early access and is enabled per account. Four mutations require it to be enabled and return a feature-not-available error otherwise: createLogManagerConnection, updateLogManagerConnection, createLogManagerProjectSettings and updateLogManagerProjectSettings. Contact your Lumar account manager to have it switched on.

Reading your log sources and settings, and both delete mutations, stay available whether or not it is enabled — so an account that had it switched off can always inspect and remove what it already has. The surface described here may still change before general availability.

How setting up a log source works​

Unlike the Logz.io and Splunk integrations, you do not supply credentials through the API. Creating a log source registers a request with Lumar; our support team then builds the delivery pipeline with you and exchanges any credentials out of band. The flow is:

  1. You create the log source. It is returned with status: BeingConfigured and a Lumar-generated tenantId.
  2. Lumar support contacts you, sets the delivery up, and moves the source to Connected — or to ConnectionError with a statusMessage explaining what is blocking it.
  3. You attach the source to the projects that should use it.

You can attach a source to projects at any point, including while it is still BeingConfigured; logs start flowing into crawls once the source reaches Connected.

status and statusMessage are set by Lumar support, not by API clients — there is no input field for them. Poll the source (or watch it in the app) to see where configuration has got to.

Listing the available providers​

getLogManagerProviders returns the CDNs and web hosts a log source can be created for, grouped by category and ordered for display. It is static reference data and needs no account context.

Operation: query GetLogManagerProviders { getLogManagerProviders { provider name category displayOrder } }Variables: {}Response Example: { "data": { "getLogManagerProviders": [ { "provider": "Cloudflare", "name": "Cloudflare", "category": "Cdn", "displayOrder": 1 }, { "provider": "Akamai", "name": "Akamai", "category": "Cdn", "displayOrder": 2 }, { "provider": "Fastly", "name": "Fastly", "category": "Cdn", "displayOrder": 3 }, { "provider": "GoogleCloudCdn", "name": "Google Cloud CDN", "category": "Cdn", "displayOrder": 4 }, { "provider": "AmazonCloudfront", "name": "Amazon CloudFront", "category": "Cdn", "displayOrder": 5 }, { "provider": "Wordpress", "name": "WordPress", "category": "WebHost", "displayOrder": 1 }, { "provider": "Shopify", "name": "Shopify", "category": "WebHost", "displayOrder": 2 }, { "provider": "Squarespace", "name": "Squarespace", "category": "WebHost", "displayOrder": 3 }, { "provider": "Wix", "name": "Wix", "category": "WebHost", "displayOrder": 4 }, { "provider": "Other", "name": "Custom / Other", "category": "Other", "displayOrder": 1 } ] } }
GetLogManagerProvidersTry in Explorer
GraphQL
query GetLogManagerProviders {
getLogManagerProviders {
provider
name
category
displayOrder
}
}

If your provider is not in the list, create the source with provider: Other and describe your setup when Lumar support gets in touch.

Creating a log source​

Requires the Admin role on the account.

Operation: mutation CreateLogManagerConnection($input: CreateLogManagerConnectionInput!) { createLogManagerConnection(input: $input) { logManagerConnection { id name provider status tenantId } } }Variables: { "input": { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "name": "Acme Corp — CDN production", "provider": "AmazonCloudfront" } }Response Example: { "data": { "createLogManagerConnection": { "logManagerConnection": { "id": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "name": "Acme Corp — CDN production", "provider": "AmazonCloudfront", "status": "BeingConfigured", "tenantId": "lm_9f3a4b7c1d2e5f60" } } } }
CreateLogManagerConnectionTry in Explorer
GraphQL
mutation CreateLogManagerConnection($input: CreateLogManagerConnectionInput!) {
createLogManagerConnection(input: $input) {
logManagerConnection {
id
name
provider
status
tenantId
}
}
}

Notes on the response:

  • status is always BeingConfigured on creation.
  • tenantId (for example lm_9f3a4b7c1d2e5f60) is the handle Lumar uses to identify this source's log pipeline. Quote it when you contact support about the source. It is an identifier, not a secret — credentials are never carried on this object. For an existing delivery pipeline, support can match this value to its tenant identifier. Do not assume that every tenant identifier starts with lm_ or remains unchanged.
  • provider cannot be changed afterwards. If you move to a different CDN, create a new log source and delete the old one.

name must be unique within the account; a duplicate is rejected.

Listing log sources​

Log sources hang off the account.

Operation: query GetLogManagerConnections($accountId: ObjectID!) { getAccount(id: $accountId) { logManagerConnections(first: 10, orderBy: [{ field: createdAt, direction: DESC }]) { nodes { id name provider status statusMessage tenantId createdAt projects { totalCount } } totalCount pageInfo { hasNextPage endCursor } } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ" }Response Example: { "data": { "getAccount": { "logManagerConnections": { "nodes": [ { "id": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "name": "Acme Corp — CDN production", "provider": "AmazonCloudfront", "status": "Connected", "statusMessage": null, "tenantId": "lm_9f3a4b7c1d2e5f60", "createdAt": "2026-08-03T09:12:44.000Z", "projects": { "totalCount": 2 } } ], "totalCount": 1, "pageInfo": { "hasNextPage": false, "endCursor": "MQ" } } } } }
GetLogManagerConnectionsTry in Explorer
GraphQL
query GetLogManagerConnections($accountId: ObjectID!) {
getAccount(id: $accountId) {
logManagerConnections(first: 10, orderBy: [{ field: createdAt, direction: DESC }]) {
nodes {
id
name
provider
status
statusMessage
tenantId
createdAt
projects {
totalCount
}
}
totalCount
pageInfo {
hasNextPage
endCursor
}
}
}
}

status is one of:

StatusMeaning
BeingConfiguredLumar support is setting the delivery pipeline up. No logs are flowing yet.
ConnectedThe pipeline is delivering. Attached projects pick logs up on their next crawl.
ConnectionErrorDelivery has stopped or could not be established. Read statusMessage for the explanation, which is written by Lumar support.

statusMessage is null unless there is something to explain. Moving a source off ConnectionError clears it, unless Lumar support sets a new message in the same update — so a Connected source can still carry one. Read status to decide whether a source is in error, not the presence of a message.

projects is a standard connection — select totalCount alone to get the "projects using this source" count without fetching the rows. It only counts projects you have access to.

You can filter and sort the connection on name, provider, status, tenantId, createdAt and updatedAt; see Filtering and Sorting.

Renaming a log source​

Requires the Admin role. name is the only field an API client can change.

Operation: mutation UpdateLogManagerConnection($input: UpdateLogManagerConnectionInput!) { updateLogManagerConnection(input: $input) { logManagerConnection { id name status } } }Variables: { "input": { "logManagerConnectionId": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "name": "Acme Corp — CDN production (EU)" } }Response Example: { "data": { "updateLogManagerConnection": { "logManagerConnection": { "id": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "name": "Acme Corp — CDN production (EU)", "status": "Connected" } } } }
UpdateLogManagerConnectionTry in Explorer
GraphQL
mutation UpdateLogManagerConnection($input: UpdateLogManagerConnectionInput!) {
updateLogManagerConnection(input: $input) {
logManagerConnection {
id
name
status
}
}
}

Attaching a log source to a project​

Requires the Editor role on the account that owns the project. The log source and the project must belong to the same account.

Operation: mutation CreateLogManagerProjectSettings($input: CreateLogManagerProjectSettingsInput!) { createLogManagerProjectSettings(input: $input) { logManagerProjectSettings { id enabled dateRange } project { id name } } }Variables: { "input": { "projectId": "TjAwN1Byb2plY3Q5ODc2NQ", "logManagerConnectionId": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "dateRange": 30 } }Response Example: { "data": { "createLogManagerProjectSettings": { "logManagerProjectSettings": { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "enabled": true, "dateRange": 30 }, "project": { "id": "TjAwN1Byb2plY3Q5ODc2NQ", "name": "example.com" } } } }
CreateLogManagerProjectSettingsTry in Explorer
GraphQL
mutation CreateLogManagerProjectSettings($input: CreateLogManagerProjectSettingsInput!) {
createLogManagerProjectSettings(input: $input) {
logManagerProjectSettings {
id
enabled
dateRange
}
project {
id
name
}
}
}

Every field except projectId and logManagerConnectionId has a default, so the mutation above is close to the minimum you need. The settings are:

FieldDefaultWhat it does
enabledtrueWhether this source feeds the project's crawls. Set false to pause it without detaching.
dateRange30How many complete days of logs to fetch. See below.
desktopUaRegexp / desktopUaNotRegexpGooglebot desktopUser agents counted as — and excluded from — desktop bot requests.
mobileUaRegexp / mobileUaNotRegexpGooglebot mobileThe same, for mobile bot requests.
aiUaRegexp / aiUaNotRegexpcommon AI crawlersThe same, for AI bot requests.

A crawl reads the most recent dateRange complete days in the log store. A day counts as complete once the following day's logs have arrived, so the window usually ends the day before the crawl.

baseUrl, useLastCrawlDate and maxRows are deprecated. maxRows is ignored: log extraction never capped the rows it reads. useLastCrawlDate is also ignored: the window is always dateRange days. baseUrl still applies while set, but will be removed; log paths will then resolve against the project's primary domain.

The three user-agent buckets are what the log file analysis reports break traffic down by. The defaults track Googlebot and the mainstream AI crawlers; override them if you want to measure a different set of bots. See CreateLogManagerProjectSettingsInput for the exact default patterns.

Constraints worth knowing before you script this:

  • A project can have at most 30 log sources attached (TOO_MANY_LOG_MANAGER_PROJECT_SETTINGS).
  • The same log source cannot be attached to the same project twice.
  • Test suites cannot have log sources attached; attach the source to the project instead.

Reading a project's log settings​

Operation: query GetLogManagerProjectSettings($projectId: ObjectID!) { getProject(id: $projectId) { logManagerProjectSettings(first: 10) { nodes { id enabled dateRange desktopUaRegexp mobileUaRegexp aiUaRegexp logManagerConnection { id name status } } totalCount } } }Variables: { "projectId": "TjAwN1Byb2plY3Q5ODc2NQ" }Response Example: { "data": { "getProject": { "logManagerProjectSettings": { "nodes": [ { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "enabled": true, "dateRange": 30, "desktopUaRegexp": ".*Googlebot.*http://www.google.com/bot.html.*", "mobileUaRegexp": ".*Mobile.*Googlebot.*http://www.google.com/bot.html.*", "aiUaRegexp": ".*(GPTBot|ClaudeBot|PerplexityBot).*", "logManagerConnection": { "id": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "name": "Acme Corp — CDN production", "status": "Connected" } } ], "totalCount": 1 } } } }
GetLogManagerProjectSettingsTry in Explorer
GraphQL
query GetLogManagerProjectSettings($projectId: ObjectID!) {
getProject(id: $projectId) {
logManagerProjectSettings(first: 10) {
nodes {
id
enabled
dateRange
desktopUaRegexp
mobileUaRegexp
aiUaRegexp
logManagerConnection {
id
name
status
}
}
totalCount
}
}
}

Changing a project's log settings​

Requires the Editor role. Omitted fields are left unchanged. The three ...NotRegexp fields accept an explicit null to clear them.

Operation: mutation UpdateLogManagerProjectSettings($input: UpdateLogManagerProjectSettingsInput!) { updateLogManagerProjectSettings(input: $input) { logManagerProjectSettings { id enabled dateRange } } }Variables: { "input": { "logManagerProjectSettingsId": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "dateRange": 14 } }Response Example: { "data": { "updateLogManagerProjectSettings": { "logManagerProjectSettings": { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "enabled": true, "dateRange": 14 } } } }
UpdateLogManagerProjectSettingsTry in Explorer
GraphQL
mutation UpdateLogManagerProjectSettings($input: UpdateLogManagerProjectSettingsInput!) {
updateLogManagerProjectSettings(input: $input) {
logManagerProjectSettings {
id
enabled
dateRange
}
}
}

Detaching a log source from a project​

Requires the Editor role. Removes the settings for that one project. The log source itself, and its other projects, are untouched.

Operation: mutation DeleteLogManagerProjectSettings($input: DeleteLogManagerProjectSettingsInput!) { deleteLogManagerProjectSettings(input: $input) { logManagerProjectSettings { id } project { id } } }Variables: { "input": { "logManagerProjectSettingsId": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx" } }Response Example: { "data": { "deleteLogManagerProjectSettings": { "logManagerProjectSettings": { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx" }, "project": { "id": "TjAwN1Byb2plY3Q5ODc2NQ" } } } }
DeleteLogManagerProjectSettingsTry in Explorer
GraphQL
mutation DeleteLogManagerProjectSettings($input: DeleteLogManagerProjectSettingsInput!) {
deleteLogManagerProjectSettings(input: $input) {
logManagerProjectSettings {
id
}
project {
id
}
}
}

Deleting a log source​

Requires the Admin role.

Operation: mutation DeleteLogManagerConnection($input: DeleteLogManagerConnectionInput!) { deleteLogManagerConnection(input: $input) { logManagerConnection { id name } } }Variables: { "input": { "logManagerConnectionId": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ" } }Response Example: { "data": { "deleteLogManagerConnection": { "logManagerConnection": { "id": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "name": "Acme Corp — CDN production (EU)" } } } }
DeleteLogManagerConnectionTry in Explorer
GraphQL
mutation DeleteLogManagerConnection($input: DeleteLogManagerConnectionInput!) {
deleteLogManagerConnection(input: $input) {
logManagerConnection {
id
name
}
}
}

Deleting a log source also detaches it from every project it was attached to — you do not need to remove the project settings first, and there is no confirmation step. Lumar support is notified so the delivery pipeline on the provider side can be decommissioned.

Deletion stays available when a subscription has lapsed, so you can always switch off a log feed you are no longer paying for.

Reference​