prometheus jmx exporter + prometheus + grafana

一、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 查看监控数据
image.png

1.3 Tomcat 接入 prometheus jmx exporter

1.3.1 prometheus jmx export 准备

在 {CATALINA_HOME} 下新建 prometheus-exporter 目录,将 jmx_prometheus_javaagent-0.18.0.jartomcat.yml 放到此目录下
image.png

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"

image.png

1.3.3 启动Tomcat

cd ${CATALINA_HOME}
./startup.sh

1.3.4 访问prometheus jmx exporter HTTP服务获取监控数据

http://ip:12345/metrics
image.png

二、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

http://localhost:9090
image.png

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
image.png

三、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
image.png

3.3 添加数据源

Configuration -> Data sources -> Add data source 选择 Prometheus
image.png
image.png
image.png
image.png
image.png

3.4 添加dashboard

Dashboards -> Import
image.png
image.png
image.png
image.png

3.5 官方 Dashboard 模板

https://grafana.com/grafana/dashboards/
image.png
image.png

猜你喜欢

转载自blog.csdn.net/dejunyang/article/details/129903393