This article will detail configuration of the Logship database.
The database is the backbone of any logship deployment. Configuration is specified between the database and backend sections, each providing configurable services with a wide range of capabilities.
Specifies the log level for Microsoft.Hosting.Lifetime.
agent
Property
Type
Required
Description
udpMetricsEndpoint
String
Yes
Specifies the UDP metrics endpoint.
database
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the database.
master
Boolean
Yes
Enables or disables the master database.
endpoints
Object
Yes
Defines endpoints for worker and master.
services
Object
Yes
Defines various database services.
endpoints
worker
Value
Type
Required
Description
String[]
Yes
Specifies the worker endpoints.
master
Value
Type
Required
Description
String[]
Yes
Specifies the master endpoints.
services
keyvalue
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the keyvalue service.
dataPath
String
Yes
Specifies the data path for keyvalue service.
transactionManager
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the transaction manager service.
transactionLog
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the transaction log service.
disk
Object
Yes
Defines disk settings for the transaction log service.
memory
Object
Yes
Defines memory settings for the transaction log service.
disk
Property
Type
Required
Description
enable
Boolean
No
Enables or disables disk storage for the transaction log.
path
String
Yes
Specifies the path for disk storage of the transaction log.
memory
Property
Type
Required
Description
enable
Boolean
No
Enables or disables memory storage for the transaction log.
gateway
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the gateway service.
partitionManager
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the partition manager service.
backend
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the backend service.
listenPort
Number
No
HTTP API listen port. Defaults to 5000.
endpoints
Object
Yes
Defines endpoints for worker and master.
database
Object
Yes
Defines database settings for worker and master.
services
Object
Yes
Defines various backend services.
master
Boolean
Yes
Enables or disables the master backend service.
endpoints
worker
Value
Type
Required
Description
String[]
Yes
Specifies the worker endpoints.
master
Value
Type
Required
Description
String[]
Yes
Specifies the master endpoints.
database
worker
Value
Type
Required
Description
String[]
Yes
Specifies the worker database endpoint.
master
Value
Type
Required
Description
String[]
Yes
Specifies the master database endpoint.
services
databaseService
Backing metadata store for accounts, dashboards, alerts, and other relational state.
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the database service.
sqlite
Object
Yes
SQLite backing-store settings.
sqlite
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the SQLite backing store.
fileName
String
Yes
SQLite database file name (under the data root).
createDirectory
Boolean
No
Create the database file's parent directory when it is missing. Defaults to false.
When createDirectory is false (the default), the service fails to start if the directory in fileName does not exist, surfacing a misconfigured path instead of silently writing to an unexpected location. Set it to true to have the service create the directory on startup, matching the behavior of collectorService and searchExecutorService.
📝Note
Enable createDirectory for containerized or ephemeral deployments where the data directory is not provisioned ahead of the process. Leave it false in production so a genuinely wrong path fails fast.
schemaManager
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the schema manager.
configService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the config service.
inflowService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the inflow service.
maximumBufferedBytes
Number
No
Shared accounted memory for pending JSON/internal records and CSV/TSV indexing buffers across accounts and schemas. Default: 67108864 (64 MiB).
maximumConcurrentUploads
Number
No
Maximum simultaneous HTTP ingestion requests reading input. Default: 4. Additional requests wait without parsing their bodies.
maximumEncodingConcurrency
Number
No
Service-wide CSV/TSV/columnar encoding worker limit shared across uploads. Default: max(1, min(8, CPU count - 2)). Parsing and publication use separate execution paths.
maximumRecordBytes
Number
No
Maximum accounted memory per parsed record, also limiting each UTF-8 CSV/TSV header or complete record (excluding its final line ending, including quoted newlines). Default: 1048576 (1 MiB). Oversized records return HTTP 413.
ingestionPath
String
No
Persistent directory for durable CSV/TSV ingestion segments, relative to DataRoot unless absolute. Default: inflow. Keep this directory on persistent storage.
maximumSpoolBytes
Number
No
Accounted disk capacity for pending CSV/TSV segment payloads, manifests and active encoding reservations. Default: 8589934592 (8 GiB). Must hold a segment plus an encoding batch for every simultaneous upload, with room for publication.
segmentBytes
Number
No
Target reserved size per indexed ingestion segment, including estimated header storage. Default: 67108864 (64 MiB). Actual payloads can be smaller; a batch can cross the target. Must hold a maximum-sized record.
CSV/TSV and negotiated columnar uploads produce immutable typed column batches. Frames cap at 1,024 rows and wide frames split into smaller buffers. A larger individual record occupies its own batch. Parsing overlaps bounded indexing work. Indexed row groups combine at most 8,192 numeric rows or 4,096 rows containing variable fields, with a source-buffer target of at most 8 MiB reduced according to the shared memory limit and upload concurrency. Completed files are checksummed and flushed into the persistent ingestion directory; a background publisher transfers them to executors without reconstructing records over the collection RPC. Small uploads flush their last segment at request completion.
When the shared work budget or ingestion disk capacity is exhausted, uploads stop reading until capacity becomes available. Total input file size is unlimited. Work reservations cover retained input, merged columns, statistics and encoding scratch/dictionaries. Each upload's retained headers, buffered workspace and next reservation must fit maximumBufferedBytes / maximumConcurrentUploads to ensure concurrent uploads can make progress. Batches split and segments flush to respect that share. Scratch spills to the ingestion volume rather than waiting while holding memory. Each admitted request additionally retains at most two bounded decoder staging batches; protocol metadata, stream/compressor state, runtime and catalog caches are outside this budget. A single record whose conservative encoding workspace cannot fit the per-upload share returns HTTP 413 even if its text fits maximumRecordBytes; increase maximumBufferedBytes or reduce maximumConcurrentUploads to increase that share.
Each record must fit the memory budgets of both its inflow service and its collector. Accounting includes payloads and object overhead, so a wide record can require more memory than its UTF-8 representation. These budgets bound pending record buffers, not the total process working set: parsers, RPC messages, schema metadata, indexing and other services require additional memory. Ingestion settings take effect when the service starts.
The indexed-file format also limits an individual encoded field to 65,535 bytes. CSV/TSV decoders report the column and physical record start line when a value exceeds that limit.
Successful CSV/TSV responses acknowledge local disk-flushed acceptance, including a catalog receipt. Pending files survive process/server restart and remain until executor publication is committed. Publication retries reuse the same file identity, and catalog receipts fence replay after publication, compaction, truncation or deletion. This is local durability; loss of the ingestion disk requires a separate replication policy. Query visibility follows publication and can lag acceptance.
Uploads do not provide whole-file transactions or client retry identities. Earlier segments may have been accepted if a later row is malformed or the request is interrupted. Retrying the whole file can duplicate those rows. A concurrent incompatible declaration can reject an unfinished segment before acceptance. JSON and internal-metric uploads retain their existing queue semantics.
Monitor ingestion.memory.retained_bytes and ingestion.memory.wait_ms with stage=inflow, stage=collector or stage=inflow-spool, and metrics.inflow.uploads.active, to distinguish memory/disk backpressure from downstream publication delays. The spool stage measures accounted disk reservations. Corrupt segments are retained and logged for repair. The catalog retains ingestion replay receipts after source reclamation; include this metadata in long-term capacity planning.
Upgrade catalog and executor nodes before inflow nodes. Durable CSV publication uses a distinct internal RPC, so an older executor cannot silently acknowledge an unflushed file. An unavailable compatible executor leaves accepted segments on disk and eventually applies backpressure. Before downgrading inflow, drain its pending segments; older versions cannot replay them.
Collectors request bounded fetches of at most 16,384 rows or approximately 8 MiB of accounted memory per inflow endpoint, and include at most two endpoints in each collection job. Individual RPC messages and writer batches remain bounded by 1,024 rows or approximately 1 MiB. This also bounds data queued by the RPC transport and the size of each temporary file export. Remaining records stay charged to inflow until a later collection pass; collection continues without a polling delay while it makes progress. A record larger than a batch target is fetched alone. Older RPC callers retain their existing drain behavior; upgrade inflow and collector nodes together to apply these bounds throughout the path.
collectorService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the collector service.
tempPath
String
Yes
Specifies the temporary path for the collector service.
maximumBufferedBytes
Number
No
Shared accounted memory for queued records and indexed-file row groups. Default: 33554432 (32 MiB).
maximumConcurrentCollections
Number
No
Maximum simultaneous account/schema collection jobs. Default: 2. Each job reads at most two inflow endpoints concurrently.
searchExecutorService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the search executor service.
dataPath
String
Yes
Specifies the data path for the search executor service.
minimumFreeSpaceBytes
Number
Yes
Specifies the minimum free space in bytes for the search executor service.
minimumFreeSpacePercentage
Number
Yes
Specifies the minimum free space percentage for the search executor service.
searchQueryService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the search query service.
accountsService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the accounts service.
jwt
Object
Yes
Defines JWT settings for the accounts service.
oauth
Object
Yes
Defines OAuth settings for the accounts service.
jwt
Property
Type
Required
Description
enable
Boolean
No
Enables or disables JWT for the accounts service.
issuer
String
Yes
Specifies the issuer for JWT tokens.
audience
String
Yes
Specifies the audience for JWT tokens.
signingKey
String
Yes
Specifies the signing key for JWT tokens.
oauth
All identity-provider connection details (client id, authority, endpoints, issuers, audiences) live on each entry of providers[] — see providers[] below. The oauth object itself holds only the cross-provider settings:
Property
Type
Required
Description
enable
Boolean
No
Enables OAuth/OIDC sign-in for the accounts service.
providers
Object[]
Yes
One or more OIDC providers. At least one must have enable: true.
createDefaultUser
Boolean
No
Auto-provision a Logship user when the token does not match one.
defaultUserAccount
String
No
Account id assigned to auto-provisioned users.
requireVerifiedEmail
Boolean
No
Reject tokens that do not assert a verified email. Defaults to true.
emailVerifiedClaimType
String
No
Claim that asserts the email is verified. Defaults to email_verified.
userIdClaimType
String
No
Claim used as the external subject identifier. Defaults to sub.
firstNameClaimType
String
No
Claim used for the user's first name. Defaults to given_name.
lastNameClaimType
String
No
Claim used for the user's last name. Defaults to family_name.
nickNameClaimType
String
No
Claim used for the user's nickname/display handle. Defaults to nickname.
emailClaimType
String
No
Claim used to match or create the Logship username.
claimMappings
Object[]
No
Rules granting Logship permissions based on token claims.
Logship only enables the OAuth bearer scheme when oauth.enable is true. Each enabled provider is exposed through /auth/oauth, rendered as a separate login option in the frontend, and accepted by the backend bearer auth pipeline.
⚠️Warning
requireVerifiedEmail defaults to true: Logship rejects any token whose emailVerifiedClaimType claim is missing or not true. This prevents account takeover when an IdP issues a token with an unverified, user-settable email/username that collides with an existing Logship user. Only set it to false when the IdP guarantees the identity claim out-of-band.
📝Note
A plain OAuth 2.0 provider that is not OIDC cannot be used directly. Logship validates an RSA-signed JWT discovered via metadataAddress and requires a verified-email claim. To sign in with such a provider, front it with an OIDC broker (e.g. Keycloak or Dex) and point Logship at the broker.
When a token is accepted, Logship resolves the user from the configured emailClaimType. If the user already exists, Logship signs that user in. If the user does not exist and createDefaultUser is true, Logship creates the user and adds them to defaultUserAccount with a least-privileged Logship.Data.Viewer account permission.
claimMappings[]
Each mapping grants a set of Logship permissions when a token carries a matching claim value. On every login, Logship recomputes the set of granted permissions and syncs the user's global permissions to match: permissions listed in any mapping are considered "managed by SSO" and are added when a rule matches, removed when no rule matches. Permissions not referenced by any mapping are left alone, so permissions assigned through the admin UI are preserved.
Property
Type
Required
Description
claimType
String
Yes
JWT claim to inspect (e.g. email, groups, roles).
values
String[]
Yes
Claim values that trigger this mapping. Comparison is case-insensitive.
permissions
String[]
Yes
Logship permission names to grant. Must be entries from AuthPermissions.
Permission names must match an entry in Logship's AuthPermissions table (Logship.Global.Admin, Logship.Account.Admin, Logship.Data.Viewer, etc.). Only global-scope permissions (like Logship.Global.Admin) take effect through claim mappings — account-scoped permissions are managed per-account.
providers[]
Use providers when you need multiple SSO or need to accept tokens from more than one OIDC identity provider. Claim-to-role mapping remains shared across all providers. Each provider is disabled by default, so set enable to true for every provider you want Logship to expose and accept.
Property
Type
Required
Description
enable
Boolean
No
Explicitly enables this provider. Defaults to false.
id
String
Yes
Stable identifier for the provider. Used by the frontend redirect flow.
displayName
String
No
Friendly label shown on the login button. Defaults to clientId/id.
clientId
String
Yes
OIDC client id Logship expects in the token audience.
scope
String
Yes
Scope string returned to the frontend for PKCE sign-in.
metadataAddress
String
Yes
OIDC discovery document URL.
authority
String
Yes
Issuer/authority URL for the identity provider.
tokenEndpoint
String
Yes
Token endpoint exposed to the frontend.
authorizeEndpoint
String
Yes
Authorization endpoint exposed to the frontend.
deviceEndpoint
String
Yes
Device authorization endpoint for device code flow clients.
requireHttpsMetadata
Boolean
No
Require HTTPS for discovery and metadata requests.
Allow the redirect URI used by your Logship frontend, including /login/oauth/redirect.
Ensure the issued token includes sub, email, given_name, family_name, and preferred_username claims, or adjust the claim mapping fields above to match your provider.
If you want to grant Logship permissions by group membership, add an oidc-group-membership-mapper to the client (token claim name groups, include in access token) so the access token carries a groups claim you can reference in claimMappings.
messengerService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the messenger service.
dashboardService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the dashboard service.
evaluatorManagerService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the evaluator manager service.
evaluatorRunnerService
Property
Type
Required
Description
enable
Boolean
No
Enables or disables the evaluator runner service.
setupService
The setup service can optionally provision accounts and users on startup (useful for local/dev and automation).
Property
Type
Required
Description
enable
Boolean
Yes
Enables or disables the setup service.
provision
Boolean
Yes
When true, provisions configured accounts/users on startup.
accounts
Object[]
No
Accounts to create/ensure exist (when provision: true).
users
Object[]
No
Users to create/ensure exist (when provision: true).
Defaults to true. Creates Logship's default alerts and dashboards in the Administration account when they do not exist. Runs even when provision is false.
dashboards
Object[]
No
Dashboards to provision from JSON files (when provision: true).
accounts[]
Property
Type
Required
Description
accountId
String
Yes
Account id to create/ensure exists.
accountName
String
Yes
Human-friendly account name.
override
Boolean
No
Re-provision the account even if it already exists.
settings
Object
No
Account settings, as name/value pairs.
evaluators
Object[]
No
Alerts to create for the account. Each has evaluatorId, name, query, and optionally content, intervalSeconds (default 300), isEnabled, thresholds[], uniqueFields[] and messageTargets[].
users[]
Property
Type
Required
Description
userId
String
Yes
User id to create/ensure exists.
username
String
Yes
Username for password login.
password
String
Yes
Password for password login.
firstname
String
Yes
First name.
lastname
String
Yes
Last name.
email
String
Yes
Email address.
override
Boolean
No
Re-provision the user even if it already exists.
defaultGlobalPermissions
String[]
No
Global permissions granted to the user.
defaultAccounts
Object[]
No
Accounts the user should be added to.
users[].defaultAccounts[]
Property
Type
Required
Description
accountName
String
Yes
The account name to add the user to (must exist in accounts[]).