1. Prometheus 监控Java服务
基于第三方exporter实现对目的服务的监控
监控tomcat的活跃连接数,堆栈内存等信息:
tomcat_connections_active_total{name="http-nio-8080",} 2.0
jvm_memory_bytes_used{area="heap",} 2.4451216E7
2. 自定义镜像
FROM tomcat:8.5.73
ADD server.xml /usr/local/tomcat/conf/server.xml
RUN mkdir /data/tomcat/webapps -p
ADD myapp /data/tomcat/webapps/myapp
ADD metrics.war /data/tomcat/webapps
ADD simpleclient-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_common-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_hotspot-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_servlet-0.8.0.jar /usr/local/tomcat/lib/
ADD tomcat_exporter_client-0.0.12.jar /usr/local/tomcat/lib/
EXPOSE 8080 8443 8009
构建镜像
#!/bin/bash
docker build -t harbor.intra.com/wework/tomcat-app1:v1 .
docker push harbor.intra.com/wework/tomcat-app1:v1
启动镜像看一下是否正常
docker run --rm -it -p 8801:8080 harbor.intra.com/wework/tomcat-app1:v1
3. 用Pod方式运行
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
namespace: default
spec:
selector:
matchLabels:
app: tomcat
replicas: 1 # tells deployment to run 2 pods matching the template
template: # create pods using pod definition in this template
metadata:
labels:
app: tomcat
annotations:
prometheus.io/scrape: 'true'
spec:
containers:
- name: tomcat
image: harbor.intra.com/wework/tomcat-app1:v1
ports:
- containerPort: 8080
securityContext:
privileged: true
---
kind: Service
apiVersion: v1
metadata:
name: tomcat-service
spec:
selector:
app: tomcat
ports:
- nodePort: 31080
port: 80
protocol: TCP
targetPort: 8080
type: NodePort
部署
kubectl apply -f tomcat-deploy.yaml
先测试是否可以打开nodeport的metrics页面
prometheus添加对nodeport的监控
- job_name: "k8s-tomcat-31080"
metrics_path: /metrics
static_configs:
- targets: ["192.168.31.113:31080"]
重启prometheus后就能在prometheus中看到tomcat的信息
grafana导入