louislam/uptime-kuma · error · Error
Kafka Producer SASL Options must be valid JSON: ${e.message}
Error message
Kafka Producer SASL Options must be valid JSON: ${e.message} What it means
validate() runs JSON.parse on kafkaProducerSaslOptions for kafka-producer monitors. It must be a JSON object (e.g. {"mechanism":"plain","username":"u","password":"p"}) or empty when SASL is unused.
Source
Thrown at server/model/monitor.js:1657
if (this.response_max_length > RESPONSE_BODY_LENGTH_MAX) {
throw new Error(`Response max length cannot be more than ${RESPONSE_BODY_LENGTH_MAX} bytes`);
}
}
// Validate JSON fields to prevent invalid JSON from being stored in database
if (this.kafkaProducerBrokers) {
try {
JSON.parse(this.kafkaProducerBrokers);
} catch (e) {
throw new Error(`Kafka Producer Brokers must be valid JSON: ${e.message}`);
}
}
if (this.kafkaProducerSaslOptions) {
try {
JSON.parse(this.kafkaProducerSaslOptions);
} catch (e) {
throw new Error(`Kafka Producer SASL Options must be valid JSON: ${e.message}`);
}
}
if (this.rabbitmqNodes) {
try {
JSON.parse(this.rabbitmqNodes);
} catch (e) {
throw new Error(`RabbitMQ Nodes must be valid JSON: ${e.message}`);
}
}
if (this.conditions) {
try {
JSON.parse(this.conditions);
} catch (e) {
throw new Error(`Conditions must be valid JSON: ${e.message}`);
}
}View on GitHub (pinned to 6b5ea01557)
Solutions
- Provide SASL options as a JSON object, or leave empty/omit when not using SASL
- Validate the value parses as an object (not array/primitive) before saving
Example fix
// before
monitor.kafkaProducerSaslOptions = "mechanism=plain,username=u,password=p";
// after
monitor.kafkaProducerSaslOptions = '{"mechanism":"plain","username":"u","password":"p"}'; Defensive patterns
Strategy: validation
Validate before calling
if (monitor.kafkaProducerSaslOptions) {
const v = JSON.parse(monitor.kafkaProducerSaslOptions);
if (typeof v !== "object" || v === null || Array.isArray(v)) throw new Error("SASL options must be a JSON object");
} Type guard
function isValidSasl(v) {
if (!v) return true;
try { const o = JSON.parse(v); return o && typeof o === "object" && !Array.isArray(o); }
catch { return false; }
} Try / catch
try { monitor.validate(); await save(monitor); } catch (e) { /* surface e.message */ } Prevention
- Store SASL options as a JSON object; omit when SASL is unused
- Never type SASL config as key=value text
When it happens
Trigger: kafkaProducerSaslOptions is not parseable as a JSON object, e.g. typed as key=value pairs or missing braces.
Common situations: User typed SASL config as plain text instead of JSON; partial paste missing closing brace.
Related errors
- Kafka Producer Brokers must be valid JSON: ${e.message}
- RabbitMQ Nodes must be valid JSON: ${e.message}
- Conditions must be valid JSON: ${e.message}
- Headers must be valid JSON: ${e.message}
- Accepted status codes must be valid JSON: ${e.message}
AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12).
Data as JSON: /api/errors/dfff6aa44d903426.
Report an issue: GitHub.