|
2019-05-17
ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false
我们可以从https://github.com/prometheus/jmx_exporter获取下对应的jar
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar
下面我们来写dockerfile制作镜像
FROM maven:3.8-openjdk-8 MAINTAINER nieweixing nwx_qdlg@163.com ADD . /opt RUN cd /opt && mvn clean package -Dmaven.test.skip=true RUN mv /opt/target/spring-boot-helloworld-1.0.0-SNAPSHOT.jar /app.jar WORKDIR / RUN apt-get update -y RUN DEBIAN_FRONTEND=noninteractive apt-get install -y wget RUN wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar ADD ./prometheus-jmx-config.yaml /prometheus-jmx-config.yaml ENTRYPOINT java -javaagent:./jmx_prometheus_javaagent-0.13.0.jar=8081:/opt/prometheus-jmx-config.yaml -jar /app.jar
这里我们将agent的包下载写到dockerfile里面,免掉了手动下载,启动命令中指定agent的方式启动JMX Exporter,端口不要和自己应用的监听冲突即可,这里我们应用的监控端口是8080,JMX Exporter的监听端口用的8081。
写好dockerfile后,可以用自动化构建或者手动构建下,生成对应的镜像。
首先用上一步生成的镜像部署deployment
apiVersion: apps/v1 kind: Deployment metadata: labels: k8s-app: prometheus-jvm qcloud-app: prometheus-jvm name: prometheus-jvm namespace: tke-test spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: prometheus-jvm qcloud-app: prometheus-jvm strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: labels: k8s-app: prometheus-jvm qcloud-app: prometheus-jvm spec: containers: - env: - name: PATH value: /usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - name: JAVA_HOME value: /usr/local/openjdk-8 - name: LANG value: C.UTF-8 - name: JAVA_VERSION value: 8u302 - name: MAVEN_HOME value: /usr/share/maven - name: MAVEN_CONFIG value: /root/.m2 image: nwx-test.tencentcloudcr.com/nwx/springboot:springboot-2e7681a104eba7f43b7649645c78517772fbce89 imagePullPolicy: IfNotPresent name: prometheus-jvm resources: limits: cpu: 500m memory: 1Gi requests: cpu: 250m memory: 256Mi securityContext: privileged: false terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30
然后暴露一个service提供下访问,这里需要给service打上label,后续用ServiceMonitor采集监控需要用到
apiVersion: v1 kind: Service metadata: labels: app: jvm name: prometheus-jvm namespace: tke-test spec: externalTrafficPolicy: Cluster ports: - name: 8080-8080-tcp nodePort: 32766 port: 8080 protocol: TCP targetPort: 8080 - name: 8081-8081-tcp-472u7ygjuio nodePort: 32730 port: 8081 protocol: TCP targetPort: 8081 selector: k8s-app: prometheus-jvm qcloud-app: prometheus-jvm sessionAffinity: None type: LoadBalancer
云原生监控默认是有ServiceMonitor 的 CRD,所以我们这里直接用ServiceMonitor采集监控数据即可
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app: jvm name: jvm namespace: tke-test spec: endpoints: - bearerTokenSecret: key: "" interval: 5s port: 8081-8081-tcp-472u7ygjuio namespaceSelector: matchNames: - tke-test selector: matchLabels: app: jvm
我们可以查看下对应的target状态是否为up
直接访问endpoint能查看数据指标,则说明采集成功
这里我们用社区提供的jvm监控面板 JVM dashboard,来监控我们的应用,直接在grafana导入8878模板,具体面板效果如下
如果有部分监控数据不显示,可以根据对应的promsql去thanos query搜一下对应的指标是否存在,有可能是名称不一致导致的。这里根据prometheus搜到的指标名称修改下promsql即可。
编辑:航网科技 来源:腾讯云 本文版权归原作者所有 转载请注明出处
微信扫一扫咨询客服
全国免费服务热线
0755-36300002