Skip to main content

VerneMQ

Plugin: go.d.plugin Module: vernemq

Overview

This collector monitors VerneMQ instances.

This collector is supported on all platforms.

This collector supports collecting metrics from multiple instances of this integration, including remote instances.

Default Behavior

Auto-Detection

This integration doesn't support auto-detection.

Limits

The default configuration for this integration does not impose any limits on data collection.

Performance Impact

The default configuration for this integration is not expected to impose a significant performance impact on the system.

Setup

You can configure the vernemq collector in two ways:

MethodBest forHow to
UIFast setup without editing filesGo to Nodes → Configure this node → Collectors → Jobs, search for vernemq, then click + to add a job.
FileIf you prefer configuring via file, or need to automate deployments (e.g., with Ansible)Edit go.d/vernemq.conf and add a job.
important

UI configuration requires paid Netdata Cloud plan.

Prerequisites

No action required.

Configuration

Options

The following options can be defined globally: update_every, autodetection_retry.

Config options
GroupOptionDescriptionDefaultRequired
Collectionupdate_everyData collection interval (seconds).1no
autodetection_retryAutodetection retry interval (seconds). Set 0 to disable.0no
TargeturlTarget endpoint URL.http://127.0.0.1:8888/metricsyes
timeoutHTTP request timeout (seconds).1no
HTTP AuthusernameUsername for Basic HTTP authentication.no
passwordPassword for Basic HTTP authentication.no
bearer_token_filePath to a file containing a bearer token (used for Authorization: Bearer).no
TLStls_skip_verifySkip TLS certificate and hostname verification (insecure).nono
tls_caPath to CA bundle used to validate the server certificate.no
tls_certPath to client TLS certificate (for mTLS).no
tls_keyPath to client TLS private key (for mTLS).no
Proxyproxy_urlHTTP proxy URL.no
proxy_usernameUsername for proxy Basic HTTP authentication.no
proxy_passwordPassword for proxy Basic HTTP authentication.no
RequestmethodHTTP method to use.GETno
bodyRequest body (e.g., for POST/PUT).no
headersAdditional HTTP headers (one per line as key: value).no
not_follow_redirectsDo not follow HTTP redirects.nono
force_http2Force HTTP/2 (including h2c over TCP).nono
Virtual NodevnodeAssociates this data collection job with a Virtual Node.no

via UI

Configure the vernemq collector from the Netdata web interface:

  1. Go to Nodes.
  2. Select the node where you want the vernemq data-collection job to run and click the (Configure this node). That node will run the data collection.
  3. The Collectors → Jobs view opens by default.
  4. In the Search box, type vernemq (or scroll the list) to locate the vernemq collector.
  5. Click the + next to the vernemq collector to add a new job.
  6. Fill in the job fields, then click Test to verify the configuration and Submit to save.
    • Test runs the job with the provided settings and shows whether data can be collected.
    • If it fails, an error message appears with details (for example, connection refused, timeout, or command execution errors), so you can adjust and retest.

via File

The configuration file name for this integration is go.d/vernemq.conf.

The file format is YAML. Generally, the structure is:

update_every: 1
autodetection_retry: 0
jobs:
- name: some_name1
- name: some_name2

You can edit the configuration file using the edit-config script from the Netdata config directory.

cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
sudo ./edit-config go.d/vernemq.conf
Examples
Basic

An example configuration.

Config
jobs:
- name: local
url: http://127.0.0.1:8888/metrics

HTTP authentication

Local instance with basic HTTP authentication.

Config
jobs:
- name: local
url: http://127.0.0.1:8888/metrics
username: username
password: password

Multi-instance

Note: When you define multiple jobs, their names must be unique.

Local and remote instances.

Config
jobs:
- name: local
url: http://127.0.0.1:8888/metrics

- name: remote
url: http://203.0.113.10:8888/metrics

Alerts

The following alerts are available:

Alert nameOn metricDescription
vernemq_socket_errors vernemq.node_socket_errorsNode ${label:node} socket errors in the last minute
vernemq_queue_message_drop vernemq.node_queue_undelivered_messagesNode ${label:node} dropped messages due to full queues in the last minute
vernemq_queue_message_expired vernemq.node_queue_undelivered_messagesNode ${label:node} expired before delivery messages in the last minute
vernemq_queue_message_unhandled vernemq.node_queue_undelivered_messagesNode ${label:node} unhandled messages in the last minute
vernemq_average_scheduler_utilization vernemq.node_average_scheduler_utilizationNode ${label:node} scheduler utilization over the last 10 minutes
vernemq_cluster_dropped vernemq.node_cluster_droppedNode ${label:node} traffic dropped during communication with the cluster nodes in the last minute
vernemq_netsplits vernemq.node_netsplitsNode ${label:node} detected netsplits (split brain) in the last minute
vernemq_mqtt_connack_sent_reason_unsuccessful vernemq.node_mqtt_connack_sent_by_reason_codeNode ${label:node} unsuccessful sent v5 CONNACK packets in the last minute
vernemq_mqtt_disconnect_received_reason_not_normal vernemq.node_mqtt_disconnect_received_by_reason_codeNode ${label:node} received not normal v5 DISCONNECT packets in the last minute
vernemq_mqtt_disconnect_sent_reason_not_normal vernemq.node_mqtt_disconnect_sent_by_reason_codeNode ${label:node} sent not normal v5 DISCONNECT packets in the last minute
vernemq_mqtt_subscribe_error vernemq.node_mqtt_subscribe_errorNode ${label:node} mqtt v${label:mqtt_version} failed SUBSCRIBE operations in the last minute
vernemq_mqtt_subscribe_auth_error vernemq.node_mqtt_subscribe_auth_errorNode ${label:node} mqtt v${label:mqtt_version} unauthorized SUBSCRIBE attempts in the last minute
vernemq_mqtt_unsubscribe_error vernemq.node_mqtt_unsubscribe_errorNode ${label:node} mqtt v${label:mqtt_version} failed UNSUBSCRIBE operations in the last minute
vernemq_mqtt_publish_errors vernemq.node_mqtt_publish_errorsNode ${label:node} mqtt v${label:mqtt_version} failed PUBLISH operations in the last minute
vernemq_mqtt_publish_auth_errors vernemq.node_mqtt_publish_auth_errorsNode ${label:node} mqtt v${label:mqtt_version} unauthorized PUBLISH attempts in the last minute
vernemq_mqtt_puback_received_reason_unsuccessful vernemq.node_mqtt_puback_received_by_reason_codeNode ${label:node} mqtt v5 received unsuccessful PUBACK packets in the last minute
vernemq_mqtt_puback_sent_reason_unsuccessful vernemq.node_mqtt_puback_sent_by_reason_codeNode ${label:node} mqtt v5 unsuccessful sent PUBACK packets in the last minute
vernemq_mqtt_puback_unexpected vernemq.node_mqtt_puback_invalid_errorNode ${label:node} mqtt v${label:mqtt_version} received unexpected PUBACK messages in the last minute
vernemq_mqtt_pubrec_received_reason_unsuccessful vernemq.node_mqtt_pubrec_received_by_reason_codeNode ${label:node} mqtt v5 received unsuccessful PUBREC packets in the last minute
vernemq_mqtt_pubrec_sent_reason_unsuccessful vernemq.node_mqtt_pubrec_sent_by_reason_codeNode ${label:node} mqtt v5 unsuccessful sent PUBREC packets in the last minute
vernemq_mqtt_pubrec_invalid_error vernemq.node_mqtt_pubrec_invalid_errorNode ${label:node} mqtt v${label:mqtt_version} received invalid PUBREC packets in the last minute
vernemq_mqtt_pubrel_received_reason_unsuccessful vernemq.node_mqtt_pubrel_received_by_reason_codeNode ${label:node} mqtt v5 received unsuccessful PUBREL packets in the last minute
vernemq_mqtt_pubrel_sent_reason_unsuccessful vernemq.node_mqtt_pubrel_sent_by_reason_codeNode ${label:node} mqtt v5 unsuccessful sent PUBREL packets in the last minute
vernemq_mqtt_pubcomp_received_reason_unsuccessful vernemq.node_mqtt_pubcomp_received_by_reason_codeNode ${label:node} mqtt v5 received unsuccessful PUBCOMP packets in the last minute
vernemq_mqtt_pubcomp_sent_reason_unsuccessful vernemq.node_mqtt_pubcomp_sent_by_reason_codeNode ${label:node} mqtt v5 unsuccessful sent PUBCOMP packets in the last minute
vernemq_mqtt_pubcomp_unexpected vernemq.node_mqtt_pubcomp_invalid_errorNode ${label:node} mqtt v${label:mqtt_version} received unexpected PUBCOMP packets in the last minute

Metrics

Metrics grouped by scope.

The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.

Per node

These metrics refer to the VerneMQ node.

Labels:

LabelDescription
nodeThe value of this label is identical to the value of the "node" label exposed by VerneMQ.

Metrics:

MetricDescriptionDimensionsUnit
vernemq.node_socketOpen Socketsopensockets
vernemq.node_socket_operationsSocket Open and Close Eventsopen, closesockets/s
vernemq.node_client_keepalive_expiredClosed Sockets due to Keepalive Time Expiredclosedsockets/s
vernemq.node_socket_close_timeoutClosed Sockets due to no CONNECT Frame On Timeclosedsockets/s
vernemq.node_socket_errorsSocket Errorserrorserrors/s
vernemq.node_queue_processesLiving Queues in an Online or an Offline Statequeue_processesqueue processes
vernemq.node_queue_processes_operationsQueue Processes Setup and Teardown Eventssetup, teardownevents/s
vernemq.node_queue_process_init_from_storageQueue Processes Initialized from Offline Storagequeue_processesqueue processes/s
vernemq.node_queue_messagesReceived and Sent PUBLISH Messagesreceived, sentmessages/s
vernemq.node_queued_messagesQueued PUBLISH Messagesqueuedmessages
vernemq.node_queue_undelivered_messagesUndelivered PUBLISH Messagesdropped, expired, unhandledmessages/s
vernemq.node_router_subscriptionsSubscriptions in the Routing Tablesubscriptionssubscriptions
vernemq.node_router_matched_subscriptionsMatched Subscriptionslocal, remotesubscriptions/s
vernemq.node_router_memoryRouting Table Memory Usageusedbytes
vernemq.node_average_scheduler_utilizationAverage Scheduler Utilizationutilizationpercentage
vernemq.node_system_processesErlang Processesprocessesprocesses
vernemq.node_system_reductionsReductionsreductionsops/s
vernemq.node_system_context_switchesContext Switchescontext_switchesops/s
vernemq.node_system_ioReceived and Sent Traffic through Portsreceived, sentbytes/s
vernemq.node_system_run_queueProcesses that are Ready to Run on All Run-Queuesreadyprocesses
vernemq.node_system_gc_countGC Countgcops/s
vernemq.node_system_gc_words_reclaimedGC Words Reclaimedwords_reclaimedops/s
vernemq.node_system_allocated_memoryMemory Allocated by the Erlang Processes and by the Emulatorprocesses, systembytes
vernemq.node_trafficTrafficreceived, sentbytes/s
vernemq.node_retain_messagesStored Retained Messagesmessagesmessages
vernemq.node_retain_memoryStored Retained Messages Memory Usageusedbytes
vernemq.node_cluster_trafficCommunication with Other Cluster Nodesreceived, sentbytes/s
vernemq.node_cluster_droppedTraffic Dropped During Communication with Other Cluster Nodesdroppedbytes/s
vernemq.node_netsplit_unresolvedUnresolved Netsplitsunresolvednetsplits
vernemq.node_netsplitsNetsplitsresolved, detectednetsplits/s
vernemq.node_uptimeNode Uptimetimeseconds

Per mqtt

These metrics are specific to the used MQTT protocol version.

Labels:

LabelDescription
nodeThe value of this label is identical to the value of the "node" label exposed by VerneMQ.
mqtt_versionMQTT version.

Metrics:

MetricDescriptionDimensionsUnit
vernemq.node_mqtt_authMQTT AUTH Packetsreceived, sentpackets/s
vernemq.node_mqtt_auth_received_by_reason_codeMQTT AUTH Received by Reasonsuccess, continue_authentication, reauthenticatepackets/s
vernemq.node_mqtt_auth_sent_by_reason_codeMQTT AUTH Sent by Reasonsuccess, continue_authentication, reauthenticatepackets/s
vernemq.node_mqtt_connectMQTT CONNECT and CONNACKconnect, connackpackets/s
vernemq.node_mqtt_connack_sent_by_return_codeMQTT CONNACK Sent by Return Codesuccess, unsupported_protocol_version, client_identifier_not_valid, server_unavailable, bad_username_or_password, not_authorizedpackets/s
vernemq.node_mqtt_connack_sent_by_reason_codeMQTT CONNACK Sent by Reasonsuccess, unspecified_error, malformed_packet, protocol_error, impl_specific_error, unsupported_protocol_version, client_identifier_not_valid, bad_username_or_password, not_authorized, server_unavailable, server_busy, banned, bad_authentication_method, topic_name_invalid, packet_too_large, quota_exceeded, payload_format_invalid, retain_not_supported, qos_not_supported, use_another_server, server_moved, connection_rate_exceededpackets/s
vernemq.node_mqtt_disconnectMQTT DISCONNECT Packetsreceived, sentpackets/s
vernemq.node_mqtt_disconnect_received_by_reason_codeMQTT DISCONNECT Received by Reasonnormal_disconnect, disconnect_with_will_msg, unspecified_error, malformed_packet, protocol_error, impl_specific_error, topic_name_invalid, receive_max_exceeded, topic_alias_invalid, packet_too_large, message_rate_too_high, quota_exceeded, administrative_action, payload_format_invalidpackets/s
node_mqtt_disconnect_sent_by_reason_codeMQTT DISCONNECT Sent by Reasonnormal_disconnect, unspecified_error, malformed_packet, protocol_error, impl_specific_error, not_authorized, server_busy, server_shutting_down, keep_alive_timeout, session_taken_over, topic_filter_invalid, topic_name_invalid, receive_max_exceeded, topic_alias_invalid, packet_too_large, message_rate_too_high, quota_exceeded, administrative_action, payload_format_invalid, retain_not_supported, qos_not_supported, use_another_server, server_moved, shared_subs_not_supported, connection_rate_exceeded, max_connect_time, subscription_ids_not_supported, wildcard_subs_not_supportedpackets/s
vernemq.node_mqtt_subscribeMQTT SUBSCRIBE and SUBACK Packetssubscribe, subackpackets/s
vernemq.node_mqtt_subscribe_errorMQTT Failed SUBSCRIBE Operations due to a Netsplitsubscribeerrors/s
vernemq.node_mqtt_subscribe_auth_errorMQTT Unauthorized SUBSCRIBE Attemptssubscribe_autherrors/s
vernemq.node_mqtt_unsubscribeMQTT UNSUBSCRIBE and UNSUBACK Packetsunsubscribe, unsubackpackets/s
vernemq.node_mqtt_unsubscribe_errorMQTT Failed UNSUBSCRIBE Operations due to a Netsplitunsubscribeerrors/s
vernemq.node_mqtt_publishMQTT QoS 0,1,2 PUBLISHreceived, sentpackets/s
vernemq.node_mqtt_publish_errorsMQTT Failed PUBLISH Operations due to a Netsplitpublisherrors/s
vernemq.node_mqtt_publish_auth_errorsMQTT Unauthorized PUBLISH Attemptspublish_autherrors/s
vernemq.node_mqtt_pubackvMQTT QoS 1 PUBACK Packetsreceived, sentpackets/s
vernemq.node_mqtt_puback_received_by_reason_codeMQTT PUBACK QoS 1 Received by Reasonsuccess, no_matching_subscribers, unspecified_error, impl_specific_error, not_authorized, topic_name_invalid, packet_id_in_use, quota_exceeded, payload_format_invalidpackets/s
vernemq.node_mqtt_puback_sent_by_reason_codeMQTT PUBACK QoS 1 Sent by Reasonsuccess, no_matching_subscribers, unspecified_error, impl_specific_error, not_authorized, topic_name_invalid, packet_id_in_use, quota_exceeded, payload_format_invalidpackets/s
vernemq.node_mqtt_puback_invalid_errorMQTT PUBACK QoS 1 Received Unexpected Messagesunexpectedmessages/s
vernemq.node_mqtt_pubrecMQTT PUBREC QoS 2 Packetsreceived, sentpackets/s
vernemq.node_mqtt_pubrec_received_by_reason_codeMQTT PUBREC QoS 2 Received by Reasonsuccess, no_matching_subscribers, unspecified_error, impl_specific_error, not_authorized, topic_name_invalid, packet_id_in_use, quota_exceeded, payload_format_invalidpackets/s
vernemq.node_mqtt_pubrec_sent_by_reason_codeMQTT PUBREC QoS 2 Sent by Reasonsuccess, no_matching_subscribers, unspecified_error, impl_specific_error, not_authorized, topic_name_invalid, packet_id_in_use, quota_exceeded, payload_format_invalidpackets/s
vernemq.node_mqtt_pubrec_invalid_errorMQTT PUBREC QoS 2 Received Unexpected Messagesunexpectedmessages/s
vernemq.node_mqtt_pubrelMQTT PUBREL QoS 2 Packetsreceived, sentpackets/s
vernemq.node_mqtt_pubrel_received_by_reason_codeMQTT PUBREL QoS 2 Received by Reasonsuccess, packet_id_not_foundpackets/s
vernemq.node_mqtt_pubrel_sent_by_reason_codeMQTT PUBREL QoS 2 Sent by Reasonsuccess, packet_id_not_foundpackets/s
vernemq.node_mqtt_pubcompMQTT PUBCOMP QoS 2 Packetsreceived, sentpackets/s
vernemq.node_mqtt_pubcomp_received_by_reason_codeMQTT PUBCOMP QoS 2 Received by Reasonsuccess, packet_id_not_foundpackets/s
vernemq.node_mqtt_pubcomp_sent_by_reason_codMQTT PUBCOMP QoS 2 Sent by Reasonsuccess, packet_id_not_foundpackets/s
vernemq.node_mqtt_pubcomp_invalid_errorMQTT PUBCOMP QoS 2 Received Unexpected Messagesunexpectedmessages/s
vernemq.node_mqtt_pingMQTT PING Packetspingreq, pingresppackets/s

Troubleshooting

Debug Mode

Important: Debug mode is not supported for data collection jobs created via the UI using the Dyncfg feature.

To troubleshoot issues with the vernemq collector, run the go.d.plugin with the debug option enabled. The output should give you clues as to why the collector isn't working.

  • Navigate to the plugins.d directory, usually at /usr/libexec/netdata/plugins.d/. If that's not the case on your system, open netdata.conf and look for the plugins setting under [directories].

    cd /usr/libexec/netdata/plugins.d/
  • Switch to the netdata user.

    sudo -u netdata -s
  • Run the go.d.plugin to debug the collector:

    ./go.d.plugin -d -m vernemq

    To debug a specific job:

    ./go.d.plugin -d -m vernemq -j jobName

Getting Logs

If you're encountering problems with the vernemq collector, follow these steps to retrieve logs and identify potential issues:

  • Run the command specific to your system (systemd, non-systemd, or Docker container).
  • Examine the output for any warnings or error messages that might indicate issues. These messages should provide clues about the root cause of the problem.

System with systemd

Use the following command to view logs generated since the last Netdata service restart:

journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep vernemq

System without systemd

Locate the collector log file, typically at /var/log/netdata/collector.log, and use grep to filter for collector's name:

grep vernemq /var/log/netdata/collector.log

Note: This method shows logs from all restarts. Focus on the latest entries for troubleshooting current issues.

Docker Container

If your Netdata runs in a Docker container named "netdata" (replace if different), use this command:

docker logs netdata 2>&1 | grep vernemq

Do you have any feedback for this page? If so, you can open a new issue on our netdata/learn repository.