DEV Community

Hisyam Johan
Hisyam Johan

Posted on • Edited on

7

Monitor Tomcat 9 with Prometheus

Bismillah..

We will configure tomcat server for integration with Prometheus.

Prerequisites:-

  • Tomcat 9
  • Docker
  • Centos 7

Setting up Tomcat to expose metrics
Firstly, we need to download jmx_prometheus_javaagent as jar and place it in /tmp. In this steps, we will be using version 0.16.1.

Second, we need to create file in $CATALINA_BASE/bin named setenv.sh and add this line into the file:-

CATALINA_OPTS="-javaagent:/tmp/jmx_prometheus_javaagent-0.16.1.jar=8088:/tmp/config.yml"
Enter fullscreen mode Exit fullscreen mode

Third, we need to create file name config.yml in /tmp and add this line to the file:-

startDelaySeconds: 0
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
Enter fullscreen mode Exit fullscreen mode

Then, we need to restart Tomcat server and the metrics should be available at http://HOST_IP:8088/metrics

you can verify it by running ps -ef | grep tomcat

Optional
If not available, this could be you are not open port 8088. To do that, you may follow this step to open it.

firewall-cmd --zone=public --add-port=8088/tcp --permanent
firewall-cmd --reload
iptables-save | grep 8088
Enter fullscreen mode Exit fullscreen mode

Configure Prometheus

  1. Create file promethues.yml in /home/$USER. And add this line
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'tomcat'
    static_configs:
      - targets: ['HOST_IP:8088']

Enter fullscreen mode Exit fullscreen mode
  1. Run Prometheus as Docker container
 docker run -d --name=prometheus -p 9090:9090 -v /home/$USER/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.                                                                                                             file=/etc/prometheus/prometheus.yml
Enter fullscreen mode Exit fullscreen mode
  1. Go to http://PROMETHEUS_IP:9090 and go to tab Status->Target. You will see that Tomcat server status.

ref

If you're using Tomcat server as container you may execute this

docker run -d --name=myapp-p 8080:8080 -p 8088:8088 -v ~/<FILE_NAME>.war:/usr/local/tomcat/webapps/<FILE_NAME>.war -v ~/tomcat-metrics-config/setenv.sh:/usr/local/tomcat/bin/setenv.sh -v ~/tomcat-metrics-config:/tmp -v ~/logs/<FILE_NAME>.log:/usr/local/tomcat/bin/<FILE_NAME>.log tomcat:9-jdk8-corretto
# volume persistence for WAR & LOG file are optional
# make sure you placed the files in the correct location 
Enter fullscreen mode Exit fullscreen mode

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay