zoukankan      html  css  js  c++  java
  • 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.0.jar

    Dockerfile

    [root@master jmx]# cat Dockerfile 
    FROM registry.example.com/tomcat:8-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:8-slim .
    
    docker push registry.example.com/tomcatjmx:8-slim
    
    oc import-image tomcatjmx:8-slim --from=registry.example.com/tomcatjmx:8-slim --confirm --insecure=true

    完成后在myproject的image下看到有个tomcatjmx:8-slim

    在service下开放8180端口,修改yaml文件,加入8180端口

        - name: 8180-tcp
          port: 8180
          protocol: TCP
          targetPort: 8180

    然后应用镜像工作基本完成。

    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: 8180-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! 

  • 相关阅读:
    括号匹配
    超级阶梯问题
    进制问题
    rwkj 1423
    next_permutation
    rwkj 1420
    uva-10392-因数分解
    uva-10305-水题-拓扑排序
    uva-10194-排序
    uva-10152-乌龟排序
  • 原文地址:https://www.cnblogs.com/ericnie/p/11431408.html
Copyright © 2011-2022 走看看