Apache ActiveMQ Artemis 可以透過 Micrometer 這個與廠商無關的應用程式度量指標外觀,將度量指標匯出到各種監控系統。

重要的執行階段度量指標已透過 Micrometer API 進行檢測,使用者只需實作 org.apache.activemq.artemis.core.server.metrics.ActiveMQMetricsPlugin,即可實例化並組態設定 io.micrometer.core.instrument.MeterRegistry 實作。MeterRegistry 的相關實作可從 Micrometer 程式碼庫取得。

這是一個簡單的介面

public interface ActiveMQMetricsPlugin extends Serializable {

   ActiveMQMetricsPlugin init(Map<String, String> options);

   MeterRegistry getRegistry();

   default void registered(ActiveMQServer server) { }
}

當代理程式啟動時,它會呼叫 init 並傳入 options,這些選項可以在 XML 中指定為鍵/值屬性。此時,外掛程式應實例化並組態設定 io.micrometer.core.instrument.MeterRegistry 實作。

稍後在代理程式啟動過程中,它會呼叫 getRegistry 以取得 MeterRegistry 實作,並使用它來註冊量表。註冊後,它會呼叫 registered,以便為外掛程式提供伺服器的控制代碼。然後,外掛程式可以使用該控制代碼來檢查代理程式是否正在運作,而不是處於啟動或關閉階段。

代理程式隨附兩個 ActiveMQMetricsPlugin 實作

org.apache.activemq.artemis.core.server.metrics.plugins.LoggingMetricsPlugin

這個外掛程式只會記錄度量指標。它對生產環境來說不是很有用,但可以作為 Micrometer 整合的示範。它不採用任何鍵/值屬性進行組態設定。

org.apache.activemq.artemis.core.server.metrics.plugins.SimpleMetricsPlugin

這個外掛程式用於測試。它僅限於記憶體內使用,且不提供任何外部輸出。它不採用任何鍵/值屬性進行組態設定。

1. 匯出的度量指標

以下是匯出的度量指標,依元件分類。每個度量指標的描述會與度量指標本身一起匯出,因此此處不再重複描述。

每個度量指標都會使用 broker 標籤(透過 broker.xml 中的 <name> 設定)進行「標記」。標籤是一段中繼資料,可提供度量指標的內容。這些標籤是「維度度量指標」的基礎。度量指標可能具有其他標籤,但至少它們都會具有 broker 標籤。

最後,所有特別針對 ActiveMQ Artemis 的度量指標都會加上 artemis. 前綴。

1.1. Broker(代理程式)

  • connection.count(連線計數)

  • total.connection.count(連線總計數)

  • address.memory.usage(位址記憶體使用量)

  • address.memory.usage.percentage(位址記憶體使用百分比)

  • disk.store.usage(磁碟儲存使用量)

  • replica.sync(複本同步)

  • active(作用中)

  • authentication.count(驗證計數)會以 result 標記,result 要嘛是 success,要嘛是 failure

  • authorization.count(授權計數)會以 result 標記,result 要嘛是 success,要嘛是 failure

1.2. Address(位址)

這些度量指標會以 address 標籤標記,該標籤會反映對應位址的名稱。

  • routed.message.count(已路由訊息計數)

  • unrouted.message.count(未路由訊息計數)

  • address.size(位址大小)

  • number.of.pages(頁面數)

1.3. Queue(佇列)

這些度量指標會以 addressqueue 標籤標記,這些標籤分別反映對應位址和佇列的名稱。

  • message.count(訊息計數)

  • durable.message.count(持久訊息計數)

  • persistent.size(持久大小)

  • durable.persistent.size(持久持久大小)

  • delivering.message.count(傳遞中訊息計數)

  • delivering.durable.message.count(傳遞中持久訊息計數)

  • delivering.persistent.size(傳遞中持久大小)

  • delivering.durable.persistent.size(傳遞中持久持久大小)

  • scheduled.message.count(排程訊息計數)

  • scheduled.durable.message.count(排程持久訊息計數)

  • scheduled.persistent.size(排程持久大小)

  • scheduled.durable.persistent.size(排程持久持久大小)

  • messages.acknowledged(已確認訊息)

  • messages.added(已新增訊息)

  • messages.killed(已終止訊息)

  • messages.expired(已過期訊息)

  • consumer.count(取用者計數)

可能看起來缺少一些較高層級的代理程式度量指標(例如,訊息總計數)。但是,這些度量指標可以透過匯總較低層級的度量指標來推斷(例如,匯總所有佇列的 message.count 度量指標以取得總計數)。

1.4. 可選的度量指標

還有一些其他與 JVM、基礎作業系統等相關的實用度量指標。這些度量指標是由 Micrometer 專門提供的,因此沒有 artmemis. 前綴。

JVM 記憶體度量指標

測量緩衝區和記憶體集區的使用率。從 Java 的 BufferPoolMXBeansMemoryPoolMXBeans 收集基礎資料。

預設為啟用。

JVM GC

測量最大和即時資料大小、升級和配置率,以及 GC 暫停的次數(或 CMS 的並行階段時間)。從 Java 的 MemoryPoolMXBeans 收集基礎資料。

預設為停用。

JVM 執行緒

測量執行緒峰值、精靈執行緒數目和即時執行緒。從 Java 的 ThreadMXBean 收集基礎資料。

預設為停用。

Netty

從 Netty 的 PooledByteBufAllocatorMetric 收集度量指標。

預設為停用。

檔案描述元

測量目前和允許的最大開啟檔案數。

預設為停用。

處理器

測量系統 CPU 數、CPU 使用率、1 分鐘平均負載,以及處理程序 CPU 使用率。

預設為停用。

執行時間

測量處理程序啟動時間和執行時間。

預設為停用。

記錄

計算每個記錄類別(例如,WARNERROR 等)的記錄事件數。

預設為停用。

適用於 Log4j2(即隨代理程式一起提供的預設記錄實作)。如果您要內嵌代理程式並使用不同的記錄實作(例如,Log4j 1.x、JUL、Logback 等),而且您啟用了這些度量指標,那麼代理程式將會因 java.lang.NoClassDefFoundError 而無法啟動,因為它會嘗試尋找類別路徑中不存在的 Log4j2 類別。

安全性快取

會匯出下列驗證和授權快取度量指標。它們都會以 cache 標記(要嘛是 authentication,要嘛是 authorization)。已註明其他標籤。

  • cache.size(快取大小)

  • cache.puts(快取置入)

  • cache.gets(快取取得)會以 result 標記,result 要嘛是 hit,要嘛是 miss

  • cache.evictions(快取驅逐)

  • cache.eviction.weight(快取驅逐權重)

預設為停用。

2. 組態設定

所有位址和佇列的度量指標預設為啟用。如果您要停用特定位址或一組位址的度量指標,您可以將 enable-metrics address-setting 設定為 false

broker.xml 中,使用 metrics 元素來設定要報告哪些一般代理程式和 JVM 度量指標,並組態設定外掛程式本身。以下是包含所有可選度量指標的組態設定

<metrics>
   <jvm-memory>true</jvm-memory> <!-- defaults to true -->
   <jvm-gc>true</jvm-gc> <!-- defaults to false -->
   <jvm-threads>true</jvm-threads> <!-- defaults to false -->
   <netty-pool>true</netty-pool> <!-- defaults to false -->
   <file-descriptors>true</file-descriptors> <!-- defaults to false -->
   <processor>true</processor> <!-- defaults to false -->
   <uptime>true</uptime> <!-- defaults to false -->
   <logging>true</logging> <!-- defaults to false -->
   <security-caches>true</security-caches> <!-- defaults to false -->
   <plugin class-name="org.apache.activemq.artemis.core.server.metrics.plugins.LoggingMetricsPlugin"/>
</metrics>

外掛程式也可以使用鍵/值屬性進行組態設定,以便在必要時自訂實作,例如:

<metrics>
   <plugin class-name="org.example.MyMetricsPlugin">
      <property key="host" value="example.org" />
      <property key="port" value="5162" />
      <property key="foo" value="10" />
   </plugin>
</metrics>