MQTT---HiveMQ源碼詳解(十)Netty-Statistics

HiveMQ中的內置的統計非常之多,多到可怕,幾乎你能想到的統計hivemq都已經幫你想全了;同時第三方plugin還可以定義屬于自己的統計。

它的實現采用了Metric框架實現統計、度量。收集的數據可以通過多種數據報告接口,這樣可以監控broker運行中的各種數據來監控broker。


所謂統計無外乎就是采集埋點、輸出報告

采集埋點

類圖

這里寫圖片描述

  1. 通過StatisticsInitializer實現handlerAdded方法,為pipeline中添加GlobalTrafficCounter(流量計數器)、GlobalMqttMessageCounter(mqtt消息數量計數器)、MqttConnectionCounterHandler(mqtt連接數量計數器)

  2. GlobalTrafficCounter繼承netty的GlobalTrafficShapingHandler,來獲得流量計數器,來統計當前(最后5秒)的讀/寫流量、累計的讀/寫流量。

  3. GlobalMqttMessageCounter根據當前的mqtt消息類型,來分類統計每種mqtt消息的讀/寫的數量和吞吐。

  4. 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;

MQTT交流群:221405150

RocketMQ交流群:10648794

NewSQL交流群:153575008


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容