实战案例(prometheus监控Tomcat(JMX))

古人学问无遗力,少壮工夫老始成。这篇文章主要讲述实战案例:prometheus监控Tomcat(JMX)相关的知识,希望能为你提供帮助。
prometheus监控JMX需要向Tomcat内添加jmx_prometheus_javaagent包,并暴露一个端口给外部访问来获取数据。
本文采用0.3.1版本:??jmx_prometheus_javaagent-0.3.1.jar??
Tomcat采用docker部署,生产环境建议做成镜像用k8s启动。
?1、前置准备
本文采用docker方式部署Tomcat
1.1、创建install_tomcat脚本

# cat install_tomcat.sh
docker run -d \\
--name tomcat-1 \\
-v /root/manifests/jvm/prom-jvm-demo:/jmx-exporter \\
-e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \\
-p 6060:6060 \\
-p 8080:8080 \\
tomcat:latest

1.2、创建prometheus-serviceMonitorJvm.yaml,用于向kube-prometheus内添加serviceMonitor
# cat prometheus-serviceMonitorJvm.yaml
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: jmx-metrics
namespace: monitoring
labels:
k8s-apps: jmx-metrics
spec:
jobLabel: metrics
selector:
matchLabels:
metrics: jmx-metrics # 根据label中有metrics: jmx-metrics 的service
namespaceSelector:
any: true# 所有名称空间
endpoints:
- port: http-metrics # 拉取的端口和下边对应
interval: 15s # 拉取metric的时间间隔

---
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrapetrue: "true"
labels:
metrics: jmx-metrics# 和上边一致
name: kube-jmx
namespace: monitoring
spec:
ports:
- name: http-metrics
port: 6060# service的端口,供上边获取数据
protocol: TCP
targetPort: 6060# 绑定宿主机的端口,也就是jmx_prometheus_javaagent的端口
#selector:# 因为是手动指定endpoint所以不能添加。否则过一段时间查看service的endpoint会为空
#k8s-app: kube-jmx# 如果是k8s部署的就需要写标签,去绑定tomcat pod的service
---
apiVersion: v1
kind: Endpoints
metadata:
name: kube-jmx
namespace: monitoring
subsets:
- addresses:
- ip: 宿主机IP
ports:
- name: http-metrics
port: 6060# jmx_prometheus_javaagent的端口
protocol: TCP

1.3、在当前目录创建prom-jvm-demo,下载jmx_prometheus_javaagent至prom-jvm-demo目录下
# ls
docker.yamlprometheus-serviceMonitorJvm.yaml
# mkdir prom-jvm-demo
# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O prom-jvm-demo/jmx_prometheus_javaagent-0.3.1.jar

1.4、进入prom-jvm-demo目录内,创建jmx_prometheus_javaagent的配置文件simple-config.yml
# cd prom-jvm-demo
# cat simple-config.yml

---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
rules:
- pattern: java.lang< type=OperatingSystem> < > ((?!process_cpu_time)\\w+):
name: os_$1
type: GAUGE
attrNameSnakeCase: true

2、启动Tomcat
2.1、执行install_tomcat.sh
# sh install_tomcat.sh

【实战案例(prometheus监控Tomcat(JMX))】2.2、测试访问6060端口
# curl 127.0.0.1:6060
# HELP jmx_config_reload_success_total Number of times configuration have successfully been reloaded.
# TYPE jmx_config_reload_success_total counter
jmx_config_reload_success_total 0.0
# HELP os_free_swap_space_size FreeSwapSpaceSize (java.lang< type=OperatingSystem> < > FreeSwapSpaceSize)
# TYPE os_free_swap_space_size gauge
os_free_swap_space_size 0.0
# HELP os_free_physical_memory_size FreePhysicalMemorySize (java.lang< type=OperatingSystem> < > FreePhysicalMemorySize)
# TYPE os

    推荐阅读