Introduction
This document outlines a proposal to integrate JMX Management into Netty 4.
Global Options and Configuration
These items are general issues to consider in the global configuration and deployment of Netty component MBeans.
- Netty MBean domain namespace.
- JMX Domain[s] (MBeanServer[s]) to register with.
- Verbosity of JMX Management Interfaces
- Optional categories of Netty components to register management interfaces for.
- Relative level of information for each category of MBean. For example:
Low: Configuration only.
- Medium: Activity, events and volume.
- High: Instrumented activity (operation elapsed time, CPU time, waits, blocks, bytes transferred etc.)
- Stale MBean instance age-out. i.e. In cases where an MBean is created for the management of a transient Netty component such as a Channel, and an MBean for that component is registered when the component is created [or connected] but it may be desirable that the MBean remain accessible for some lingering time after the component is closed so that a user can inspect it. Eventually, in the absence of any direct JMX interfaction with the MBean, it should be aged out and be unregistered.
- Standardized JMX ObjectName patterns per component type:
- Useful identifying key property names and values.
- Sufficient granularity of key property names and values to avoid ObjectName collision between MBeans created for two legitimatelly components.
Proposed Requirements and Implementation
- Netty Code Base Internalized JMX Code to avoid additional library dependencies.
- Enumerate potental extensions to Netty core classes to allow JMX supporting hooks into core class instances.
- JMX Annotations to provide runtime meta-data and discovery of extended attributes and annotations.
- MBeans implemented as DynamicMBeans rather than simple MBeans:
- Supports useful and informative meta-data.
- Allows dynamic upgrade/downgrade of verbosity/granularity by adding/removing attributes.
Managed Netty Components (Rough and Speculative)
Verbose or Extended Options
Component Type | Attributes | Operations | Notifications | Notes |
---|---|---|---|---|
NettyMaster | OpenChannelCount BoundChannelCount ConnectedChannelCount ChannelGroupCount TotalBytesIn TotalBytesOut | ChannelConnected ChannelDisconnected ChannelBound ChannelUnbound ChannelOpen ChannelClosed | ||
Channel | Type (ClassName) Local Address Remote Address Channel ID Interest Ops (Rendered) State Bound Opened Connected Readable Writable Pipeline Handler Names LastConnectDate LastDisconnectDate Child Channel ObjectNames Parent Channel ObjectName [Options...] Exceptions Timeouts AwaitsInProgress Calls Upstream Calls Downstream Bytes Upstream Bytes Downstream Executor[s] ObjectName[s] Handler[s] ObjectName[s] | Connect Disconnect Add to Pipeline Remove from Pipeline ResetStats | exceptionCaught channelStateChange channelOpen channelFutureAwaitTimeout | Key Properties: Channel ID Remote Address Local Address |
ChannelGroup | Name ChannelCount Channel ObjectNames Aggregate Channel Stats | Unbind | Same as Channel Channel Added Channel Removed | Key Properties: Name |
Executors / Thread Pools | ActiveCount TaskCount CompletedTaskCount CorePoolSize MaxPoolSize KeepAliveTime CurrentPoolSize LargestPoolSize QueuedTaskCount QueueCapacity State Thread Stats For Pool Threads
| Terminate | State Change | Key Properties: ? |
Pipelines | Aggregated Metrics For All Contained Handlers | Key Properties: ? | ||
Handlers | Name Shareable Exceptions Calls Upstream Calls Downstream Bytes Upstream Bytes Downstream averageElapsedTime -[ToHandle] | ResetStats | messageReceived | Key Properties: Name ClassName Instance Seq#
Tricky cardinality. |
InternalLoggerFactory | DefaultFactory | setLoggerLevel getLoggerLevel | LoggerLevelChange |
Additional Input:
- Admin Console
- Traffic and IP Filter
- Web App UI
- REST Interface
Comments