immich-app/immich · critical · Error
Invalid telemetry found: ${telemetry}
Error message
Invalid telemetry found: ${telemetry} What it means
getEnv() computes the telemetry set from IMMICH_TELEMETRY_INCLUDE/EXCLUDE (or 'all') and validates each entry against TELEMETRY_TYPES. Any unknown telemetry name throws Error('Invalid telemetry found: <name>'). This is a startup-time config guard.
Source
Thrown at server/src/repositories/config.repository.ts:229
const redisUrl = dto.REDIS_URL;
if (redisUrl && redisUrl.startsWith('ioredis://')) {
try {
redisConfig = JSON.parse(Buffer.from(redisUrl.slice(10), 'base64').toString());
} catch (error) {
throw new Error('Failed to decode redis options', { cause: error });
}
}
const includedTelemetries =
dto.IMMICH_TELEMETRY_INCLUDE === 'all'
? new Set(Object.values(ImmichTelemetry))
: asSet<ImmichTelemetry>(dto.IMMICH_TELEMETRY_INCLUDE, []);
const excludedTelemetries = asSet<ImmichTelemetry>(dto.IMMICH_TELEMETRY_EXCLUDE, []);
const telemetries = setDifference(includedTelemetries, excludedTelemetries);
for (const telemetry of telemetries) {
if (!TELEMETRY_TYPES.has(telemetry)) {
throw new Error(`Invalid telemetry found: ${telemetry}`);
}
}
const databaseConnection: DatabaseConnectionParams = dto.DB_URL
? { connectionType: 'url', url: dto.DB_URL }
: {
connectionType: 'parts',
host: dto.DB_HOSTNAME || 'database',
port: dto.DB_PORT || 5432,
username: dto.DB_USERNAME || 'postgres',
password: dto.DB_PASSWORD || 'postgres',
database: dto.DB_DATABASE_NAME || 'immich',
ssl: dto.DB_SSL_MODE || undefined,
};
let vectorExtension: VectorExtension | undefined;
if (dto.DB_VECTOR_EXTENSION) {
switch (dto.DB_VECTOR_EXTENSION) {View on GitHub (pinned to 199723261c)
Solutions
- Compare the listed telemetry name to the current ImmichTelemetry enum and correct the typo/renamed value.
- Remove unknown entries from IMMICH_TELEMETRY_INCLUDE/EXCLUDE.
- Use IMMICH_TELEMETRY_INCLUDE=all to enable every supported backend without naming them.
Defensive patterns
Strategy: validation
Validate before calling
import { ImmichTelemetry } from '@immich/sdk';
const VALID = new Set(Object.values(ImmichTelemetry));
const requested = (process.env.IMMICH_TELEMETRY_INCLUDE ?? '').split(',').filter(Boolean);
const bad = requested.filter((t) => !VALID.has(t as ImmichTelemetry));
if (bad.length) throw new Error(`Unknown telemetry: ${bad.join(', ')}`); Type guard
const isTelemetry = (v: string): v is ImmichTelemetry => new Set(Object.values(ImmichTelemetry)).has(v as ImmichTelemetry);
Prevention
- Use IMMICH_TELEMETRY_INCLUDE=all to avoid naming individual backends.
- Re-check telemetry enum values after upgrades.
- Keep observability config in version control and lint it.
When it happens
Trigger: Setting IMMICH_TELEMETRY_INCLUDE or IMMICH_TELEMETRY_EXCLUDE to a comma-separated list containing a value that is not a valid ImmichTelemetry enum member.
Common situations: Typo in a telemetry backend name; referencing a telemetry option removed/renamed in this version; copying a stale config from an older release.
Related errors
- Invalid environment variables: \n - [${path}] ${issue.messa
- Invalid worker(s) found: ${workers.join(',')}
- Failed to decode redis options
- Failed to read helmet file: ${helmetFile}
- Unable to determine worker type
AI-assisted analysis of immich-app/immich@199723261c (2026-08-12).
Data as JSON: /api/errors/5f99a1280bd7c937.
Report an issue: GitHub.