[This posting will be a part of my upcoming WebLogic 12c book]
This article is part II of III. Make sure you read part I explaining the basics of monitoring WebLogic with WLST, the WebLogic 12c REST-ful management API and the open source framework Jolokia.
There will be a part III in a few of days, explaining how to use j4psh with WebLogic. j4psh is a JMX shell that resembles WLST in interactive mode but includes features such as syntax highlighting and tab-completion of commands and MBean names. j4psh is highly useful to interactively find out the correct MBean names used for the requests below.
WebLogic with Jolokia
Did you ever wonder how to retrieve the configuration values for a WebLogic managed server, runtime data of a JDBC connection pool or the number of messages in a particular JMS queue with a fast and simple HTTP GET?
The examples show typical use cases for monitoring a WebLogic domain with the following configuration:
- Admin server running at localhost:7001
- Managed server with name surf1 running at localhost:7003
- JDBC datasource with the name emergencyDB and associated connection pool (target set to surf1)
- JMS configuration with a JMS server surfJMS running on managed server surf1, a module surfJMSModule containing a queue name jms/ShippingRequestQueue (target of JMS server is surf1, JMS module subdeployment set to surfJMS)
- A deployment of a web service with the name SubmitOrder and target AdminServer and surf1.
An installation of Jolokia with target set to all server of the domain is recommended to follow the examples in this part.
General: List Configuration Details of Managed Server with Name surf1
http://localhost:7001/jolokia/read/com.bea:Name=surf1,Type=Server?ignoreErrors=true
Note, that without the ?ignoreErrors=true parameter the request would fail with an “NoAccessRuntimeException” because you cannot access the SSL keystore passphrases without proper authentication. Authentication is easily possible, but beyond of the scope of this article.
{ "request" : { "mbean" : "com.bea:Name=surf1,Type=Server", "type" : "read" }, "status" : 200, "timestamp" : 1334778534, "value" : { "AcceptBacklog" : 300, "AddWorkManagerThreadsByCpuCount" : false, "AdminReconnectIntervalSeconds" : 10, "AdministrationPort" : 9002, "AdministrationPortEnabled" : false, "AdministrationProtocol" : "t3s", "AutoKillIfFailed" : false, "AutoMigrationEnabled" : false, "AutoRestart" : true, "COM" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=COM" }, "COMEnabled" : false, "CandidateMachines" : [ ], "ClasspathServletDisabled" : false, "ClientCertProxyEnabled" : false, "Cluster" : { "objectName" : "com.bea:Name=surfCluster,Type=Cluster" }, "ClusterRuntime" : null, "ClusterWeight" : 100, "CoherenceClusterSystemResource" : null, "CompleteCOMMessageTimeout" : -1, "CompleteHTTPMessageTimeout" : -1, "CompleteIIOPMessageTimeout" : -1, "CompleteMessageTimeout" : 60, "CompleteT3MessageTimeout" : -1, "ConnectTimeout" : 0, "ConsensusProcessIdentifier" : -1, "ConsoleInputEnabled" : false, "CustomIdentityKeyStoreFileName" : null, "CustomIdentityKeyStorePassPhrase" : "ERROR: Access to sensitive attribute in clear text is not allowed due to the setting of ClearTextCredentialAccessEnabled attribute in SecurityConfigurationMBean. Attr: CustomIdentityKeyStorePassPhrase, MBean name: com.bea:Name=surf1,Type=Server (class weblogic.management.NoAccessRuntimeException)", "CustomIdentityKeyStorePassPhraseEncrypted" : "ERROR: Access not allowed for subject: principals=[], on ResourceType: Server Action: read, Target: CustomIdentityKeyStorePassPhraseEncrypted (class weblogic.management.NoAccessRuntimeException)", "CustomIdentityKeyStoreType" : null, "CustomTrustKeyStoreFileName" : null, "CustomTrustKeyStorePassPhrase" : "ERROR: Access to sensitive attribute in clear text is not allowed due to the setting of ClearTextCredentialAccessEnabled attribute in SecurityConfigurationMBean. Attr: CustomTrustKeyStorePassPhrase, MBean name: com.bea:Name=surf1,Type=Server (class weblogic.management.NoAccessRuntimeException)", "CustomTrustKeyStorePassPhraseEncrypted" : "ERROR: Access not allowed for subject: principals=[], on ResourceType: Server Action: read, Target: CustomTrustKeyStorePassPhraseEncrypted (class weblogic.management.NoAccessRuntimeException)", "CustomTrustKeyStoreType" : null, "DGCIdlePeriodsUntilTimeout" : 5, "DataSource" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=DataSource" }, "DefaultFileStore" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=DefaultFileStore" }, "DefaultIIOPPassword" : "ERROR: Access to sensitive attribute in clear text is not allowed due to the setting of ClearTextCredentialAccessEnabled attribute in SecurityConfigurationMBean. Attr: DefaultIIOPPassword, MBean name: com.bea:Name=surf1,Type=Server (class weblogic.management.NoAccessRuntimeException)", "DefaultIIOPPasswordEncrypted" : "ERROR: Access not allowed for subject: principals=[], on ResourceType: Server Action: read, Target: DefaultIIOPPasswordEncrypted (class weblogic.management.NoAccessRuntimeException)", "DefaultIIOPUser" : null, "DefaultInternalServletsDisabled" : false, "DefaultProtocol" : "t3", "DefaultSecureProtocol" : "t3s", "DefaultTGIOPPassword" : "ERROR: Access to sensitive attribute in clear text is not allowed due to the setting of ClearTextCredentialAccessEnabled attribute in SecurityConfigurationMBean. Attr: DefaultTGIOPPassword, MBean name: com.bea:Name=surf1,Type=Server (class weblogic.management.NoAccessRuntimeException)", "DefaultTGIOPPasswordEncrypted" : "ERROR: Access not allowed for subject: principals=[], on ResourceType: Server Action: read, Target: DefaultTGIOPPasswordEncrypted (class weblogic.management.NoAccessRuntimeException)", "DefaultTGIOPUser" : "guest", "ExecuteQueues" : [ ], "ExpectedToRun" : true, "ExternalDNSName" : null, "ExtraEjbcOptions" : null, "ExtraRmicOptions" : null, "FederationServices" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=FederationServices" }, "GatheredWritesEnabled" : false, "GracefulShutdownTimeout" : 0, "HealthCheckIntervalSeconds" : 180, "HealthCheckStartDelaySeconds" : 120, "HealthCheckTimeoutSeconds" : 60, "HostsMigratableServices" : true, "HttpTraceSupportEnabled" : false, "HttpdEnabled" : true, "IIOP" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=IIOP" }, "IIOPEnabled" : true, "IIOPTxMechanism" : "ots", "IdleConnectionTimeout" : 65, "IdleIIOPConnectionTimeout" : -1, "IdlePeriodsUntilTimeout" : 4, "IgnoreSessionsDuringShutdown" : false, "InstrumentStackTraceEnabled" : true, "InterfaceAddress" : null, "JDBCLLRTableName" : null, "JDBCLoggingEnabled" : false, "JDBCLoginTimeoutSeconds" : 0, "JMSDefaultConnectionFactoriesEnabled" : true, "JMSThreadPoolSize" : 15, "JNDITransportableObjectFactoryList" : [ ], "JTAMigratableTarget" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=JTAMigratableTarget" }, "JavaCompiler" : "javac", "JavaCompilerPostClassPath" : null, "JavaCompilerPreClassPath" : null, "JavaStandardTrustKeyStorePassPhrase" : "ERROR: Access to sensitive attribute in clear text is not allowed due to the setting of ClearTextCredentialAccessEnabled attribute in SecurityConfigurationMBean. Attr: JavaStandardTrustKeyStorePassPhrase, MBean name: com.bea:Name=surf1,Type=Server (class weblogic.management.NoAccessRuntimeException)", "JavaStandardTrustKeyStorePassPhraseEncrypted" : "ERROR: Access not allowed for subject: principals=[], on ResourceType: Server Action: read, Target: JavaStandardTrustKeyStorePassPhraseEncrypted (class weblogic.management.NoAccessRuntimeException)", "KernelDebug" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=ServerDebug" }, "KeyStores" : "DemoIdentityAndDemoTrust", "ListenAddress" : "", "ListenDelaySecs" : 0, "ListenPort" : 7003, "ListenPortEnabled" : true, "ListenThreadStartDelaySecs" : 60, "ListenersBindEarly" : false, "Log" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=Log" }, "LogRemoteExceptionsEnabled" : false, "LoginTimeoutMillis" : 5000, "LowMemoryGCThreshold" : 5, "LowMemoryGranularityLevel" : 5, "LowMemorySampleSize" : 10, "LowMemoryTimeInterval" : 3600, "MSIFileReplicationEnabled" : false, "Machine" : null, "ManagedServerIndependenceEnabled" : true, "MaxCOMMessageSize" : -1, "MaxHTTPMessageSize" : -1, "MaxIIOPMessageSize" : -1, "MaxMessageSize" : 10000000, "MaxOpenSockCount" : -1, "MaxT3MessageSize" : -1, "MessageIdPrefixEnabled" : false, "MessagingBridgeThreadPoolSize" : 5, "MuxerClass" : null, "NMSocketCreateTimeoutInMillis" : 180000, "Name" : "surf1", "NativeIOEnabled" : true, "NetworkAccessPoints" : [ ], "Notes" : null, "OutboundEnabled" : false, "OutboundPrivateKeyEnabled" : false, "OverloadProtection" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=OverloadProtection" }, "Parent" : { "objectName" : "com.bea:Name=surfandconsulting,Type=Domain" }, "PeriodLength" : 60000, "PreferredSecondaryGroup" : null, "ReliableDeliveryPolicy" : null, "ReplicationGroup" : null, "ReplicationPorts" : null, "RestartDelaySeconds" : 0, "RestartIntervalSeconds" : 3600, "RestartMax" : 2, "ReverseDNSAllowed" : false, "SSL" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=SSL" }, "ScatteredReadsEnabled" : false, "SelfTuningThreadPoolSizeMax" : 400, "SelfTuningThreadPoolSizeMin" : 1, "ServerDebug" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=ServerDebug" }, "ServerDiagnosticConfig" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=WLDFServerDiagnostic" }, "ServerLifeCycleTimeoutVal" : 30, "ServerStart" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=ServerStart" }, "ServerVersion" : "unknown", "SingleSignOnServices" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=SingleSignOnServices" }, "SocketBufferSizeAsChunkSize" : false, "SocketReaders" : -1, "StagingDirectoryName" : "/u01/domains/surfandconsulting/servers/surf1/stage", "StagingMode" : "stage", "StartupMode" : "RUNNING", "StartupTimeout" : 0, "StuckThreadMaxTime" : 600, "StuckThreadTimerInterval" : 60, "SystemPasswordEncrypted" : "ERROR: Access not allowed for subject: principals=[], on ResourceType: Server Action: read, Target: SystemPasswordEncrypted (class weblogic.management.NoAccessRuntimeException)", "TGIOPEnabled" : true, "ThreadPoolPercentSocketReaders" : 33, "TimedOutRefIsolationTime" : 0, "TransactionLogFilePrefix" : "./", "TransactionLogFileWritePolicy" : "Direct-Write", "TransactionLogJDBCStore" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=TransactionLogJDBCStore" }, "TunnelingClientPingSecs" : 45, "TunnelingClientTimeoutSecs" : 40, "TunnelingEnabled" : false, "Type" : "Server", "UploadDirectoryName" : "./servers/surf1/upload", "Use81StyleExecuteQueues" : false, "UseConcurrentQueueForRequestManager" : false, "UseFusionForLLR" : false, "VerboseEJBDeploymentEnabled" : "false", "VirtualMachineName" : "surfandconsulting_surf1", "WebServer" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=WebServer" }, "WebService" : { "objectName" : "com.bea:Name=surf1,Server=surf1,Type=WebService" }, "WeblogicPluginEnabled" : false, "XMLEntityCache" : null, "XMLRegistry" : null } }Deployment: List all Deployments
http://localhost:7001/jolokia/search/com.bea:*,Type=ApplicationRuntime{ "request" : { "mbean" : "com.bea:Type=ApplicationRuntime,*", "type" : "search" }, "status" : 200, "timestamp" : 1334780578, "value" : [ "com.bea:Name=mejb,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=consoleapp,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=bea_wls_management_internal2,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=emergencyDB,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=bea_wls_deployment_internal,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=SubmitOrder,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=wls-management-services,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=bea_wls_internal,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=jolokia,ServerRuntime=AdminServer,Type=ApplicationRuntime", "com.bea:Name=bea_wls9_async_response,ServerRuntime=AdminServer,Type=ApplicationRuntime" ] }Deployment: List Deployments Details for an Application with the Name SubmitOrder
http://localhost:7001/jolokia/read/com.bea:ServerRuntime=*,Name=SubmitOrder,Type=ApplicationRuntime{ "request" : { "mbean" : "com.bea:Name=SubmitOrder,ServerRuntime=*,Type=ApplicationRuntime", "type" : "read" }, "status" : 200, "timestamp" : 1334777478, "value" : { "com.bea:Name=SubmitOrder,ServerRuntime=AdminServer,Type=ApplicationRuntime" : { "ActiveVersionState" : 2, "ApplicationName" : "SubmitOrder", "ApplicationVersion" : null, "ClassRedefinitionRuntime" : null, "CoherenceClusterRuntime" : null, "ComponentRuntimes" : [ { "objectName" : "com.bea:ApplicationRuntime=SubmitOrder,Name=AdminServer_/SubmitOrder,ServerRuntime=AdminServer,Type=WebAppComponentRuntime" } ], "EAR" : false, "HealthState" : { "critical" : false, "mBeanName" : null, "mBeanType" : null, "reasonCode" : [ ], "state" : 0, "subsystemName" : null }, "KodoPersistenceUnitRuntimes" : [ ], "LibraryRuntimes" : null, "MaxThreadsConstraintRuntimes" : [ ], "MinThreadsConstraintRuntimes" : [ ], "Name" : "SubmitOrder", "OptionalPackageRuntimes" : [ ], "Parent" : { "objectName" : "com.bea:Name=AdminServer,Type=ServerRuntime" }, "PersistenceUnitRuntimes" : [ ], "QueryCacheRuntimes" : [ ], "RequestClassRuntimes" : [ ], "Type" : "ApplicationRuntime", "WorkManagerRuntimes" : [ { "objectName" : "com.bea:ApplicationRuntime=SubmitOrder,Name=default,ServerRuntime=AdminServer,Type=WorkManagerRuntime" } ], "WseeRuntimes" : [ { "objectName" : "com.bea:ApplicationRuntime=SubmitOrder,Name=SubmitOrder!EntryWSProdService,ServerRuntime=AdminServer,Type=WseeRuntime" }, { "objectName" : "com.bea:ApplicationRuntime=SubmitOrder,Name=SubmitOrder!EntryWSService,ServerRuntime=AdminServer,Type=WseeRuntime" } ], "WseeV2Runtimes" : [ ] } } }JDBC Data Source: Retrieve Settings for emergencyDB Data Source with Target Managed Server surf1 Running at localhost:7003
http://localhost:7003/jolokia/read/com.bea:Name=emergencyDB,ServerRuntime=surf1,Type=JDBCDataSourceRuntime?ignoreErrors=true{ "request" : { "mbean" : "com.bea:Name=emergencyDB,ServerRuntime=surf1,Type=JDBCDataSourceRuntime", "type" : "read" }, "status" : 200, "timestamp" : 1334823502, "value" : { "ActiveConnectionsAverageCount" : 0, "ActiveConnectionsCurrentCount" : 0, "ActiveConnectionsHighCount" : 1, "ConnectionDelayTime" : 44, "ConnectionsTotalCount" : 1, "CurrCapacity" : 1, "CurrCapacityHighCount" : 1, "DatabaseProductName" : "Apache Derby", "DatabaseProductVersion" : "10.6.1.0 - (938214)", "DeploymentState" : 2, "DriverName" : "Apache Derby Network Client JDBC Driver", "DriverVersion" : "10.6.1.0 - (938214)", "Enabled" : true, "FailedReserveRequestCount" : 0, "FailuresToReconnectCount" : 0, "HighestNumAvailable" : 1, "HighestNumUnavailable" : 1, "JDBCDriverRuntime" : { "objectName" : "com.bea:Name=surfandconsulting_surf1_org.apache.derby.jdbc.ClientDriver,ServerRuntime=surf1,Type=JDBCDriverRuntime" }, "LastTask" : null, "LeakedConnectionCount" : 0, "ModuleId" : "emergencyDB", "Name" : "emergencyDB", "NumAvailable" : 1, "NumUnavailable" : 0, "Parent" : { "objectName" : "com.bea:Name=surf1,Type=ServerRuntime" }, "PrepStmtCacheAccessCount" : 0, "PrepStmtCacheAddCount" : 0, "PrepStmtCacheCurrentSize" : 0, "PrepStmtCacheDeleteCount" : 0, "PrepStmtCacheHitCount" : 0, "PrepStmtCacheMissCount" : 0, "Properties" : "ERROR: MBean getAttribute failed: weblogic.common.resourcepool.ResourcePermissionsException: User \"\" does not have permission to perform operation \"admin\" on resource \"emergencyDB\" of module \"null\" of application \"null\" of type \"ConnectionPool\" (class javax.management.MBeanException)", "ReserveRequestCount" : 1, "State" : "Running", "Type" : "JDBCDataSourceRuntime", "VersionJDBCDriver" : "org.apache.derby.jdbc.ClientDriver", "WaitSecondsHighCount" : 0, "WaitingForConnectionCurrentCount" : 0, "WaitingForConnectionFailureTotal" : 0, "WaitingForConnectionHighCount" : 0, "WaitingForConnectionSuccessTotal" : 0, "WaitingForConnectionTotal" : 0, "WorkManagerRuntimes" : null } }JDBC Connection Pool: Find all JMS Servers with Target set to Managed Server Running at localhost:7003
http://localhost:7003/jolokia/read/com.bea:Name=emergencyDB,ServerRuntime=surf1,Type=JDBCConnectionPoolRuntime?ignoreErrors=truewhich returns the JMS server surfJMS:
{ "request" : { "mbean" : "com.bea:Name=emergencyDB,ServerRuntime=surf1,Type=JDBCConnectionPoolRuntime", "type" : "read" }, "status" : 200, "timestamp" : 1334823105, "value" : { "ActiveConnectionsAverageCount" : 0, "ActiveConnectionsCurrentCount" : 0, "ActiveConnectionsHighCount" : 0, "ConnectionDelayTime" : 44, "ConnectionLeakProfileCount" : 0, "ConnectionsTotalCount" : 1, "CurrCapacity" : 1, "DeploymentState" : 2, "Enabled" : true, "FailuresToReconnectCount" : 0, "HighestNumAvailable" : 1, "HighestNumUnavailable" : 0, "LeakedConnectionCount" : 0, "MaxCapacity" : 15, "ModuleId" : "emergencyDB", "Name" : "emergencyDB", "NumAvailable" : 1, "NumUnavailable" : 0, "Parent" : { "objectName" : "com.bea:Name=surf1,Type=ServerRuntime" }, "PoolState" : true, "Properties" : "ERROR: MBean getAttribute failed: weblogic.common.resourcepool.ResourcePermissionsException: User \"\" does not have permission to perform operation \"admin\" on resource \"emergencyDB\" of module \"null\" of application \"null\" of type \"ConnectionPool\" (class javax.management.MBeanException)", "State" : "Running", "StatementProfileCount" : 0, "Type" : "JDBCConnectionPoolRuntime", "VersionJDBCDriver" : "org.apache.derby.jdbc.ClientDriver", "WaitSecondsHighCount" : 0, "WaitingForConnectionCurrentCount" : 0, "WaitingForConnectionHighCount" : 0, "WorkManagerRuntimes" : null } }JMS: Find all JMS Servers with Target set to Managed Server Running at localhost:7003
http://localhost:7003/jolokia/search/com.bea:Type=JMSServerRuntime,*which returns the JMS server surfJMS:
{ "timestamp":1334776840, "status":200, "request":{ "mbean":"com.bea:Type=JMSServerRuntime,*", "type":"search" }, "value":[ "com.bea:Name=surfJMS,ServerRuntime=surf1,Type=JMSServerRuntime" ] }JMS: Runtime Properties for a Particular Queue
Request the MessagesCurrentCount, MessagesHighCount and MessagesReceivedCount for a queue with the name jms/ShippingRequestQueue (note the “!” is used in the URL to escape the “/” character in the queue name) in a JMS module with the name surfJMSModule (note that JMS module and queue name are typically separated in the MBean Name attribute with a “!” which has to be escaped by another “!”).
http://localhost:7003/jolokia/read/com.bea:JMSServerRuntime=surfJMS,Name=surfJMSModule!!jms!/ShippingRequestQueue,ServerRuntime=surf1,Type=JMSDestinationRuntime/MessagesCurrentCount,MessagesHighCount,MessagesReceivedCountwhich returns the following JSON structure.
{ "request":{ "attribute":[ "MessagesCurrentCount", "MessagesHighCount", "MessagesReceivedCount" ], "mbean":"com.bea:JMSServerRuntime=surfJMS,Name=surfJMSModule!jms/ShippingRequestQueue,ServerRuntime=surf1,Type=JMSDestinationRuntime", "type":"read" }, "status":200, "timestamp":1334775025, "value":{ "MessagesCurrentCount":0, "MessagesHighCount":1, "MessagesReceivedCount":3 } }The output for the queue monitoring shows that there was a total of 3 messages sent, with a maximum of 1 in the queue (because of a deployed receiver retrieving the messages immediately) and currently 0 message in the queue.











Oracle WebLogic Server 12c Book
Oracle Middleware and Cloud Computing Book