squbs-18. 管理控制台(Admin Console)

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简单的访问:

  1. bean名称中的 =转换为 ~
  2. 所有其他的字符被编码成标准的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中排除多个字段,可以通过列出beanName::field1, beanName::field2等等实现。

错误响应

在请求一个无效的bean对象名称或在黑名单bean名称时会返回一个 404 (NotFound)响应。由于安全原因,两种情况的结果都是不可区分的。

你可能感兴趣的:(squbs-18. 管理控制台(Admin Console))