Thursday, March 27, 2008

New Open Source WebLogic Monitoring tool

[Originally posted on my old BEA Dev2Dev blog on March 27, 2008]

DomainHealth is an open source server monitoring tool for BEA's WebLogic Application Server. It collects important server runtime statistics over time for all servers in a domain, archives this data into CSV files and provides a simple Web Browser based interface for viewing graphs of statistics.

DomainHealth is designed to have a low overhead on managed servers in terms of performance and is intended to be a 'zero config' tool *.

*(Currently in certain circumstances, some minimal configuration may be required - see the FAQ document on the project's host web site)


The statistics that DomainHealth collects, includes Core Server properties (eg. Open Sockets), JDBC Data Source properties (eg. Average Connection Delay) and JMS Destination properties (eg. Messages Current). The Web HTML based interface that DomainHealth provides, enables an administrator to view line-graphs for specific harvested server properties. The administrator can choose the window of time to view data for, which may go back hours, days, months and even years. Alternatively, an administrators can use his/her own tool of choice (eg. MS Excel, Open Office Spreadsheet) to analyse the contents of the generated CSV files (eg. to generate a graph view of some data from the CSV file loaded into a spreadsheet).


DomainHealth is deployed to the Admin Server of a WebLogic domain in the form of a J2EE Web-Application (WAR), and immediately collects properties from all servers in the domain, via a periodic polling mechanism, once a minute. All CSV files are generated and stored on the file-system of the Admin Server for subsequent viewing via the DomainHealth graphical web interface or for retrieval for offline analysis.

Domain Health is hosted on SourceForge at: http://sourceforge.net/projects/domainhealth
The latest version can be downloaded from the project home page. The home page also contains links to various Help Documents plus an Online Forum for users to get help and provide feedback. To install and run the DomainHealth monitor application, follow these simple steps:
  1. Deploy domainhealth-nn.war to WebLogic, targetted to the Admin Server server of the domain only
  2. Using a Web Browser, navigate to: http://adminhost:port/domainhealth
Supports WebLogic Server 9.x and 10.x.

Some people may ask why the need for this tool given the availability of WLDF in WebLogic. Personally I think these two tools are complimentary and I intend to blog on my reasons for this opinion in the near future.

Soundtrack for today: Auto Rock by Mogwai

8 comments:

Unknown said...

can anyone please clarify "thread pool execute threads"? Does it give the total number of threads in the pool(active+inactive) or just the active threads actually doing work at a given time?

Mahendra Somavarapu. said...

Hi ,

I am getting the below error while deploying this app.
please advice if any changes rqrd.

An error occurred during activation of changes, please see the log for details.
weblogic.application.ModuleException:
[HTTP:101256]The run-as user: weblogic for the servlet: AppStartStopListener for Web application: /domainhealth could not be resolved to a valid user in the system. Verify the user exists. javax.security.auth.login.FailedLoginException: [Security:090304]Authentication Failed: User weblogic javax.security.auth.login.LoginException: [Security:090300]Identity Assertion Failed: User weblogic does not exist

Mahendra Somavarapu. said...

I solved this after I change the weblogic user name in web.xml .

Unknown said...

Dear Paul,

When the war file is deployed on the Admin server in my domain, and is showing active, I am getting the below error.

I changed the user to my admin user id.

Also no graphs are displayed, please help.

====================

#### <[ACTIVE] ExecuteThread: '10' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1291058833603> <[weblogic.servlet.internal.WebAppServletContext@b799cf - appName: 'domainhealth-09', name: 'domainhealth-09.war', context-path: '/domainhealth'] Root cause of ServletException.
java.lang.NoClassDefFoundError
at domainhealth.frontend.graphics.JFreeChartGraphImpl.writeGraphImage(JFreeChartGraphImpl.java:97)
at domainhealth.frontend.display.LineChartImageGeneratorServlet.processs(LineChartImageGeneratorServlet.java:169)
at domainhealth.frontend.display.LineChartImageGeneratorServlet.doGet(LineChartImageGeneratorServlet.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3244)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2010)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1916)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

Mahendra Somavarapu. said...

Pavan,


Seems you deployed application with context domainhealth-09.

But you are access wrong contxt.
domainhealth.

Try checking the URL Context /domainhealth-09

togotutor said...

Hey Paul, I have created a custom tool to get actual JMS message from the JMS destination. Which provides the following details;
on a web based portal. You can email me your phone number at togotutor@gmail.com, so we can discuss it If you want to integrate it to domain health.


JMS Message Count ============>: 1
Message State ================>: 'visible'
Message ID: ID:<577333.1334082856847.0> Delivery Mode: PERSISTENT
Timestamp: Tue Apr 10 14:34:16 EDT 2012 Expiration: Tue Apr 10 14:34:16 EDT 2012
Priority: 4 Redelivered: false
DeliveryTime: None ReDeliveryLimit: -1
Properties:
Key | Value | Type
JMSXDeliveryCount 0 Integer
Message Body Text: cdfddddsddfsdfsdfsdf

Arun said...

Hi Paul,

This is really good stuff to keep track of historical data on the server stats.

Thanks for developing it.

Appreciate your effort.

cheers,
Arun

Stan Kirchner said...

Pretty impressive for a free tool .