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

  1. Provide SASL options as a JSON object, or leave empty/omit when not using SASL
  2. 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

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


AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12). Data as JSON: /api/errors/dfff6aa44d903426. Report an issue: GitHub.