HiveMQ中的內置的統計非常之多,多到可怕,幾乎你能想到的統計hivemq都已經幫你想全了;同時第三方plugin還可以定義屬于自己的統計。
它的實現采用了Metric框架實現統計、度量。收集的數據可以通過多種數據報告接口,這樣可以監控broker運行中的各種數據來監控broker。
所謂統計無外乎就是采集埋點、輸出報告
采集埋點
類圖
通過StatisticsInitializer實現handlerAdded方法,為pipeline中添加GlobalTrafficCounter(流量計數器)、GlobalMqttMessageCounter(mqtt消息數量計數器)、MqttConnectionCounterHandler(mqtt連接數量計數器)
GlobalTrafficCounter繼承netty的GlobalTrafficShapingHandler,來獲得流量計數器,來統計當前(最后5秒)的讀/寫流量、累計的讀/寫流量。
GlobalMqttMessageCounter根據當前的mqtt消息類型,來分類統計每種mqtt消息的讀/寫的數量和吞吐。
MqttConnectionCounterHandler通過監聽mqtt connect消息以及當前Channel的closeFuture來統計總連接數、當前連接數;MqttConnectionCounter數據細粒度的一個帶ReadWriteLock的統計器來為當前連接數提供increase、decrease以及當前連接數、最大連接數查詢的類。
這樣通過統計的handler對連接、流量、數量進行統計,達到統計埋點,以達到收集broker中的流量信息。
官網還為我們提供了jvm監控插件。
https://github.com/hivemq/jvm-metrics-plugin
輸出報告
既然數據已經收集到Metric中,那么輸出就相對來說很簡單了,而且輸出都是屬于個性化的需求,hivemq則采用的是plugin的方式來輸出報告的,官網為我們提供了幾種輸出的插件。
1、以$SYS主題發布出去。https://github.com/hivemq/hivemq-sys-topic-plugin
2、輸出到influxdb中去。https://github.com/hivemq/influxdb-monitoring-plugin
內置的采集信息列舉
下面的列舉基本上都是見名知意的,博主就不給大家一一解釋了。
private final Counter incomingMessageCount;
private final Counter outgoingMessageCount;
private final Meter incomingMessageRate;
private final Meter outgoingMessageRate;
private final Meter outgoingConnAckRate;
private final Counter outgoingConnAckCount;
private final Meter incomingConnectRate;
private final Counter incomingConnectCount;
private final Meter incomingDisconnectRate;
private final Counter incomingDisconnectCount;
private final Meter incomingPingReqRate;
private final Counter incomingPingReqCount;
private final Meter outgoingPingRespRate;
private final Counter outgoingPingRespCount;
private final Meter incomingPubAckRate;
private final Counter incomingPubAckCount;
private final Meter outgoingPubAckRate;
private final Counter outgoingPubAckCount;
private final Meter incomingPubCompRate;
private final Counter incomingPubCompCount;
private final Meter outgoingPubCompRate;
private final Counter outgoingPubCompCount;
private final Meter incomingPublishRate;
private final Counter incomingPublishCount;
private final Meter outgoingPublishRate;
private final Counter outgoingPublishCount;
private final Meter incomingPubRecRate;
private final Counter incomingPubRecCount;
private final Meter outgoingPubRecRate;
private final Counter outgoingPubRecCount;
private final Meter incomingPubRelRate;
private final Counter incomingPubRelCount;
private final Meter outgoingPubRelRate;
private final Counter outgoingPubRelCount;
private final Meter outgoingSubAckRate;
private final Counter outgoingSubAckCount;
private final Meter incomingSubscribeRate;
private final Counter incomingSubscribeCount;
private final Meter outgoingUnsubAckRate;
private final Counter outgoingUnsubAckCount;
private final Meter incomingUnsubscribeRate;
private final Counter incomingUnsubscribeCount;
private final Counter halfFullQueueCount;
private final Meter droppedMessageRate;
private final Counter droppedMessageCount;
private final Meter publishQueueRate;
private final Counter publishQueueSize;
private final Counter persistentSessionsActive;
private final Histogram connectionsOverallMean;
private final Histogram incomingMessageSizeMean;
private final Histogram outgoingMessageSizeMean;
private final Histogram incomingPublishSizeMean;
private final Histogram outgoingPublishSizeMean;
private final Histogram retainedMessagesMean;
private final Meter retainedMessagesRate;
private final Counter subscriptionsCurrent;
private final Timer pluginTimerAfterLoginSuccess;
private final Timer pluginTimerAfterLoginFailed;
private final Timer pluginTimerAuthentication;
private final Timer pluginTimerRestrictions;
private final Timer pluginTimerAuthorization;
private final Timer pluginTimerPermissionsDisconnectPublish;
private final Timer pluginTimerPermissionsDisconnectSubscribe;
private final Timer pluginTimerConnect;
private final Timer pluginTimerDisconnect;
private final Timer pluginTimerConnAckSend;
private final Timer pluginTimerPubAckSend;
private final Timer pluginTimerPubAckReceived;
private final Timer pluginTimerPubCompReceived;
private final Timer pluginTimerPublishReceived;
private final Timer pluginTimerPublishSend;
private final Timer pluginTimerSubscribe;
private final Timer pluginTimerUnsubscribe;
private final Timer pluginTimerPing;
private final Timer pluginTimerPubRelReceived;
private final Timer pluginTimerPubRecReceived;
private final Timer pluginTimerPubCompSend;
private final Timer pluginTimerPubRecSend;
private final Timer pluginTimerPubRelSend;
private final Timer pluginTimerSubAckSend;
private final Timer pluginTimerUnsubAckSend;
private final Meter totalExceptionRate;