技本功丨甲方大人来了之运维数据分析平台搭建实战
袋鼠云日志团队时常遇到各种各样的甲方大人,毕竟我们是一个非常优秀的企业服务公司(自信满满),当然面对甲方大人的时候要做到处变不惊,临危不乱,镇定自若的接受需求……
甲方大人的常用台词一定要记住:我们很忙,有好几套监控系统,能不能再不砍掉监控系统的情况下,帮助我们搞定日运维需求呢?这样的需求每天通过项目经理→产品经理→研发经理→浣熊(我)。
But,这个需求有点麻烦呀~
我捋过我日渐稀疏的发,只能加油干啦!
先说下甲方大人的需求和痛点,甲方大人说平日的系统运维工作主要围绕应用、主机、数据库和业务四个方面。
(1)应用发布平台是IBM的WebSphereApplicationServer(简称WAS),应用的性能监控基于WAS自带监控模块
(2)主机监控基于IBMTivoliMonitoringSystem,业务监控则通过分析应用日志的方式实现
(3)数据库监控依赖一个古老的oracle性能监控工具
(4)应用日志需要登陆到AIX业务机器上查看
“每当出现一个问题,先登陆was看下业务进程性能趋势,再登陆Tivoli查看主机性能趋势,然后登陆数据库监控查看数据库性能趋势,再然后登陆AIX主机查看日志。一套下来肚子就饿了,到食堂发现好吃的饭菜已经被别人抢光了,希望你们能帮我们改善改善伙食“。嗯,听上去影响蛮大的,不过他们怎么知道我烧菜的手艺的,上周末做的清蒸鲈鱼味道还不错...
四个字,赶紧干活。在了解了甲方大人的需求和痛点后,经过一番苦思冥想,设计了下面的看上去有点复杂的架构图。大道至简,借鉴老子的一段话附和一下这张图,“人法地、地法天、天法道、道法自然”,老子用了十三个字,将天、地、人乃至整个宇宙的生命规律精辟涵括、阐述出来。
菜谱准备好了,小葱拌豆腐,开始下锅。
数据采集上,针对WAS、Tivoli、Oracle和AIX应用主机的采集需求,需要coding了(没有什么需求是一坨代码解决不了的,如果有那就两坨),前方高能,请做好笔记:
(1)开发一个WAS进程性能采集器,参考https://github.com/alexivkin/WebSphere-Performance-Monitor,万能的python,哦no,这个是Jython,看起来跟python一样嘛,无非就是python里面用java,java里面跑python。由于是三年前的版本,加上没有IBM WAS的测试环境,花掉一个上午时间脑补调试,什么是脑补调试法,答按行过目代码、眼睛输入,大脑跑跑(非专业人士请勿模仿);
(2)开发一个Tivoli数据收集器,又花掉一个晚上,Tivoli支持Soap方式拉取新能数据,我不会告诉你可以用一个CURL拉取所有主机性能所有数据的,想知道的留言处扣666;
(3)开发一个Oracle数据库性能采集器,还好elastic 大佬开源了beats(https://github.com/elastic/beats),坑爹的是竟然不支持oracle,莫非oracle大佬的开发人员都休眠了么;花了两个晚上捣鼓捣鼓,支持个tps、qps、物理读、逻辑度、吞吐量还是可以的,小算一下支持200多个指标吧,oracle采集beat依赖oracle client不是一般的麻烦;
https://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
(4)开发一个AIX日志文件采集器,袋鼠云有技术大牛开发了一个,拿过来直接集成;
https://github.com/DTStack/jfilebeat
数据接收和解析组件,袋鼠云自研了java版本的logstash,参考:
https://github.com/DTStack/jlogstash
日志接收和解析性能是ruby版本性能5倍以上,关键是配置简单,分钟内上手
数据存储方面,最近一周的日志数据全部投递到elasticsearch里,以防哪天甲方大人心血来潮想搜个日志啥的;结构化的应用进程数据、主机性能数据、数据库性能数据和业务日志数据投递到clickhouse里,通过clickhouse强大的聚合计算能力(多表数据关联,sum/avg等聚合计算),计算出同一时间线上的业务和进程、主机以及数据库性能的关联趋势图。
一句话总结下ck吧,在sql里计算我只服ck!
链接:
https://clickhouse-docs.readthedocs.io/en/latest/functions/
源码请见:
https://github.com/yandex/ClickHouse
坚持看到这里就是真爱了,贴上一张系统架构图,图中左方是数据采集层,easymanager是公司自研的自动部署神器(不用想了,没有开源),右边是数据展示端,把应用、主机、数据库、日志数据统一展示在一张大屏上,废话不说了,上菜!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
12月28日云栖精选夜读 | 一篇文章掌握Java注解
什么是注解? 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。比如,下面这段代码: @Override public String toString() { return "This is String Representation of current object."; } 上面的代码中,我重写了toString()方法并使用了@Override注解。 热点热议 一篇文章掌握Java注解 作者:动力节点 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘 作者:技术小能手发表在:阿里技术 一场稳定、高清、流畅的大型活动直播是怎么炼成的? 作者:樰篱发表在:阿里云视频云 知识整理 Spring Bean注入/单例理解/循环依赖 作者:v18653847113 初识Django(一) 作者:死生之契 开源EDR(OSSEC)基础篇- 01 -设计定位与能力输出 作者:orright python 类的继承 作者:hiekay 正则表达式 命名捕获组 作者:hyzhou 美文回顾 (九)Java springcloud B2B2C o2o多用户商...
- 下一篇
Java面试笔试题大汇总二(最全+详细答案)
Java面试笔试题大汇总一(最全+详细答案)https://www.jianshu.com/p/73b6b3d35676Java面试笔试题大汇总三(最全+详细答案)https://www.jianshu.com/p/3e9a7073e60e 51、类ExampleA继承Exception,类ExampleB继承ExampleA。有如下代码片断: 52、List、Set、Map是否继承自Collection接口? 53、阐述ArrayList、Vector、LinkedList的存储性能和特性。 54、Collection和Collections的区别? 55、List、Map、Set三个接口存取元素时,各有什么特点? 56、TreeMap和TreeSet在排序时如何比较元素? 57、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 58、线程的sleep()方法和yield()方法有什么区别? 59、当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B? 60、请说出与线程同...
相关文章
文章评论
共有0条评论来说两句吧...