OpenShift下的JVM监控
去年写过一篇基于jmx监控的文章,这次在Openshift上实现,发现确实不少变化。主要重点问题在
1. prometheus jmx exporter的改进,不再需要运行一个独立的进程,不需要把数据输入到influxdb,
而是直接提供了prometheus数据。链接在
https://github.com/prometheus/jmx_exporter
2. OpenShift上采用prometheus Operator架构,内置了集群的监控指标,在此基础上如何集成客户化的监控数据。
接下来我们就看看具体的实现过程。
1. 针对应用镜像的修改
下载agent的jmx_prometheus_javaagent-0.12.0.jar包,具体链接在
https://github.com/prometheus/jmx_exporter
以tomcat为例,构建一个镜像
[root@master jmx]# ls
catalina.sh config.yaml Dockerfile jmx_prometheus_javaagent-0.12..jar
Dockerfile
[root@master jmx]# cat Dockerfile
FROM registry.example.com/tomcat:-slim COPY *.* /usr/local/tomcat/bin/ CMD ["catalina.sh", "run"]
catalina.sh 是从镜像中拷贝出来的,修改了如下地方
CLASSPATH=/usr/local/tomcat/bin JAVA_OPTS="-javaagent:/usr/local/tomcat/bin/jmx_prometheus_javaagent-0.12.0.jar=8180:/usr/local/tomcat/bin/config.yaml $JAVA_OPTS $JSSE_OPTS"
因为缺省的8080和tomcat启动端口冲突,所以修改为8180
config.yaml, 最简单的配置,什么信息都获取
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
然后构建部署
docker build -t registry.example.com/tomcatjmx:-slim . docker push registry.example.com/tomcatjmx:-slim oc import-image tomcatjmx:-slim --from=registry.example.com/tomcatjmx:-slim --confirm --insecure=true
完成后在myproject的image下看到有个tomcatjmx:8-slim

在service下开放8180端口,修改yaml文件,加入8180端口
- name: -tcp
port:
protocol: TCP
targetPort:
然后应用镜像工作基本完成。
2.prometheus 添加target
OpenShift的 prometheus采用Operator进行部署,基于servicemonitor的模式对服务进行监控。

在OpenShift环境中内置了servicemonitor
[root@master jmx]# oc -n openshift-monitoring get servicemonitor
NAME AGE
alertmanager 175d
cluster-monitoring-operator 175d
etcd 6d
kube-apiserver 175d
kube-controllers 175d
kube-state-metrics 175d
kubelet 175d
node-exporter 175d
prometheus 175d
prometheus-operator 175d
service monitor通过namespace确定工作范围,同时基于Label对服务(Service)进行监控

我们如果需要对自己的服务进行监控,就需要建立一个客户化的Service monitor
[root@master ~]# cat myservicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: tomcatmonitor
labels:
k8s-app: tomcatmonitor
namespace: openshift-monitoring
spec:
namespaceSelector:
any: true
selector:
matchLabels:
app: tomcatjmx
endpoints:
- interval: 30s
path: /metrics
port: -tcp
比较核心的地方是selector, 决定对哪个服务进行监控,另外就是endpoint,针对哪个port获取指标。
创建后可以通过下面命令看到
[root@master ~]# oc -n openshift-monitoring get servicemonitor
NAME AGE
alertmanager 175d
cluster-monitoring-operator 175d
etcd 6d
kube-apiserver 175d
kube-controllers 175d
kube-state-metrics 175d
kubelet 175d
node-exporter 175d
prometheus 175d
prometheus-operator 175d
tomcatmonitor 1h
但这时候在prometheus的target上是看不到我们tomcatmonitor的,因为缺少了授权工作,添加RBAC的授权
oc adm policy add-cluster-role-to-user view system:serviceaccount:openshift-monitoring:prometheus-k8s oc adm policy add-role-to-user view system:serviceaccount:openshift-monitoring:prometheus-k8s -n myproject
完成后,在prometheus target界面上看到tomcatjmx服务已经启动

转去指标界面看到一系列指标

3. 集成grafana
这部分工作比较耗时,主要是要找到合适的图标导入,
我在
https://grafana.com/grafana/dashboards?search=jmx
上找了好几个,最后发现 https://grafana.com/grafana/dashboards/8878
比较合适。导入后展现结果,好处是可以直接选择project,service,然后选择相应的pod


heap和non-heap的指标

GC time

改进:
可以让servicemonitor监听所有打了jmx: jvm标签的服务。这样只要在服务上加上标签,就可以被监控。
至此工作完成. Enjoy!
OpenShift下的JVM监控的更多相关文章
- Java系列笔记(4) - JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...
- jvm 监控
jvm监控可视化的有 jconsole .jmc .jvisualvm 其中jvisualvm开启一些监控会导致他自己关闭. 并且jdk下有很多工具可以进行jvm监控, jmap -histo:liv ...
- JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...
- JVM监控命令详解(转)
JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...
- [java] JVM监控与调优
原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...
- JVM监控和调优常用命令工具总结
JVM监控和调优 在Java应用和服务出现莫名的卡顿.CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非 ...
- Linux下Java性能监控
Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun. ...
- Kubernetes下的应用监控解决方案
所谓应用监控,更多的是基于java jvm的监控,因为公司运行的中间件大部分都是基于tomcat,Springboot,SpringCloud,当然也必须支持WebLogic.在Kubernetes现 ...
- 无意间做了个 web 版的 JVM 监控端(前后端分离 React+Spring Boot)
之前写了JConsole.VisualVM 依赖的 JMX 技术,然后放出了一个用纯 JMX 实现的 web 版本的 JConsole 的截图,今天源码来了. 本来就是为了更多的了解 JMX,第一步就 ...
随机推荐
- WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用
背景介绍 最近使用WebApi开发一套对外接口,主要是数据的外送以及结果回传,接口没什么难度,采用WebApi+EF的架构简单创建一个模板工程,使用template生成一套WebApi接口,去掉put ...
- Unable to connect to web server 'IIS Express'(无法连接到Web服务器“IIS Express”)的解决方式-Jexus Manager
在运行微软示例工程eShopOnWeb时候, 在经过一段时间再运行启动报Error "Unable to connect to web server 'IIS Express'" ...
- Linux目录和文件——管理目录和文件的命令
Linux目录和文件——管理目录和文件的命令 摘要:本文主要学习了Linux系统中关于目录和文件的操作. cd命令 cd命令用来切换工作目录,是Change Directory的缩写. 基本语法 cd ...
- JVM指令手册
JVM指令大全 常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null null值入栈. 0x02 iconst_m1 -1(int)值入栈. 0x03 ...
- BootStrap-treeview 参考
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...
- 「白帽黑客成长记」Windows提权基本原理(下)
上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...
- ANDROID培训准备资料之四大组件的简单介绍
Android四大组件是一个android app 最基本的组成部分,这篇博客主要给大家简单的介绍一下四种组件 (1)Activities (2)Services (3)BroadcastReceiv ...
- idea基本使用
1.java项目导jar包 File->Project Structure->Modules->Dependencies->+ 2. 鼠标放在方法上一段时间后,显示该方法的注释 ...
- java基础类型的byte为长度
java基础类型的字节长度: 类型 byte数/位数 最大/最小值 byte 1/8 127/-128 short 2/16 32767/-32768 int 4/32 2147483647/-214 ...
- python关于SSL的认证--pycurl模块使用
今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了pycurl模块,才成功实现了证书认证,教程链接:http://blog.cs ...