WebJET CMS includes a built-in Server Monitoring application (accessible under Overview in the administration) and a lightweight HTTP endpoint for external monitoring tools. This page covers what each monitoring feature does, how to configure it, and how to diagnose performance problems.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/webjetcms/webjetcms/llms.txt
Use this file to discover all available pages before exploring further.
Server monitoring application
The Server Monitoring application provides three categories of data.Current values
Always available — no configuration required. Shows current server load, memory usage, and the number of active database connections.Recorded historical values
Enable by settingserverMonitoringEnable=true. WebJET then records memory, sessions, cache, and database connections to the monitoring table every 30 seconds. You can view the historical trend in the Recorded values tab.
Application, web page, and SQL statistics
Application and web page statistics (serverMonitoringEnablePerformance)
Application and web page statistics (serverMonitoringEnablePerformance)
Set
serverMonitoringEnablePerformance=true to enable two additional tabs:- Applications — execution count, average time, cache hit count, and slowest execution per application component.
- WEB pages — view count, average view time, and fastest/slowest page load per URL.
SQL query statistics (serverMonitoringEnableJPA)
SQL query statistics (serverMonitoringEnableJPA)
Set
serverMonitoringEnableJPA=true to enable the SQL queries tab, which shows each JPA-managed query’s execution count, average time, and fastest/slowest execution alongside the SQL text.This option has a higher memory cost than serverMonitoringEnablePerformance. A restart is required after changing this variable.Cluster node selection
The Applications, WEB pages, and SQL queries tabs all share node-selection logic. A dropdown in the page header lets you switch between the current node (data read from local memory) and other cluster nodes (data read from thecluster_monitoring database table).
For nodes other than the current one, data retrieval works as follows:
Request fresh data
WebJET writes a request record to
cluster_refresher. The target node picks this up on its next cycle (interval set by clusterRefreshTimeout) and writes its current data to cluster_monitoring.Retrieval can take up to the full
clusterRefreshTimeout interval. This is expected behaviour.Remote monitoring endpoint
WebJET exposes a health-check endpoint at:| HTTP status | Meaning |
|---|---|
200 OK | All checks passed; response body is OK |
500 Internal Server Error | One or more checks failed; response body contains the reason |
- WebJET initialisation status (responds
NOT INITIALISEDif not ready,TOO SHORT AFTER STARTduring preheat) - Database availability — runs
SELECT title FROM documents WHERE doc_id=?against the document ID set inmonitorTestDocId - Template availability — at least 3 templates must be initialised
- Statistics write queue — alerts with
STAT BUFFER SUSPICIONif the queue exceedsstatBufferSuspicionThreshold(default 1000)
monitorMaintenanceMode=true to manually switch WebJET to service mode. The endpoint will then return UNAVAILABLE, which you can use to safely remove a node from a load balancer rotation during maintenance.
Allowed IP addresses
Only requests from IPs inserverMonitoringEnableIPs receive a valid response. The default list is:
Configuration variables reference
Monitoring enable/disable
Monitoring enable/disable
| Variable | Default | Description |
|---|---|---|
serverMonitoringEnable | false | Records server metrics to the monitoring table every 30 seconds |
serverMonitoringEnablePerformance | false | Enables application and web page execution time statistics |
serverMonitoringEnableJPA | false | Enables JPA SQL query execution time statistics (higher memory cost) |
appendQueryStringWhenMonitoringDocuments | — | Captures SQL ? parameters during document monitoring |
Endpoint and cluster settings
Endpoint and cluster settings
| Variable | Default | Description |
|---|---|---|
serverMonitoringEnableIPs | 127.0.0.1,192.168.,10.,62.65.161.,85.248.107.,195.168.35. | IPs allowed to call monitor.jsp |
monitorTestDocId | 1 | Document ID used for the database availability check |
monitoringPreheatTime | 0 | Seconds after startup during which monitor.jsp returns unavailability (allows cache warm-up before adding the node to the cluster) |
monitorMaintenanceMode | false | Set to true to put the node into maintenance mode |
monitoringEnableCountUsersOnAllNodes | true | Set to false if public cluster nodes cannot write to _conf_/webjet_conf |
clusterRefreshTimeout | — | Interval in seconds between cluster node data refreshes |
Performance diagnostics
Diagnosing a slow page
To profile the execution time of individual applications embedded in a specific page, append?_writePerfStat=true to its URL. For example:
PerfStat: comments into the HTML output. View the page source and search for PerfStat: to find them. The format is:
?_disableCache=true to force uncached execution if you suspect a caching issue.
Total page generation time
Insert the following into your page template footer to output the full page generation time as an HTML comment:onlyForAdmin=true to show this only when an administrator is logged in.
Database and file system speed tests
Two diagnostic scripts are available from the administration. Access requires update rights.| Script | What it measures |
|---|---|
/admin/update/dbspeedtest.jsp | Database read speed. Compare per item values across environments. |
/admin/update/fsspeedtest.jsp | File system listing speed. Useful when using a network file system. |
Cache management
Web page caching
Enable page caching on the Basic tab of individual web pages to prevent repeated database lookups for page content. Recommended for your highest-traffic pages (see Statistics → Top pages).Application caching
Applications can be cached using the Buffer time field in their settings, or by adding, cacheMinutes=xxx to the !INCLUDE(...) directive in the page HTML. For example:
Browser caching (static files)
Control browser-side caching of static assets with:| Variable | Default | Description |
|---|---|---|
cacheStaticContentSeconds | 300 | Cache-Control max-age in seconds |
cacheStaticContentSuffixes | .gif,.jpg,.png,.swf,.css,.js,.woff,.svg,.woff2 | File extensions that receive a Cache-Control header |
Cache behaviour for administrators
When an administrator is logged in, the application cache is bypassed so they always see current content. To change this behaviour (for example, on an intranet where all users authenticate as administrators), setcacheStaticContentForAdmin=true.
Search engine load
Search engine crawlers and AI bots can generate significant traffic. Their requests may not appear in Google Analytics but are visible in WebJET Statistics. Control bot behaviour via/files/robots.txt (WebJET serves this file at /robots.txt if present, otherwise generates a default).
Other performance settings
| Variable | Description |
|---|---|
disableReverseDns=true | Disables reverse DNS lookup of visitor IPs, which can add several seconds of latency when a DNS server is unavailable |
statMode=none | Temporarily disables statistics write operations during high-traffic periods or performance investigations (default value is new) |
Log files and log levels
Viewing log files
Navigate to Audit → Log files to see a list of all log files and their storage path. Click a filename to open its contents. The viewer supports filtering by regular expression or plain text search. Log files are read-only in the administration. To modify or rotate them, access the file system directly.Adjusting log levels
Navigate to Audit → Logging levels to manage the log level per Java package without restarting the server. The table always contains a Main logging level row, controlled by thelogLevel configuration variable. All other rows are controlled by the logLevels variable, which holds one package-level entry per line:
The
NORMAL value is only valid for the main logging level. All other standard log levels (DEBUG, INFO, WARN, ERROR) are available for individual packages.In-memory log viewer
Navigate to Audit → Latest logs to view the most recent log entries without file system access. This viewer shows entries captured by theInMemoryLoggerAppender — it does not show output written to System.out or System.err.
Cluster support is included: you can request recent logs from another node.
| Variable | Default | Description |
|---|---|---|
loggingInMemoryEnabled | true | Enable or disable in-memory log storage |
loggingInMemoryQueueSize | 200 | Maximum number of entries held in memory — keep this low to limit memory use |
logback.xml must include the IN_MEMORY appender:
Audit notifications
Navigate to Audit → Notification list to configure email alerts for specific audit event types. Recommended notifications to set up:XSS— detected cross-site scripting attemptsSQLERROR— database errorsCONF_UPDATE/CONF_DELETE— configuration variable changesPROP_UPDATE/PROP_DELETE— translation key changes (JavaScript code can be embedded via translation keys)
auditDefaultSenderName and auditDefaultSenderEmail.
Restarting the application
Navigate to Settings → Restart to trigger a soft restart from within WebJET. The restart runs on the server side and depends on Tomcat havingreloadable="true" set for the application context in server.xml:
