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 maxRows useLastCrawlDate } project { id name } } }Variables: { "input": { "projectId": "TjAwN1Byb2plY3Q5ODc2NQ", "logManagerConnectionId": "TjAyMExvZ01hbmFnZXJDb25uZWN0aW9uMQ", "baseUrl": "https://www.example.com", "dateRange": 30 } }Response Example: { "data": { "createLogManagerProjectSettings": { "logManagerProjectSettings": { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "enabled": true, "dateRange": 30, "maxRows": 10000000, "useLastCrawlDate": false }, "project": { "id": "TjAwN1Byb2plY3Q5ODc2NQ", "name": "example.com" } } } }
CreateLogManagerProjectSettingsTry in Explorer
GraphQL
mutation CreateLogManagerProjectSettings($input: CreateLogManagerProjectSettingsInput!) {
createLogManagerProjectSettings(input: $input) {
logManagerProjectSettings {
id
enabled
dateRange
maxRows
useLastCrawlDate
}
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.
baseUrlproject's primary domainThe base URL log paths are resolved against.
dateRange30How many days of logs to fetch, counting back from the crawl.
useLastCrawlDatefalseFetch logs since the last finished crawl instead of using dateRange. Falls back to dateRange when the project has no finished crawl.
maxRows10000000Maximum number of log rows to fetch per crawl.
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.

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 baseUrl dateRange useLastCrawlDate maxRows desktopUaRegexp mobileUaRegexp aiUaRegexp logManagerConnection { id name status } } totalCount } } }Variables: { "projectId": "TjAwN1Byb2plY3Q5ODc2NQ" }Response Example: { "data": { "getProject": { "logManagerProjectSettings": { "nodes": [ { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "enabled": true, "baseUrl": "https://www.example.com", "dateRange": 30, "useLastCrawlDate": false, "maxRows": 10000000, "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
baseUrl
dateRange
useLastCrawlDate
maxRows
desktopUaRegexp
mobileUaRegexp
aiUaRegexp
logManagerConnection {
id
name
status
}
}
totalCount
}
}
}

Changing a project's log settings

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

Operation: mutation UpdateLogManagerProjectSettings($input: UpdateLogManagerProjectSettingsInput!) { updateLogManagerProjectSettings(input: $input) { logManagerProjectSettings { id enabled useLastCrawlDate dateRange } } }Variables: { "input": { "logManagerProjectSettingsId": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "useLastCrawlDate": true } }Response Example: { "data": { "updateLogManagerProjectSettings": { "logManagerProjectSettings": { "id": "TjAyNUxvZ01hbmFnZXJQcm9qZWN0U2V0dGluZ3Mx", "enabled": true, "useLastCrawlDate": true, "dateRange": 30 } } } }
UpdateLogManagerProjectSettingsTry in Explorer
GraphQL
mutation UpdateLogManagerProjectSettings($input: UpdateLogManagerProjectSettingsInput!) {
updateLogManagerProjectSettings(input: $input) {
logManagerProjectSettings {
id
enabled
useLastCrawlDate
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