---
title: AMQP
slug: telemetry-pipeline/amqp
docTags: 
createdAt: 2025-04-21T00:55:13.621Z
---

## AMQP Sink – Administrator Guide

The AMQP sink sends log events from Kron TP to an AMQP 0.9.1 compatible message broker, such as RabbitMQ. It is currently marked as beta and provides at-least-once delivery semantics. End-to-end acknowledgements are not supported for this sink, so upstream components cannot wait for broker delivery confirmation as part of an acknowledgement chain.

This sink is stateless and supports dynamic egress, meaning message routing can vary per event when templates are used for parameters such as exchange or routing key.

### General Behavior

Kron TP connects to the AMQP broker using the provided connection string, opens one or more AMQP channels, and publishes each log event as a message. Messages are encoded according to the configured encoding rules and then published to a target exchange. If a routing key is provided, it is used to select queue bindings on the exchange.

Because delivery is at-least-once, duplicates can occur during retries. Because end-to-end acknowledgements are not supported, there is no mechanism for Kron TP to confirm “delivered to broker” back to sources in the acknowledgements chain.

### Required Settings

connection\_string
&#x20;This is mandatory and defines how Kron TP connects to the broker. It includes credentials, host, port, virtual host, and optional parameters such as connection timeout. The connection string is also where you select TLS by using an amqps scheme instead of amqp.

exchange
&#x20;This is mandatory and defines the exchange where messages are published. This value supports templating, allowing you to dynamically select the exchange per event. That is useful when you partition traffic by tenant, namespace, application, or log type, but it also increases operational complexity and should be used carefully.



encoding
&#x20;Encoding is required and determines how log events become bytes before publish. The most common production choice is JSON or text, but the sink supports a wide set of formats including CEF, GELF, Avro, Protobuf, and raw message passthrough.

### Routing and Message Topology

routing\_key
&#x20;An optional routing key used during publish. When present, it must match your exchange type and queue bindings. This value supports templating, enabling per-event routing decisions such as routing by application name, log level, Kubernetes namespace, customer ID, or any other event field.

Operationally, use templated routing keys only when you have a clear binding strategy on the broker side and monitoring to detect misroutes. A typo or unexpected field value can silently route messages to nowhere if no queue is bound.

max\_channels
&#x20;Controls the maximum number of AMQP channels Kron TP may keep active. Channels are created as needed. More channels can improve throughput and reduce head-of-line blocking, but too many channels increase broker-side resource usage and can make troubleshooting harder.

### Message Properties

properties
&#x20;Optional AMQP message properties applied to each message. These properties are set at publish time and can influence consumer behavior, message lifecycle, and prioritization.

properties.content\_type
&#x20;Sets the message content type metadata. Commonly used values are “application/json” or “text/plain”. This does not change the payload; it signals how consumers should interpret it.

properties.content\_encoding
&#x20;Sets the content encoding metadata. Use it when your consumers expect a specific encoding marker. This is especially relevant if you apply compression or special serialization conventions at the application level.

properties.expiration\_ms
&#x20;Sets a per-message TTL in milliseconds. When used, messages may be dropped by the broker after the expiration window. This is useful for volatile telemetry where late data is worthless, but dangerous for audit/compliance logs.

properties.priority
&#x20;Sets message priority. It can be fixed or templated per event, and must fit within broker constraints. Message priority only has effect if the target queues are configured to support priorities, and it may increase broker overhead.

### Buffering and Backpressure

The sink supports memory or disk buffering.

Memory buffering provides higher performance but loses buffered data on crash or restart.

Disk buffering persists buffered data and survives restarts but requires sufficient disk capacity and meets minimum size requirements. Disk buffering is recommended when you cannot tolerate losing in-flight logs during agent restarts or node failures.

when\_full behavior controls whether Kron TP blocks upstream components (preserving data but applying backpressure) or drops new events (preserving system responsiveness but losing data under pressure). For security or compliance logs, blocking is usually the safer default.

### Acknowledgements

Although the sink includes an acknowledgements configuration section, this sink is documented as not supporting acknowledgements. In practice, do not rely on end-to-end acknowledgements behavior for delivery correctness with this sink. If you need strong end-to-end acknowledgement semantics, you typically need a sink that explicitly supports them, or you need an architecture where the broker publish is confirmed and integrated into your ingestion guarantees.

### TLS and Secure Transport

TLS configuration is used when connecting over amqps or when you need to customize certificate validation behavior.

ca\_file is used when the broker certificate is signed by a private CA or when your environment injects TLS interception certificates.

crt\_file and key\_file are used for client certificate authentication when the broker requires mutual TLS.

verify\_certificate and verify\_hostname should remain enabled for production. Disabling them removes key protections against impersonation and man-in-the-middle attacks.

server\_name can be set when the broker is behind a TLS endpoint that requires SNI to route correctly.

### Operational Notes and Common Pitfalls

Single point of failure versus broker durability
&#x20;AMQP is often used as a durability layer, but delivery guarantees depend on the broker configuration. If your consumers require persistent messages, you must ensure the broker exchange/queues and consumers are configured accordingly; otherwise, data may be lost despite Kron TP retrying.

Dynamic exchange/routing\_key risks
&#x20;Templated exchange or routing key values make routing flexible, but increase the chance of silent drops if bindings don’t exist. Treat this like a contract between producers and broker topology.

At-least-once duplicates
&#x20;If the broker or network is unstable, retries can result in duplicates. Downstream consumers should be idempotent where possible, or you should include stable identifiers in events to enable deduplication.

Credential handling
&#x20;Because the connection string embeds user/password, avoid storing it in plaintext config repos. Use secret injection mechanisms.
