一、Java 应用接入 prometheus jmx exporter
1.1 下载 prometheus jmx exporter
下载地址:https://github.com/prometheus/jmx_exporter/releases
1.2 jar 应用接入 prometheus jmx exporter
java -javaagent:jmx_prometheus_javaagent-0.18.0.jar=12345:config.yaml -jar yourJar.jar
- mx_prometheus_javaagent-0.18.0.jar : 是Exporter包所在路径;
- 12345 :Exporter 暴露HTTP服务端口;
- config.yaml :Exporter 配置文件所在路径
1.2.1 一个最小化的 config.yaml:
hostPort: localhost:9999
rules:
- pattern: ".*"
常用yaml示例:https://github.com/prometheus/jmx_exporter/tree/main/example_configs
1.2.2 查看监控数据
访问 http://localhost:12345/metrics 查看监控数据
1.3 Tomcat 接入 prometheus jmx exporter
1.3.1 prometheus jmx export 准备
在 {CATALINA_HOME} 下新建 prometheus-exporter 目录,将 jmx_prometheus_javaagent-0.18.0.jar 和 tomcat.yml 放到此目录下
1.3.2 {CATALINA_HOME}/bin/catalina.sh 中添加 JVM 参数
PROMETHEUS_JMX_EXPORTER_OPTS="-javaagent:../prometheus-exporter/jmx_prometheus_javaagent-0.18.0.jar=12345:../prometheus-exporter/tomcat.yml"
JAVA_OPTS="$JAVA_OPTS $PROMETHEUS_JMX_EXPORTER_OPTS"
1.3.3 启动Tomcat
cd ${CATALINA_HOME}
./startup.sh
1.3.4 访问prometheus jmx exporter HTTP服务获取监控数据
二、prometheus 部署
2.1 docker 启动 prometheus
#!/bin/bash
run_id=`docker ps | grep "prometheus" | awk '{print $1}'`
run_name=`docker ps | grep "prometheus" | awk '{print $12}'`
if [ -n "$run_id" ]
then
echo "docker $run_name is running, exit shell"
exit 0
fi
c_id=`docker ps -a | grep "prometheus" | awk '{print $1}'`
if [ -n "$c_id" ]
then
echo "restarting prometheus container ..., port: 9090"
docker start $c_id
echo "restarting prometheus container ..., port: 9090"
else
echo "starting prometheus container ..., port: 9090"
docker run --name prometheus \
-d \
-p 9090:9090 \
-v /Users/yangdejun/Documents/apps/docker-apps/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
echo "startted prometheus container ..., port: 9090"
fi
2.2 访问prometheus
2.3 修改 prometheus.yml 配置扫描 prometheus jmx exporter
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 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"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
# 添加扫描目标
- job_name: "Tomcat"
static_configs:
- targets: ["192.168.1.10:12345"]
2.4 重启 prometheus 和 Java 应用
docker restart prometheus
重启Java应用后访问prometheus即可看到应用已经接入到prometheus
三、Grafana 部署
3.1 docker 启动 Grafana
#!/bin/bash
run_id=`docker ps | grep "grafana" | awk '{print $1}'`
run_name=`docker ps | grep "grafana" | awk '{print $12}'`
if [ -n "$run_id" ]
then
echo "docker $run_name is running, exit shell"
exit 0
fi
c_id=`docker ps -a | grep "grafana" | awk '{print $1}'`
if [ -n "$c_id" ]
then
echo "restarting grafana container ..., port: 3000"
docker start $c_id
echo "restarting grafana container ..., port: 3000"
else
echo "starting grafana container ..., port: 3000"
docker run --name grafana \
-d \
-p 3000:3000 \
grafana/grafana
echo "startted grafana container ..., port: 3000"
fi
3.2 访问Grafana
http://localhost:3000
默认用户:admin
默认密码:admin
3.3 添加数据源
Configuration -> Data sources -> Add data source 选择 Prometheus
3.4 添加dashboard
Dashboards -> Import