squbs管理控制台提供了一个web/JSON接口,关于squbs和JVM的系统状态和统计信息。所有JVM与squbs的状态和统计信息通过JMX MXBeans提供。cube,应用或组件可以自由的注册他们自己的监控器。
注意: 迄今为止,squbs管理控制台不允许JMX方法执行或修改任何设置。
依赖
通过使用squbs管理控制台,简单的添加以下依赖至你的build.sbt文件或Scala构建脚本中
"org.squbs" %% "squbs-admin" % squbsVersion
squbs-admin将会自动检测。不需要任何API
访问Bean 信息
squbs-admin使用上下文/adm
。单独使用/adm
会列出JMX MXBeans的目录,对应的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插件将会检测和允许简单的复制这些链接。按照提供的链接,举个例子bean org.squbs.unicomplex:type=Cubes
将会显示所有的bean细节在下面:
{
"Cubes" : [
{
"fullName" : "org.squbs.admin",
"name" : "admin",
"supervisor" : "Actor[akka://squbs/user/admin#104594558]",
"version" : "0.7.1"
}
]
}
Bean URL & 编码
所有的bean都在路径 /adm/bean/
之下,跟随在完整的bean对象名称之后。这个bean对象名称通过如下的转换使它可以通过URL简单的访问:
- bean名称中的
=
转换为~
。 - 所有其他的字符被编码成标准的URL编码。举个例子,一个空格将被编码成
%20
。
举个例子,为了访问名称为java.lang:type=GarbageCollector,name=PS Scavenge
的对象,URL的路径为/adm/bean/java.lang:type~GarbageCollector,name~PS%20Scavenge
监听(Listener)
squbs-admin绑定admin-listener
。默认的,这是default-listener的别名。服务可以重写Unicomplex配置和重新分配admin-listener
别名到其他定义的选择的监听。下面的例子示例了在你的application.conf
文件中如何重新分配别名:
定义在Unicomplex的别名
default-listener {
aliases = [admin-listener]
}
重写 application.conf
的例子
default-listener {
aliases = []
}
my-listener {
aliases = [admin-listener]
}
禁止(Exclusions)
在很多情况下,MXBean可能包含敏感信息,并且不应该在admin console展示。最好的方法是,当然,首先不将这些信息包含在JMX bean中。然而,某些情况下时间这些bean不由你的组件暴露,而由第三方组件或类库,并且这样没有办法在不修改第三方组件的情况下隐藏这些信息。Exclusion是admin console提供的特性来在JSON中隐藏这些信息。
配置Exclusions
Exclusion配置在 squbs.admin ,在你的标准配置文件中 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"
]
}
- 要从控制台视图中排除所有的MXBean,列出禁用bean对象的名称。
- 要从MXBean中排除一个参数字段,列出排除bean对象的名称和字段名。
- bean对象名称和字段名称通过
::
分隔 - 在MXBean的任何深度上,字段名称用作任何属性和字段的的过滤器。如果字段名称匹配提供的名称,它将会排除。
- bean对象名称和字段名称通过
- 在同一个bean中排除多个字段,可以通过列出
beanName::field1
,beanName::field2
等等实现。
错误响应
在请求一个无效的bean对象名称或在黑名单bean名称时会返回一个 404 (NotFound)响应。由于安全原因,两种情况的结果都是不可区分的。