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(佇列)
這些度量指標會以 address
和 queue
標籤標記,這些標籤分別反映對應位址和佇列的名稱。
-
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 的 BufferPoolMXBeans 和 MemoryPoolMXBeans 收集基礎資料。
預設為啟用。
- JVM GC
-
測量最大和即時資料大小、升級和配置率,以及 GC 暫停的次數(或 CMS 的並行階段時間)。從 Java 的 MemoryPoolMXBeans 收集基礎資料。
預設為停用。
- JVM 執行緒
-
測量執行緒峰值、精靈執行緒數目和即時執行緒。從 Java 的 ThreadMXBean 收集基礎資料。
預設為停用。
- Netty
-
從 Netty 的 PooledByteBufAllocatorMetric 收集度量指標。
預設為停用。
- 檔案描述元
-
測量目前和允許的最大開啟檔案數。
預設為停用。
- 處理器
-
測量系統 CPU 數、CPU 使用率、1 分鐘平均負載,以及處理程序 CPU 使用率。
預設為停用。
- 執行時間
-
測量處理程序啟動時間和執行時間。
預設為停用。
- 記錄
-
計算每個記錄類別(例如,
WARN
、ERROR
等)的記錄事件數。預設為停用。
這僅適用於 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>