EMQX

Supported OS Linux Windows Mac OS

Integration version1.1.0

Overview

EMQX is a highly scalable, open-source MQTT broker designed for IoT (Internet of Things). MQTT stands for Message Queuing Telemetry Transport, which is a lightweight, publish-subscribe network protocol that transports messages between devices.

Key features of EMQX:

  • Scalability: EMQX can handle millions of concurrent MQTT connections, making it suitable for IoT applications that require handling a large number of devices.
  • Reliability: It provides stable and reliable message delivery, ensuring that data is successfully transferred between devices and servers.
  • Low latency: Designed for scenarios requiring low-latency communication.
  • High throughput: Capable of processing a high volume of messages efficiently.
  • Clustering: EMQX can be deployed in a distributed cluster to enhance performance and reliability.

The integration of EMQX with Datadog enriches monitoring capabilities, providing valuable insights into the performance and health of MQTT brokers. This is especially beneficial in IoT applications where efficient, reliable, and real-time data transmission is critical.

Types of data sent to Datadog:

  • Metrics: This includes performance metrics like message throughput (messages sent/received per second), number of connected clients and more.

  • Node performance: Monitoring individual node performance in a cluster, such as latency, load, and operational metrics.

  • Operational health: Data about the health of the MQTT broker, including, error rates, and other critical indicators.

Setup

Installation

Manually install the EMQX check (note that instructions may change based on your environment):

Run datadog-agent integration install -t datadog-emqx==1.1.0.

Configuration

  1. Edit the emqx/conf.yaml file, located in the conf.d/ folder at the root of your Agent’s configuration directory, to start collecting your EMQX performance data.

  2. Restart the Agent.

Validation

Run the Agent’s status subcommand and look for emqx under the Checks section.

Data Collected

Metrics

emqx.connections.count
(gauge)
Number of connection
emqx.live.connections.count
(gauge)
Number of live connection
emqx.sessions.count
(gauge)
Number of session
emqx.topics.count
(gauge)
Number of topic
emqx.suboptions.count
(gauge)
Number of subcribe options
emqx.subscribers.count
(gauge)
Number of subscriptions
emqx.subscriptions.count
(gauge)
Number of subsctriptions
emqx.subscriptions.shared.count
(gauge)
Number of shared subscriptions
emqx.retained.count
(gauge)
Number of retainer message
emqx.delayed.count
(gauge)
Number of Delayed message
emqx.vm.cpu.use
(gauge)
The CPU utilized by the virtual machine.
emqx.vm.cpu.idle
(gauge)
The CPU idle by the virtual machine.
emqx.vm.run_queue
(gauge)
The total length of all normal and dirty CPU run queues.
emqx.vm.process.messages_in_queues
(gauge)
The total Number of all client message queue.
emqx.vm.total_memory
(gauge)
The total amount of memory available to the Erlang emulator, allocated and free. May or may not be equal to the amount of memory configured in the system.
Shown as byte
emqx.vm.used_memory
(gauge)
The current size of the memory being used.
Shown as byte
emqx.cluster.nodes_running
(gauge)
The number of nodes currently running in the cluster.
emqx.cluster.nodes_stopped
(gauge)
The number of nodes currently stopped in the cluster.
emqx.bytes.received.count
(count)
The traffic bytes received.
Shown as byte
emqx.bytes.sent.count
(count)
The traffic bytes sent
Shown as byte
emqx.packets.received.count
(count)
The number of data packets transmitted
emqx.packets.sent.count
(count)
The number of data packets received
emqx.packets.connack.sent.count
(count)
The number of connack packets sent
emqx.packets.connect.count
(count)
The number of connect packets received
emqx.packets.connack.error.count
(count)
The number of connack error packets sent
emqx.packets.connack.auth_error.count
(count)
The number of connack auth_error packets sent
emqx.packets.publish.received.count
(count)
The number of publish packets received
emqx.packets.publish.sent.count
(count)
The number of publish packets sent
emqx.packets.publish.inuse.count
(count)
The number of publish packets with packetidentifterin_use error
emqx.packets.publish.error.count
(count)
The number of publish packets error
emqx.packets.publish.auth_error.count
(count)
The number of publish packets auth error
emqx.packets.publish.dropped.count
(count)
The number of publish packets dropped
emqx.packets.puback.received.count
(count)
The number of puback receive packets
emqx.packets.puback.sent.count
(count)
The number of puback sent packets
emqx.packets.puback.inuse.count
(count)
The number of puback infuse error packets
emqx.packets.puback.missed.count
(count)
The number of puback missed error packets
emqx.packets.pubrec.received.count
(count)
The number of pubrec packets received
emqx.packets.pubrec.sent.count
(count)
The number of pubrec packets sent
emqx.packets.pubrec.inuse.count
(count)
The number of pubrec packets infuse error
emqx.packets.pubrec.missed.count
(count)
The number of pubrec packets missed error
emqx.packets.pubrel.received.count
(count)
The number of pubrel packets received
emqx.packets.pubrel.sent.count
(count)
The number of pubrel packets sent
emqx.packets.pubrel.missed.count
(count)
The number of pubrel packets missed
emqx.packets.pubcomp.received.count
(count)
The number of pubcomp packets received
emqx.packets.pubcomp.sent.count
(count)
The number of pubcomp packets sent
emqx.packets.pubcomp.inuse.count
(count)
The number of pubcomp packets infuse error
emqx.packets.pubcomp.missed.count
(count)
The number of pubcomp packets missed
emqx.packets.subscribe.received.count
(count)
The number of subscribe packets received
emqx.packets.subscribe.error.count
(count)
The number of error subscribe packets
emqx.packets.subscribe.auth_error.count
(count)
The number of auth error subscribe packets
emqx.packets.suback.sent.count
(count)
The number of suback packets sent
emqx.packets.unsuback.sent.count
(count)
The number of unsuback packets sent
emqx.packets.unsubscribe.received.count
(count)
The number of unsubscribe packets received
emqx.packets.unsubscribe.error.count
(count)
The number of error unsubscribe packets
emqx.packets.pingreq.received.count
(count)
The number of pingreq packets received
emqx.packets.pingresp.sent.count
(count)
The number of pingresp packets sent
emqx.packets.disconnect.received.count
(count)
The number of disconnect packets received
emqx.packets.disconnect.sent.count
(count)
The number of disconnect packets sent
emqx.packets.auth.received.count
(count)
The number of auth packets received
emqx.packets.auth.sent.count
(count)
The number of auth packets sent
emqx.messages.received.count
(count)
The number of messages received
emqx.messages.sent.count
(count)
The number of messages sent
emqx.messages.qos0.received.count
(count)
The number of qos0 messages received
emqx.messages.qos0.sent.count
(count)
The number of qos0 messages sent
emqx.messages.qos1.received.count
(count)
The number of qos1 messages received
emqx.messages.qos1.sent.count
(count)
The number of qos1 messages sent
emqx.messages.qos2.received.count
(count)
The number of qos2 messages received
emqx.messages.qos2.sent.count
(count)
The number of qos2 messages sent
emqx.messages.publish.count
(count)
The number of messages published
emqx.messages.dropped.count
(count)
The number of messages dropped
emqx.messages.dropped.expired.count
(count)
The number of expired messages dropped
emqx.messages.dropped.no_subscribers.count
(count)
The number of no_subscribers messages dropped
emqx.messages.forward.count
(count)
The number of forward messages
emqx.messages.retained.count
(count)
The number of retained messages sent
emqx.messages.delayed.count
(count)
The number of delayed messages sent
emqx.messages.delivered.count
(count)
The number of messages delivered
emqx.messages.acked.count
(count)
The number of acked messages
emqx.delivery.dropped.count
(count)
The number of total dropped messages
emqx.delivery.dropped.no_local.count
(count)
The number of no_local delivery messages dropped
emqx.delivery.dropped.too_large.count
(count)
The number of too_large delivery messages dropped
emqx.delivery.dropped.qos0.msg.count
(count)
The number of qos0 delivery messages dropped
emqx.delivery.dropped.queue_full.count
(count)
The number of queue_full delivery messages dropped
emqx.delivery.dropped.expired.count
(count)
The number of expired delivery messages dropped
emqx.client.connect.count
(count)
The number of the client_connect hook has been executed
emqx.client.connack.count
(count)
The number of the client_connack hook has been executed
emqx.client.connected.count
(count)
The number of the client_connected hook has been executed
emqx.client.authenticate.count
(count)
The number of the client_authenticated hook has been executed
emqx.client.auth_anonymous.count
(count)
The number of clients who connected in anonymously
emqx.client.authorize.count
(count)
The number of the client_authorize hook has been executed
emqx.client.subscribe.count
(count)
The number of the client_subscribe hook has been executed
emqx.client.unsubscribe.count
(count)
The number of the client_unsubscribe hook has been executed
emqx.client.disconnected.count
(count)
The number of the client_disconnected hook has been executed
emqx.session.created.count
(count)
The number of the session_created hook has been executed
emqx.session.resumed.count
(count)
The number of the session_resumed hook has been executed
emqx.session.takenover.count
(count)
The number of the session_takenover hook has been executed
emqx.session.discarded.count
(count)
The number of the session_discarded hook has been executed
emqx.session.terminated.count
(count)
The number of the session_terminated hook has been executed
emqx.authorization.allow.count
(count)
The number of successful(allow) authorizations
emqx.authorization.deny.count
(count)
The number of failed(deny) authorizations
emqx.authorization.cache_hit.count
(count)
The number of authorizations with cache
emqx.authorization.superuser.count
(count)
The number of authorizations with superuser
emqx.authorization.nomatch.count
(count)
The number of failed authorizations with no match
emqx.authorization.matched_allow.count
(count)
The number of match allow authorizations
emqx.authorization.matched_deny.count
(count)
The number of match deny authorizations
emqx.authentication.success.count
(count)
The number of success authorizations
emqx.authentication.success_anonymous.count
(count)
The number of success authorizations with anonymous
emqx.authentication.failure.count
(count)
The number of failed authentication
emqx.mria.last_intercepted_trans
(gauge)
The number of latest intercepted transaction on core node
emqx.mria.weight
(gauge)
The weight of mria’s traffic in cluster
emqx.mria.replicants
(gauge)
The number of replicants report by mria in cluster
emqx.mria.server.mql
(gauge)
The messages that have not yet been processed in the mria shard.

Events

EMQX does not include any events.

Troubleshooting

Need help? Contact EMQX support.