去年写过一篇基于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监控的更多相关文章

  1. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

  2. jvm 监控

    jvm监控可视化的有 jconsole .jmc .jvisualvm 其中jvisualvm开启一些监控会导致他自己关闭. 并且jdk下有很多工具可以进行jvm监控, jmap -histo:liv ...

  3. JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...

  4. JVM监控命令详解(转)

    JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...

  5. [java] JVM监控与调优

    原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html   光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...

  6. JVM监控和调优常用命令工具总结

    JVM监控和调优 在Java应用和服务出现莫名的卡顿.CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非 ...

  7. Linux下Java性能监控

    Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun. ...

  8. Kubernetes下的应用监控解决方案

    所谓应用监控,更多的是基于java jvm的监控,因为公司运行的中间件大部分都是基于tomcat,Springboot,SpringCloud,当然也必须支持WebLogic.在Kubernetes现 ...

  9. 无意间做了个 web 版的 JVM 监控端(前后端分离 React+Spring Boot)

    之前写了JConsole.VisualVM 依赖的 JMX 技术,然后放出了一个用纯 JMX 实现的 web 版本的 JConsole 的截图,今天源码来了. 本来就是为了更多的了解 JMX,第一步就 ...

随机推荐

  1. python语法01

    在某.py文件中调用其他.py文件中的内容. 全局变量的使用. 线程的使用. if name == 'main': 的作用 新建两个python脚本文件 f1File.py ""& ...

  2. python数据分析&挖掘,机器学习环境配置

    目录 一.什么是数据分析 1.这里引用网上的定义: 2.数据分析发展与组成 3.特点 二.python数据分析环境及各类常用分析包配置 1.处理的数据类型 2.为什么选择python 三.python ...

  3. STP生成树理解

    1.STP的功能 a. 防止二层环路    b .实现网络冗余备份 2.STP的选择机制 目的:  确定阻塞的端口 STP 交换机的角色: 根交换机,非根交换机 STP的选票:     BPDU Ro ...

  4. 在 React 项目中引入 GG-Editor 编辑可视化流程

    蚂蚁金服数据可视化团队曾经开源了一款G6-Editor,但后来停止了对外支持,学习成本太高 好在后来他们团队的大牛高力结合 React + G6 开源了一个 GG-Editor(其实就是G6-Edit ...

  5. jsTree树插件

    前言 关于树的数据展示,前后用过两个插件,一是zTree,二是jsTree,无论是提供的例子(可下载),还是提供的API在查找时的便捷程度,zTree比jsTree强多了,也很容易上手,所以这里只讲下 ...

  6. 英文DIAMAUND钻石DIAMAUND词汇

    首先谈谈钻石和金刚石的名称.金刚石是一种天然矿物,是钻石的原石.习惯上人们常将加工过的金刚石称为钻石,而未加工过的称为金刚石(当然,有的金刚石不用加工便可应用).钻石是那些达到宝石级别的金刚石晶体切磨 ...

  7. Android Studio 3.5+ 使用androidx的recyclerView

    一 File->project structure->Dependencies: 点击All Dependencies处的加号,选择Library Dependency: 在step1处输 ...

  8. emoji表情多终端适配解决方案

    emoji表情多终端适配解决方案 emoji,也叫 颜表情 是日本在无线通信中所使用的视觉情感符号,由栗田穰崇(Shigetaka Kurita)创作,并在日本网络及手机用户中流行.自苹果公司发布的i ...

  9. 08、启动过程+at+crond+anacron

    [root@li ~]# 加电--BIOS (basic input output system)--以什么设备来启动--/dev/sda -- mbr -- grub.conf --vmlinux ...

  10. 莫烦TensorFlow_07 tensorboard可视化

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt def add_layer(inputs, in_ ...