暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用prometheus监控java应用

开发架构二三事 2019-09-03
1396


jvm进程

  1. java相关的exporter和插件见:https://github.com/prometheus/clientjava 在idea的vm options中加上:-javaagent:./lib/jmxprometheusjavaagent-0.12.0.jar=192.168.1.208:6060:./config/jmxexporter.yaml

  2. jmxexporter tomcat: 修改catalina.sh里面的JAVAOPTS增加jvm参数的地主添加:-javaagent:./lib/jmxprometheusjavaagent-0.12.0.jar=192.168.1.208:6060:./config/tomcat.yaml 配置模板:https://github.com/prometheus/jmxexporter/blob/master/exampleconfigs/tomcat.yml

其他的example有:

httpserversampleconfig.yml:

tomcat 安装步骤:

  • 下载exporter

  1. wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

  • 修改tomcat server.xml

  1. <?xml version='1.0' encoding='utf-8'?>

  2. <!-- 把此端口改成 -1 ,避免启动多个 tomcat 实例时端口冲突,但是停止实例只能通过 kill -9 "tomcat pid" 命令,无法使用 shutdown.sh -->

  3. <Server port="-1" shutdown="SHUTDOWN">

  4. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

  5. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  6. <Listener className="org.apache.catalina.core.JasperListener" />

  7. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  8. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  9. <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />


  10. <GlobalNamingResources>

  11. <Resource name="UserDatabase" auth="Container"

  12. type="org.apache.catalina.UserDatabase"

  13. description="User database that can be updated and saved"

  14. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

  15. pathname="conf/tomcat-users.xml" />

  16. </GlobalNamingResources>


  17. <Service name="Catalina">

  18. <!-- 把此端口改成 25013,不同的实例监听在不同的端口,避免启动多个 tomcat 实例时端口冲突 -->

  19. <Connector port="25013" protocol="HTTP/1.1"

  20. connectionTimeout="20000"

  21. redirectPort="8443" />

  22. <!-- 没有用到 AJP 连接方式,所以注释掉此行,不监听 8009 端口 -->

  23. <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

  24. <Engine name="Catalina" defaultHost="localhost">


  25. <Realm className="org.apache.catalina.realm.LockOutRealm">

  26. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

  27. resourceName="UserDatabase"/>

  28. </Realm>


  29. <Host name="localhost" appBase="webapps"

  30. unpackWARs="true" autoDeploy="true">

  31. <Context path="/oss" docBase="tx-web-oss" reloadable="true"/>


  32. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

  33. prefix="localhost_access_log." suffix=".txt"

  34. pattern="%h %l %u %t &quot;%r&quot; %s %b" />


  35. </Host>

  36. </Engine>

  37. </Service>

  38. </Server>

  • 配置 jmx exporter tomcat.yml:

  1. ---

  2. lowercaseOutputLabelNames: true

  3. lowercaseOutputName: true

  4. rules:

  5. - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'

  6. name: tomcat_$3_total

  7. labels:

  8. port: "$2"

  9. protocol: "$1"

  10. help: Tomcat global $3

  11. type: COUNTER

  12. - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount):'

  13. name: tomcat_servlet_$3_total

  14. labels:

  15. module: "$1"

  16. servlet: "$2"

  17. help: Tomcat servlet $3 total

  18. type: COUNTER

  19. - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'

  20. name: tomcat_threadpool_$3

  21. labels:

  22. port: "$2"

  23. protocol: "$1"

  24. help: Tomcat threadpool $3

  25. type: GAUGE

  26. - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'

  27. name: tomcat_session_$3_total

  28. labels:

  29. context: "$2"

  30. host: "$1"

  31. help: Tomcat session $3 total

  32. type: COUNTER

  • 配置 tomcat catalina.sh,让 jmx_exporter 跟 tomcat 一起启动

  1. JAVA_OPTS="-javaagent:/work1/soft/monitor/jmx_prometheus_javaagent-0.3.1.jar=30013:/work1/soft/monitor/tomcat.yml"

具体如下:

  1. ##JDK PATH

  2. export JAVA_HOME=/usr/java/jdk1.8.0_73

  3. export PATH=$JAVA_HOME/bin:$PATH

  4. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


  5. JAVA_OPTS="-Dfile.encoding=utf-8 -javaagent:/work1/soft/monitor/jmx_prometheus_javaagent-0.3.1.jar=30013:/work1/soft/monitor/tomcat.yml"


  6. # OS specific support. $var _must_ be set to either true or false.

  7. cygwin=false

  8. darwin=false

  9. os400=false

  10. hpux=false

  11. case "`uname`" in

  • 在prometheus.yml中添加:

  1. - job_name: 'jmx_tomcat'

  2. static_configs:

  3. - targets: ['192.168.1.137:30013']

  4. labels:

  5. instance: '137-info'

  6. - targets: ['192.168.1.138:30013']

  7. labels:

  8. instance: '138-admin'

  9. - targets: ['192.168.1.139:30014']

  10. labels:

  11. instance: '139-user'

  • http://192.168.1.163:9090/targets: 

  • 使用https://grafana.com/dashboards/8563模板,添加job名称,导入 grafana 中,可以点右上方设置按钮对模板信息进行修改

  • 结果: 

注意,这里没有需要添加工程名的要求,但是下面的springboot方式需要注意工程名

  1. jar包的详细说明和下载地址:https://github.com/prometheus/jmx_exporter

    2. http://192.168.1.208:6060 可以看到metrics的信息。

   3.prometheus.yml中添加如下信息:

  1. - job_name: 'jmx'

  2. static_configs:

  3. - targets: ['192.168.1.208:6060']

  4. labels:

  5. instance: '192.168.1.208'

4.grafana界面上添加dashboard 使用的是https://grafana.com/grafana/dashboards/3457

8563也很不错,可以直接添加job name:https://grafana.com/grafana/dashboards/8563。

参考:https://blog.csdn.net/weixin_34413103/article/details/88716872


  1. 界面如下:



  2. docker布署 参考:https://blog.csdn.net/weixin_34413103/article/details/88716872


用jmxprometheusjavaagent-0.12.0.jar监控springboot程序

如果使用的不是tomcat容器,可以使用上文提到的httpserversampleconfig.yml或者自定义一个yml,如果使用的是tomcat容器,可以使用上面的tomcat.yml。在idea的vm options中添加:

  1. -javaagent:./lib/jmx_prometheus_javaagent-0.12.0.jar=192.168.1.208:6060:./config/tomcat.yml

jar包和yml文件需要提前放入指定目录中。

直接cmd启动:

  1. java -javaagent:./jmx_prometheus_javaagent-0.12.0.jar=192.168.1.208:6060:./tomcat.yml -jar Market.jar

springboot2

springboot2的Micrometer:Micrometer 是一款监控指标的度量类库,可以让你在没有供应商锁定的情况下对 JVM 的应用程序代码进行调整。Spring Boot 2.0 增强了对 Micrometer 的集成,不再提供自己的指标 API。依靠 micrometer.io 来满足所有应用程序监视需求。

Micrometer 包括尺寸指标的支持,当与尺寸监测系统配对时,尺寸指标可以有效访问特定的指定度量标准,并且可以在其尺寸范围内向下钻取。

指标可以输出到各种系统和开箱即用的 Spring Boot 2.0,为 Atlas、Datadog、Ganglia、Graphite、Influx、JMX、New Relic、Prometheus、SignalFx、StatsD 和 Wavefront 提供支持,另外还可以使用简单的内存中度量标准。

集成后提供 JVM 指标(包括 CPU、内存、线程和 GC)、Logback、Tomcat、Spring MVC & 提供 RestTemplate。

springboot2监控指标见:https://www.cnblogs.com/JiangWJ/p/11117475.html

配置:

  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-actuator</artifactId>

  4. </dependency>


  5. <dependency>

  6. <groupId>io.micrometer</groupId>

  7. <artifactId>micrometer-registry-prometheus</artifactId>

  8. <version>1.0.6</version>

  9. </dependency>


  10. <dependency>

  11. <groupId>io.github.mweirauch</groupId>

  12. <artifactId>micrometer-jvm-extras</artifactId>

  13. <version>0.1.2</version>

  14. </dependency>

application.properties:

  1. #prometheus配置

  2. management.metrics.export.prometheus.enabled=true

  3. management.metrics.export.prometheus.step=1ms

  4. management.metrics.export.prometheus.descriptions=true


  5. management.endpoint.prometheus.enabled=true

  6. management.endpoints.web.exposure.include=health,info,env,prometheus,metrics,httptrace,threaddump,heapdump,springmetrics

直接

prometheus.yml:

  1. - job_name: 'springboot2'

  2. metrics_path: '/api/actuator/prometheus'

  3. static_configs:

  4. - targets: ['192.168.1.208:8080']

  5. labels:

  6. instance: '192.168.1.208-boot'

效果:

通过界面上add panel可以添加指标,可添加的指标如下:

  • jvmmemorycommitted_bytes

  • jvmthreadsstates_threads

  • jvmmemoryused_bytes

  • processcpuusage

  • rate(httpserverrequestssecondssum[5m])

  • jvmgcpausesecondscount

自定义java client

地址:https://github.com/java-rookie/client_java 参考:https://www.jianshu.com/p/60c6d6cb4c49

文章转载自开发架构二三事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论