博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在k8s集群中,利用prometheus的jmx_exporter进行tomcat的JVM性能监控,并用grafana作前端展示...
阅读量:4364 次
发布时间:2019-06-07

本文共 13963 字,大约阅读时间需要 46 分钟。

查找了很多文档,没有完全达到我要求的,

于是,作了一定的调整,成现在这样。

操作步骤如下:

一,准备好两个文件。

jmx_prometheus_javaagent-0.3.1.jar

jmx_exporter.yml

jmx_exporter.yml作最简单配置如下:

---rules:- pattern: ".*"

二,tomcat的启动项,一直在bin下单独的setenv.sh里操作,新增如下启动选项,将jar包及yaml加入启动选项。

JAVA_OPTS="$JAVA_OPTS -javaagent:/xxx/bin/jmx_prometheus_javaagent-0.3.1.jar=1234:/xxx/bin/jmx_exporter.yml"

三,制作dockerfile时,要将这两个东东也CP到上面指定目录,并EXPOSE一个新的端口。

...COPY --chown=a:a tomcat /xxx/tomcatCOPY --chown=a:a jdk /xxx/jdkCOPY --chown=a:a jmx_prometheus_javaagent-0.3.1.jar /xxx/tomcat/bin/COPY --chown=a:a jmx_exporter.yml /xxx/tomcat/bin/WORKDIR ${CATALINA_HOME}USER aEXPOSE 8080 1234

四,更新prometheus的配置文件configmap,新增一个job。

- job_name: 'tomcat-pods'        tls_config:          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token        kubernetes_sd_configs:        - role: endpoints        relabel_configs:        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape, __meta_kubernetes_service_annotation_prometheus_io_jvm_scrape]          regex: true;true          action: keep        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_app_metrics_patn]          action: replace          target_label: __metrics_path__          regex: (.+)        - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_service_annotation_prometheus_io_app_metrics_port]          action: replace          target_label: __address__          regex: (.+);(.+)        - source_labels: [__meta_kubernetes_namespace]          action: replace          target_label: kubernetes_namespace        - source_labels: [__meta_kubernetes_pod_name]          action: replace          target_label: kubernetes_pod_name

五,在对应的需要监控JVM的应用时,新增一个SERVICE。

apiVersion: v1 kind: Servicemetadata:  labels:    name: xxx  name: xxx  namespace: default  annotations:        prometheus.io/scrape: "true"        prometheus.io/jvm-scrape: "true"        prometheus.io/jvm-port: "1234"        prometheus.io/jvm-path: "/metrics"spec:  ports:  - port: 1234    targetPort: 1234  selector:    name: xxx

六,最后,导入grafana的插件文件。

{"__inputs": [    {      "name": "DS_PROM",      "label": "prom",      "description": "A prometheus datasource with JMX Exporter scraping",      "type": "datasource",      "pluginId": "prometheus",      "pluginName": "Prometheus"    }  ],  "__requires": [    {      "type": "grafana",      "id": "grafana",      "name": "Grafana",      "version": "4.5.0-pre1"    },    {      "type": "panel",      "id": "graph",      "name": "Graph",      "version": ""    },    {      "type": "datasource",      "id": "prometheus",      "name": "Prometheus",      "version": "1.0.0"    }  ],  "annotations": {    "list": []  },  "description": " tomcat JVM Dashboard for JVM metrics with Prometheus / JMX Exporter",  "editable": true,  "gnetId": 3066,  "graphTooltip": 0,  "id": 10,  "iteration": 1544507474291,  "links": [],  "panels": [    {      "aliasColors": {},      "bars": false,      "dashLength": 10,      "dashes": false,      "datasource": "${DS_PROM}",      "fill": 1,      "gridPos": {        "h": 7,        "w": 24,        "x": 0,        "y": 0      },      "id": 2,      "legend": {        "alignAsTable": true,        "avg": true,        "current": true,        "max": true,        "min": true,        "rightSide": true,        "show": true,        "total": false,        "values": true      },      "lines": true,      "linewidth": 1,      "links": [],      "nullPointMode": "null",      "percentage": false,      "pointradius": 5,      "points": false,      "renderer": "flot",      "repeat": null,      "seriesOverrides": [],      "spaceLength": 10,      "stack": false,      "steppedLine": false,      "targets": [        {          "expr": "jvm_memory_bytes_used{kubernetes_pod_name=~\"$kubernetes_pod_name\"}",          "format": "time_series",          "interval": "",          "intervalFactor": 5,          "legendFormat": "{
{area}} memory [{
{instance}}]", "metric": "jvm_memory_bytes_used", "refId": "A", "step": 5 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Memory used", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROM}", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 0, "y": 7 }, "id": 3, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "jvm_threads_current{kubernetes_pod_name=~\"$kubernetes_pod_name\"}", "format": "time_series", "intervalFactor": 5, "legendFormat": "current [{
{instance}}]", "metric": "jvm_threads_current", "refId": "A", "step": 10 }, { "expr": "jvm_threads_daemon{kubernetes_pod_name=~\"$kubernetes_pod_name\"}", "format": "time_series", "intervalFactor": 5, "legendFormat": "daemon [{
{instance}}]", "metric": "jvm_threads_daemon", "refId": "B", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Threads used", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": 0, "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROM}", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 12, "y": 7 }, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "jvm_classes_loaded{kubernetes_pod_name=~\"$kubernetes_pod_name\"}", "format": "time_series", "interval": "", "intervalFactor": 5, "legendFormat": "loaded [{
{instance}}]", "metric": "jvm_classes_loaded", "refId": "A", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Class loading", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": 0, "format": "short", "label": "", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROM}", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 0, "y": 14 }, "id": 5, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "rate(jvm_gc_collection_seconds_sum{kubernetes_pod_name=~\"$kubernetes_pod_name\"}[1m])", "format": "time_series", "interval": "", "intervalFactor": 5, "legendFormat": "{
{gc}} [{
{instance}}]", "metric": "jvm_gc_collection_seconds_sum", "refId": "A", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "GC time / 1 min. rate", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROM}", "fill": 1, "gridPos": { "h": 7, "w": 12, "x": 12, "y": 14 }, "id": 6, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "jvm_gc_collection_seconds_count{kubernetes_pod_name=~\"$kubernetes_pod_name\"}", "format": "time_series", "interval": "", "intervalFactor": 5, "legendFormat": "{
{gc}} [{
{instance}}]", "metric": "", "refId": "A", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "GC count", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": 0, "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "refresh": "30s", "schemaVersion": 16, "style": "dark", "tags": [ "JVM", "prometheus", "jmx_exporter" ], "templating": { "list": [ { "allValue": "", "current": { "tags": [], "text": "All", "value": [ "$__all" ] }, "datasource": "${DS_PROM}", "hide": 0, "includeAll": true, "label": "kubernetes_pod_name", "multi": true, "name": "kubernetes_pod_name", "options": [], "query": "label_values(jvm_memory_bytes_max,kubernetes_pod_name)", "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false } ] }, "time": { "from": "now-30m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ] }, "timezone": "", "title": " tomcat JVM overview - Prometheus", "uid": "PVQFY0Pmz", "version": 2}

 

转载于:https://www.cnblogs.com/aguncn/p/10106453.html

你可能感兴趣的文章
【BZOJ】【1041】【HAOI2008】圆周上的点
查看>>
高并发常见面试题
查看>>
java面向对象中的抽象,类与对象
查看>>
Git学习笔记
查看>>
《Java技术》第二次作业计科1501赵健宇
查看>>
判断线段和直线相交 POJ 3304
查看>>
下拉菜单
查看>>
.net中调用exchange服务器发邮件
查看>>
nginx知识问答
查看>>
JS - 跳转页面
查看>>
显示消息提示对话框(WebForm)
查看>>
分享下自己编译 XBMC 的过程(zhuan)
查看>>
selenium3 + python - cookie定位
查看>>
通过百度地图API获取地址经纬度
查看>>
Map接口
查看>>
【NIO】之IO和NIO的区别
查看>>
for+next()实现数组的遍历及while list each 的使用
查看>>
MySQL中查询获取每个班级成绩前三名的学生信息
查看>>
ubuntu下如何查找某个文件的路径
查看>>
es6常用基础合集
查看>>