squbs管理控制臺(tái)提供了一個(gè)web/JSON接口守伸,關(guān)于squbs和JVM的系統(tǒng)狀態(tài)和統(tǒng)計(jì)信息盯桦。所有JVM與squbs的狀態(tài)和統(tǒng)計(jì)信息通過JMX MXBeans提供。cube通砍,應(yīng)用或組件可以自由的注冊他們自己的監(jiān)控器卑硫。
注意: 迄今為止球昨,squbs管理控制臺(tái)不允許JMX方法執(zhí)行或修改任何設(shè)置尔店。
依賴
通過使用squbs管理控制臺(tái),簡單的添加以下依賴至你的build.sbt文件或Scala構(gòu)建腳本中
"org.squbs" %% "squbs-admin" % squbsVersion
squbs-admin將會(huì)自動(dòng)檢測主慰。不需要任何API
訪問Bean 信息
squbs-admin使用上下文/adm
闹获。單獨(dú)使用/adm
會(huì)列出JMX MXBeans的目錄,對應(yīng)的URLs訪問bean如下面的例子所示:
{
"JMImplementation:type=MBeanServerDelegate" : "http://localhost:8080/adm/bean/JMImplementation:type~MBeanServerDelegate",
"com.sun.management:type=DiagnosticCommand" : "http://localhost:8080/adm/bean/com.sun.management:type~DiagnosticCommand",
"com.sun.management:type=HotSpotDiagnostic" : "http://localhost:8080/adm/bean/com.sun.management:type~HotSpotDiagnostic",
"java.lang:type=ClassLoading" : "http://localhost:8080/adm/bean/java.lang:type~ClassLoading",
"java.lang:type=Compilation" : "http://localhost:8080/adm/bean/java.lang:type~Compilation",
"java.lang:type=GarbageCollector,name=PS MarkSweep" : "http://localhost:8080/adm/bean/java.lang:type~GarbageCollector,name~PS%20MarkSweep",
"java.lang:type=GarbageCollector,name=PS Scavenge" : "http://localhost:8080/adm/bean/java.lang:type~GarbageCollector,name~PS%20Scavenge",
"java.lang:type=Memory" : "http://localhost:8080/adm/bean/java.lang:type~Memory",
"java.lang:type=MemoryManager,name=CodeCacheManager" : "http://localhost:8080/adm/bean/java.lang:type~MemoryManager,name~CodeCacheManager",
"java.lang:type=MemoryManager,name=Metaspace Manager" : "http://localhost:8080/adm/bean/java.lang:type~MemoryManager,name~Metaspace%20Manager",
"java.lang:type=MemoryPool,name=Code Cache" : "http://localhost:8080/adm/bean/java.lang:type~MemoryPool,name~Code%20Cache",
"java.lang:type=MemoryPool,name=Compressed Class Space" : "http://localhost:8080/adm/bean/java.lang:type~MemoryPool,name~Compressed%20Class%20Space",
"java.lang:type=MemoryPool,name=Metaspace" : "http://localhost:8080/adm/bean/java.lang:type~MemoryPool,name~Metaspace",
"java.lang:type=MemoryPool,name=PS Eden Space" : "http://localhost:8080/adm/bean/java.lang:type~MemoryPool,name~PS%20Eden%20Space",
"java.lang:type=MemoryPool,name=PS Old Gen" : "http://localhost:8080/adm/bean/java.lang:type~MemoryPool,name~PS%20Old%20Gen",
"java.lang:type=MemoryPool,name=PS Survivor Space" : "http://localhost:8080/adm/bean/java.lang:type~MemoryPool,name~PS%20Survivor%20Space",
"java.lang:type=OperatingSystem" : "http://localhost:8080/adm/bean/java.lang:type~OperatingSystem",
"java.lang:type=Runtime" : "http://localhost:8080/adm/bean/java.lang:type~Runtime",
"java.lang:type=Threading" : "http://localhost:8080/adm/bean/java.lang:type~Threading",
"java.nio:type=BufferPool,name=direct" : "http://localhost:8080/adm/bean/java.nio:type~BufferPool,name~direct",
"java.nio:type=BufferPool,name=mapped" : "http://localhost:8080/adm/bean/java.nio:type~BufferPool,name~mapped",
"java.util.logging:type=Logging" : "http://localhost:8080/adm/bean/java.util.logging:type~Logging",
"org.squbs.unicomplex:type=CubeState,name=admin" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~CubeState,name~admin",
"org.squbs.unicomplex:type=Cubes" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~Cubes",
"org.squbs.unicomplex:type=Extensions" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~Extensions",
"org.squbs.unicomplex:type=Listeners" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~Listeners",
"org.squbs.unicomplex:type=ServerStats,listener=default-listener" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~ServerStats,listener~default-listener",
"org.squbs.unicomplex:type=SystemSetting" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~SystemSetting",
"org.squbs.unicomplex:type=SystemState" : "http://localhost:8080/adm/bean/org.squbs.unicomplex:type~SystemState"
}
你的瀏覽器的JSON插件將會(huì)檢測和允許簡單的復(fù)制這些鏈接河哑。按照提供的鏈接避诽,舉個(gè)例子bean org.squbs.unicomplex:type=Cubes
將會(huì)顯示所有的bean細(xì)節(jié)在下面:
{
"Cubes" : [
{
"fullName" : "org.squbs.admin",
"name" : "admin",
"supervisor" : "Actor[akka://squbs/user/admin#104594558]",
"version" : "0.7.1"
}
]
}
Bean URL & 編碼
所有的bean都在路徑 /adm/bean/
之下,跟隨在完整的bean對象名稱之后璃谨。這個(gè)bean對象名稱通過如下的轉(zhuǎn)換使它可以通過URL簡單的訪問:
- bean名稱中的
=
轉(zhuǎn)換為~
沙庐。 - 所有其他的字符被編碼成標(biāo)準(zhǔn)的URL編碼。舉個(gè)例子佳吞,一個(gè)空格將被編碼成
%20
拱雏。
舉個(gè)例子,為了訪問名稱為java.lang:type=GarbageCollector,name=PS Scavenge
的對象底扳,URL的路徑為/adm/bean/java.lang:type~GarbageCollector,name~PS%20Scavenge
監(jiān)聽(Listener)
squbs-admin綁定admin-listener
铸抑。默認(rèn)的,這是default-listener的別名衷模。服務(wù)可以重寫Unicomplex配置和重新分配admin-listener
別名到其他定義的選擇的監(jiān)聽鹊汛。下面的例子示例了在你的application.conf
文件中如何重新分配別名:
定義在Unicomplex的別名
default-listener {
aliases = [admin-listener]
}
重寫 application.conf
的例子
default-listener {
aliases = []
}
my-listener {
aliases = [admin-listener]
}
禁止(Exclusions)
在很多情況下,MXBean可能包含敏感信息阱冶,并且不應(yīng)該在admin console展示刁憋。最好的方法是,當(dāng)然木蹬,首先不將這些信息包含在JMX bean中至耻。然而,某些情況下時(shí)間這些bean不由你的組件暴露镊叁,而由第三方組件或類庫尘颓,并且這樣沒有辦法在不修改第三方組件的情況下隱藏這些信息。Exclusion是admin console提供的特性來在JSON中隱藏這些信息晦譬。
配置Exclusions
Exclusion配置在 squbs.admin 疤苹,在你的標(biāo)準(zhǔn)配置文件中 application.conf
中,所見如下:
squbs.admin {
exclusions = [
"java.lang:type=Memory",
"java.lang:type=GarbageCollector,name=PS MarkSweep::init",
"java.lang:type=GarbageCollector,name=PS MarkSweep::startTime"
]
}
- 要從控制臺(tái)視圖中排除所有的MXBean蛔添,列出禁用bean對象的名稱痰催。
- 要從MXBean中排除一個(gè)參數(shù)字段,列出排除bean對象的名稱和字段名迎瞧。
- bean對象名稱和字段名稱通過
::
分隔 - 在MXBean的任何深度上夸溶,字段名稱用作任何屬性和字段的的過濾器。如果字段名稱匹配提供的名稱凶硅,它將會(huì)排除缝裁。
- bean對象名稱和字段名稱通過
- 在同一個(gè)bean中排除多個(gè)字段,可以通過列出
beanName::field1
,beanName::field2
等等實(shí)現(xiàn)足绅。
錯(cuò)誤響應(yīng)
在請求一個(gè)無效的bean對象名稱或在黑名單bean名稱時(shí)會(huì)返回一個(gè) 404 (NotFound)響應(yīng)捷绑。由于安全原因,兩種情況的結(jié)果都是不可區(qū)分的氢妈。