← All dashboards

WebSphere Application Server PMI Metrics Dashboard

Visualize PMI metrics data for your WebSphere Application Server

Revision 3: Included support for cell labels. This functionality has been introduced in and

Starting in WebSphere Application Server and the IBM WebSphere team introduced a new capability where the statistical MBean data gathered by Performance Monitoring Infrastructure (PMI) is collected to produce metrics in Prometheus exposition format. This new capability allows the WebSphere Application Server topology to be monitored effectively using Prometheus and Grafana.

This capability is also currently available as an Interim Fix for WebSphere Application Server See PH24409: Prometheus endpoint for Performance Monitoring Infrastructure (PMI) metrics on Websphere Application Server traditional for more information.

This dashboard leverages the Prometheus formatted metric data to visualize CPU, Memory Heap, Servlets, EJBs, Connection Pool, SIB, Sessions, Threadpool, Garbage Collection, and other JVM metrics of the entire cell. This dashboard has been tested with Grafana  7.3.x and 7.4.x.

##  WebSphere Application Server:

  • Install the metrics.ear found in the <WAS_installation_directory>/installableApps directory onto your application server
  • Enable the desired PMI setting for your servers or use the wsadmin script provided below to enable the exact PMI stats/metrics that the Grafana dashboard uses.
  • Learn more about the WebSphere Performance Monitoring Infrastructure
  • See the full list of Prometheus Metrics


Configure the scrape_configs section of prometheus.yml in one of the following ways:

For metrics on an insecure endpoint (i.e. application security is not enabled):

  - job_name: 'wasCell01'
    scrape_interval: 15s
      - targets: ['localhost:9080']

   For metrics on an secure endpoint using basic authentication  (i.e. application security is enabled):

  - job_name: 'wasCell01-secure'
    scrape_interval: 15s
      - targets: ['localhost:9443']
      username: "<your-username>"
      password: "<your-password>"
      insecure_skip_verify: true
    scheme: "https"

Wsadmin Script to configure the exact PMI stats

Provided below is a Jython script that that will iterate through all your servers and enable the exact PMI stats needed by this Grafana dashboard.

There are a few steps required to run this script:

  1. Find your deployment manager’s node name by copying the node name value in the <Deployment_Manager_Profile_Directory>/logs/AboutThisProfile.txt file
  2. Create the Jython script under <Deployment_Manager_Profile_Directory>/bin/ and name it setPMI.jy
  3. Run the script by invoking : ./wsadmin.sh -f setPMI.jy -lang jython
  4. When prompted, enter the node name from step 1.
  5. When the “done” message appears on the terminal, the script has finished configuring the servers in your cell.

Wsadmin script:

# -*- coding: utf-8 -*-

def main():

    #Enables all specified attributes
    #can be found in <dmgr_home>/logs/AboutThisProfile.txt under Node Name
    mgrName = raw_input("Please enter name of Cell Manager (can be found in <dmgr_home>/logs/AboutThisProfile.txt under Node Name): ")
    customString = [append(), java.lang.Boolean ('true')]
    #Goes through each node
    for node in AdminConfig.list('Node').split():
        nName = AdminConfig.showAttribute(node, 'name')
        #Makes sure to not include the cell manager nodes
        if nName.find(mgrName) < 0:
            for server in AdminControl.queryNames("type=Server,node="+ nName + ",*").split():
                #This obtains the Performance Mbean object.
                #First it gets the MBean name (i.e perfStr)
                #SEcond it obtains the Mbean Object (I.e perfObj)
                processName = AdminControl.getAttribute(server, 'name')
                perfStr = AdminControl.queryNames("type=Perf,process=" + processName + ",node=" + nName + ",*")
                perfObj = AdminControl.makeObjectName(perfStr)

                print("initializing:" + processName + ". From: " + nName)
                init(perfStr, perfObj)
                print("configuring:" + processName + ". From: " + nName)
                invoke(perfStr, perfObj, customString)

#Below is how you would ENABLE or DISABLE specific PMI stats/attributes.
#The attribute IDs/Numbers are derived from: https://www.ibm.com/support/knowledgecenter/en/SSAW57_9.0.5/com.ibm.websphere.nd.multiplatform.doc/ae/rprf_datacounter14.html
def append():
    string ='servletSessionsModule=6,1,2,7'
    return string

def invoke(perfStr, perfObj, customString):
    sigs = ['java.lang.String', 'java.lang.Boolean']
    AdminControl.invoke_jmx (perfObj, 'setCustomSetString', customString, sigs)

#initializes the configuration to 'None'
def init(perfStr, perfObj):
    sigs = ['java.lang.String']
    params = ['none']
    AdminControl.invoke_jmx (perfObj, 'setStatisticSet', params, sigs)

if __name__ == "__main__":

Dashboard revisions



Login or Sign up to write a review

Reviews from the community

Get this dashboard

Data source:


Import the dashboard template:


Download JSON

Docs: Importing dashboards

Downloads: 19,828