摘要:在很多企业环境中,都采用作为服务。对的监控,较为常用的方式是使用。那么,到全的环境下,如何搭建并实现以上的监控系统,今天就由数人云工程师来分享一下。以及其他依赖文件可以在码云中获得。
本文来自KVM群直播的实录分享。在很多企业环境中,都采用 tomcat 作为web 服务。对 tomcat 的监控,较为常用的方式是使用 JMX。那么,到全 Docker 的环境下,如何搭建并实现以上的监控系统,今天就由 数人云工程师来分享一下。
JMX(Java Management Extensions,即Java管理扩展)是Java平台上为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用,本文通过一个示例演示如何通过JMX对tomcat进行监控。以下示例使用到了tomcat, jmxtrans, supervisord, influxdb, granfana 等组件
部署图从下图可以看出监控主要流程如下:
jmxtrans通过jmx获取TOMCAT运行时信息并存入influxDB
grafana从influxDB获取数据并显示
修改catalina.sh文件,在Execute The Requested Command 这一行之前加上参数
`
CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8081 -Djava.rmi.server.hostname=192.168.99.205-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false”`
说明: 如果加在后面,可能会导致无法开启jmx接口
参数说明Djava.rmi.server.hostname=192.168.99.205 :tomcat部署所在的主机IP,基于实际情况进行修改。### 通过jconsole验证,是否开启java jmx 打开jconsole输入tomcat地址即可访问jmx
如果看到以下页面,则说明jmx已经开启,可以获取监控信息。
Tomcat的信息主要在这里
ok,现在tomcat中JMX接口已经打开,但是如何获取需要我们关注的信息呢?这个时候就需要jmxtrans来帮忙了
从上边的图,我们可以看到,Tomcat中内置了许多监控项,我们可以通过jmxtrans的配置文件来取得需要的监控监控项
{ "servers" : [ { "port" : "8081", "host" : "127.0.0.1", "queries" : [ { "obj" : "java.lang:type=Memory", "attr" : [ "HeapMemoryUsage","NonHeapMemoryUsage" ], "resultAlias":"jvmMemory", "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.99.205:8086/", "username" : "root", "password" : "root", "database" : "shurenyun" }] } { "obj" : "Catalina:type=GlobalRequestProcessor,name="http-apr-8080"", "attr" : [ "bytesSent" ], "resultAlias":"tomcatByteSent", "outputWriters" : [ { "@class" :"com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.99.205:8086/", "username" : "root", "password" : "root", "database" : "shurenyun" }] } }说明:
port: 之前配置的jmx端口(8081)
obj: 需要监控的对象,这个值可以从jconsole中获取
attr: 监控的对象属性,可以从这个地方获取
resulteAlias:为该属性定义的别名,在influxDB中会用到
url: influxDB的地址
username & password: influxDB的账号密码
database: 数据库名字,jmxtrans会自己创建
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是Python 进程) 安装supervisord也非常简单
不过由于大家都知道的原因,建议在通过apt-get安装的时候先换成国内的源,例如
`debhttp://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updatesmain non-free contrib
deb http://mirrors.163.com/debian/ jessie-backportsmain non-free contrib
deb-src http://mirrors.163.com/debian/ jessie mainnon-free contrib
deb-src http://mirrors.163.com/debian... main non-free contrib
deb-src http://mirrors.163.com/debian... main non-free contrib
deb http://mirrors.163.com/debian... main non-free contrib
deb-src http://mirrors.163.com/debian... main non-free contrib`
使用Dockerfile一键完成以上工作。
Dockerfile以及其他依赖文件可以在码云中获得。
附码云地址:https://git.oschina.net/thoma...
这里为了方便演示,我们直接使用host模式启动一个influxdb
docker run -d --net=hostinfluxdb:latest
按照下图提示:
选择Database:shurenyun
输入SHOW MEASUREMENTS 查看当前DB信息
可以看到DB里边已经有数据了
influxdb
照例使用容器部署
docker run -i -p 3000:3000grafana/grafana
登录 grafana, 账号密码:admin/admin
按照下面提示配置grafana dashbord即可看到实时监控数据
OK, 到此我们就完成了一个完整的tomcat监控流程, 如果有报警的需求,可以考虑对接zabbix,不过这里暂时不涉及这一话题,如果有兴趣的话数人云会在后续的分享中加入zabbix的内容,同时以上部署方式在数人云(shurenyun.com)上可以同样操作,欢迎试用,谢谢大家。
Q&AQ1:这个方案是不是是不是也可以监控gc之类的
A1:可以监控gc
Q2:jmx监控性能影响有考虑过吗?
A2:监控肯定会对系统性能有所影响,所以要合理取舍,选择必要的监控项去监控
Q3:我在使用grafana的时候发现在将多个(20个点)监控项数据复合展示的时候,grafana会crash,这个东西有什么优化部署的经验嘛?
A3:我们测试的时候没遇到这个问题,估计是数据源或者配置问题,几十个监控项出问题不应该是性能,这个需要具体分析下crash的原因,如果确定是grafana的问题,建议还是直接去社区交流
Q4:应用执行的sql有办法监控吗?
A4: 这个方案是基于jmx,只针对java,不支持sql
Q5:请问,能否监控到每个java线程的状态,有没有出现假死
A5:不能监控到每个java线程的状态,因为它自身的特性所决定的
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26686.html
摘要:本文从定义,作用,技术架构,安装和使用等全方位带你看懂。如图中左边红框中和右边的红框中都唯一表示为同一个镜像。最后,于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。 作者丨唐文广:腾讯工程师,负责无线研发部地图测试。 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署...
摘要:本文转自刘斌博文如何选择监控方案,文中刘斌从技术的角度深入解释了监控的数据采集原理,介绍了现有开源的监控方案,以及能够对进行监控功能的主流服务工具。下一章,刘斌将为大家介绍监控的开原方案,主流服务,及其特点。 过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减。另一...
摘要:本文从定义,作用,技术架构,安装和使用等全方位带你看懂。最后,于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。显示上图内容就表明安装完成。 作者丨唐文广:腾讯工程师,负责无线研发部地图测试。 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署,并且实现开发环境、测试环...
摘要:所谓的,正如其名,就是该镜像的根命令。个人认为,跟第二大不同,在于是对使用者鉴权,而是对目标权限进行鉴权。即使遇到了这样默认行为是终止进程的信号,也不会直接终止,而会转发出去。但是,和两个信号是无法捕获的,对此也无能为力。 太长不看:如果需要在Dockerfile的ENTRYPONNT中指定运行命令的用户,用gosu代替sudo可以避免某些信号处理上的边界条件。不过这些边界条件比较罕见...
阅读 1685·2021-11-25 09:43
阅读 2638·2019-08-30 15:53
阅读 1783·2019-08-30 15:52
阅读 2882·2019-08-29 13:56
阅读 3295·2019-08-26 12:12
阅读 553·2019-08-23 17:58
阅读 2101·2019-08-23 16:59
阅读 908·2019-08-23 16:21