Skip to main content

DIAL Analytics configuration

DIAL Analytics reads service settings from Spring configuration and stores catalog objects through its API. This reference is for platform engineers with existing Core request logs and database infrastructure. It assumes familiarity with the service dependencies.

Where each setting lives​

PlaceWhat it setsReference
Container environmentDatabase connections, blob discovery, ingestion schedules, budgets, and pipeline limitsEnvironment variables
External Spring YAMLProviders, cursor keyrings, ingestion target lists, and other map or list overridesSecurity and observability
ClickHouse server configurationEncryption codec key, users, grants, and storage settingsDatabase prerequisites
Analytics catalog APITables, schemas, grants, saved queries, dashboards, and pipeline definitionsDIAL Admin: Analytics
DIAL Admin environmentAnalytics menu switches and internal service URLsConnect DIAL Admin

Configuration uses Spring Boot precedence: command-line arguments override system properties, environment variables, and configuration files. SPRING_CONFIG_ADDITIONAL_LOCATION=file:/config/analytics.yml adds an external file. List overrides replace the corresponding list, including sync.targets; unspecified entries are not appended automatically. See the configuration documentation.

Database prerequisites​

ClickHouse 25.3 LTS or newer is required; native AI query functions additionally require 26.8. The reader needs SELECT on exposed tables. The writer needs SELECT, INSERT, CREATE TABLE, ALTER, and DROP TABLE for the full service surface. The writer also needs SELECT on system.parts and system.data_skipping_indices: without them the enrichment relayout fails, the lookup index is never added, and a schema PATCH that drops a column fails.

For grants scoped per table, include the ingestion ledger _dial_internal_ingested_blob and failure ledger _dial_internal_failed_ingest. Startup migrations need DDL rights; removing those rights without provisioning schemas separately prevents startup. The ClickHouse requirements provide the complete grant matrix.

Payload body columns and rating comments require an AES-256-GCM-SIV codec key in ClickHouse's config.d:

<clickhouse>
<encryption_codecs>
<aes_256_gcm_siv>
<key_hex>&lt;CLICKHOUSE_ENCRYPTION_KEY_HEX&gt;</key_hex>
</aes_256_gcm_siv>
</encryption_codecs>
</clickhouse>

Replace the placeholder with a 64-character hexadecimal secret supplied during deployment. The key must remain available to read existing encrypted columns. See the server-side encryption requirement.

PostgreSQL stores the catalog and audit history. Its user needs schema migration permissions unless POSTGRES_MIGRATIONS_ENABLED=false and the schema is provisioned separately. The runner needs its own database, rather than sharing this catalog schema.

Log blob layout​

Analytics reads gzip-compressed usage logs from one blob container or bucket and finds them from the date alone, so the producer's layout must match the settings below. The defaults describe DIAL Core's own layout.

PartSettingDefault
Container or bucketBLOB_BUCKETlogs
Base pathSYNC_PATH_PREFIXlogs
Date directorySYNC_DATE_PATH_PATTERNyyyy/MM/dd
File name prefix, followed by an embedded epochSYNC_FILE_NAME_PREFIX_PATTERN'date='yyyy-MM-dd

The same settings govern the daily run, the poller, and operator backfills. A mismatch does not fail: Analytics silently discovers nothing. The patterns are defined in Data sync schedule. How Core's logs reach the container is described in Send usage logs to blob storage.

Docker Compose example​

This fragment assumes ClickHouse, PostgreSQL, and Core already run on the same network. The ClickHouse encryption key and database users must already exist. Both PostgreSQL databases must be provisioned before adding the runner fragment.

The mounted analytics.yml contains the provider configuration. The environment placeholders represent credentials from the deployment's secret store, and <VERSION> is an image tag from Docker Hub. This is a service fragment, rather than a complete DIAL assembly.

services:
analytics:
image: epam/ai-dial-analytics:<VERSION>
expose:
- "5000"
- "9464"
environment:
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_DATABASE: analytics
CLICKHOUSE_USER: analytics_reader
CLICKHOUSE_PASSWORD: "<CLICKHOUSE_READER_PASSWORD>"
CLICKHOUSE_WRITER_USER: analytics_writer
CLICKHOUSE_WRITER_PASSWORD: "<CLICKHOUSE_WRITER_PASSWORD>"
POSTGRES_HOST: postgres
POSTGRES_DATABASE: analytics_catalog
POSTGRES_DATASOURCE_USERNAME: analytics
POSTGRES_DATASOURCE_PASSWORD: "<POSTGRES_PASSWORD>"
BLOB_PROVIDER: azureblob
BLOB_BUCKET: logs
BLOB_ENDPOINT: "https://<STORAGE_ACCOUNT>.blob.core.windows.net"
BLOB_IDENTITY: "<STORAGE_ACCOUNT>"
BLOB_CREDENTIAL: "<STORAGE_ACCOUNT_KEY>"
ENRICHMENT_CURSOR_SECRET: "<CURSOR_SIGNING_SECRET>"
MANAGEMENT_SERVER_PORT: "9464"
SECURITY_MODE: oidc
API_KEY_ENABLED: "true"
API_KEY_CORE_URL: http://core:8080
API_KEY_ROLES_MAPPING: '{"analytics-runner":["FULL_ADMIN"]}'
SPRING_CONFIG_ADDITIONAL_LOCATION: file:/config/analytics.yml
volumes:
- ./analytics.yml:/config/analytics.yml:ro

BLOB_BUCKET and the SYNC_* discovery patterns must match the actual producer. For Azure managed identity, omit the shared-key pair and provide workload identity and reader access. For S3, use BLOB_PROVIDER=aws-s3 and a region-specific endpoint. See Blob source.

Port 9464 is explicitly configured here; it is not the service's default management port. expose makes no host port mapping; checks can run inside the container.

Connect DIAL Admin​

  1. Deploy Analytics with reachable databases and blob storage. Configure OIDC providers to validate the tokens forwarded by Admin.
  2. Set the Admin Frontend variables below, using the service URL reachable from its server.
  3. Configure a matching Enrichment Runner for enrichment pipelines and their runtime controls.
  4. Check ingestion, then query an available table in DIAL Admin: Queries.
ANALYTICS_ENABLED=true
DIAL_ANALYTICS_API_URL=http://analytics:5000
ANALYTICS_USAGE_ENABLED=true
ANALYTICS_SESSIONS_ENABLED=true
DIAL_ANALYTICS_RUNNER_API_URL=http://analytics-enrichment-runner:5000

These are Admin Frontend settings, not Analytics settings. Their complete reference, including query assistance and public connection URLs, is DIAL Admin analytics settings. Enabling them does not deploy the backing services.

Fresh installations need the catalog bundle for Sessions and evaluation baggage data. The bundle contains definitions, not data, table grants, or runner state. Its SQL enrichments make no model calls.

  1. Confirm dial_usage_log and dial_usage_log_payload are active after migrations.
  2. Import the bundle through DIAL Admin's configuration import workflow. Review the preview before confirming; existing objects are retained.
  3. Grant table access, accounting for sensitive email and display-name columns.
  4. Enable usage-client-identity-live and usage-request-baggage-live, then sessions_rollup.
  5. Wait for enrichment and aggregate pipelines to catch up before checking Sessions.

The dependency order is specified in the recommended catalog instructions. The first Sessions rollup rescans historical usage, so initialization can require additional processing time.

Verification and troubleshooting​

docker compose exec analytics wget -qO- http://0.0.0.0:9464/actuator/health/readiness

An UP response confirms application readiness and PostgreSQL connectivity. It does not prove blob ingestion or ClickHouse query access. Check both through the data and Queries screens after logs arrive.

SymptomWhat to check
Startup fails during ClickHouse migrationEncryption codec key, the writer credential (migrations authenticate only as the writer), writer DDL rights, and both internal ledger tables
No new usage rowsBlob credentials, bucket, discovery patterns, producer output, and data-sync failures
Sessions is emptyRecommended catalog import, active payload table, enabled enrichment pipelines, runner readiness, and rollup progress
A query returns 401 or 403Issuer, audience, role mapping, table grants, and sensitive-column clearance
Pipeline reads time outKeep runner HTTP read timeout above the Analytics pipeline statement budget, with group-fetch headroom
Runner reports contract mismatchDeploy both services at the matching version using the paired deployment order