“线上服务停了,要重启一下”?久经职场做研发的程序员,视线会逐渐转移到线上应用的运行状态。设想一下,如果你在半夜两点正在酣眠美梦时,微信群里突然炸开锅:“服务停了,先重启。。。”,对于有起床气的你而言,美梦终结,是否能忍?

今天主要分三大块:应用状态监控、基于应用日志的监控、升华部分(老司机,带你飞),稍微聊一下应用监控相关的知识。

Tips:

1. 今天的内容相当的烧脑,请提前喝足六个核桃!

2. 但我相信坚持阅读到最后,你肯定不虚此行!

一. 应用服务状态监控

生产上应用服务的运行一般要求 7 x 24,稳定运行率达到 99.99%。其中除了保证应用本身的健壮性外,当然还需要依赖一些守护程序做监控。不然一旦服务出现假死了怎么办?

首先我们能想到的,便是通过寥寥几行 linux 命令,组成一个小而精悍的 shell 文件,偶尔再配上 crontab 定时任务,来完成应用服务的进程守护。不扯别的,打开常用的monitor.sh 脚本一探究竟(以 tomcat 为例)。

麻雀虽小五脏俱全,让我们解剖一下麻雀。

  • 如何判断应用处于假死?

通过配置健康检查 url,专门用于心跳检测,当每次访问时正常返回 200 状态码,就认为应用还可以正常提供服务。如果返回的不是 200 状态码,则判断应用的进程 ID 是否存在,存在则说明处于假死状态。

  • 如何实现假死应用重启?

通过 ps -ef|grep "tomcat" |grep -w 'tomcat' | grep -v "grep" |awk '{print $2}' 获取对应的进程 ID,如果进程 ID 存在,则进行kill,然后调用启动命令进行完成服务重启。

上面的方式是在shell 脚本中,实现每 60 秒检查一次应用服务状态。另外我也经常会用 Linux 系统提供的 crontab,配置定时来调用监控脚本,完成应用监控,还是以上面的 monitor.sh 脚本为例,稍作改动注释掉循环语句。

完成了脚本的编写,接下来就是搭配 crontab 调度任务(第一次听说 crontab 这个词的,请自行寻找谷歌、百度,恶补一下知识

*/1 * * * * /app/script/monitor.sh > /dev/null 2>&1

如果你准备采用上述方案试用时,有两个注意事项:

注意一:请注意修改对应的目录,包括 tomcat 目录、脚本目录、心跳检测url;

注意二:请注意针对shell 脚本赋上可执行权限。

小脚本解决大问题,所以别拿豆包不当干粮,概有四两拨千斤之势。

其实依据过往的经历,静下来想一想,面对其它非 tomcat 服务监控时,又何尝不是这种方案呢。

到此最基本、最简单也最实用的应用服务状态监控方案就说完了。你 get 到了没?

二. 基于应用日志的监控

接触过金融项目的都知道,日志是解决系统 Bug 的最后一盏阿拉丁神灯。

在微服务发展如火如荼的今天,服务粒度越拆越细、模块分工越来越明确,随之而来的就是根据日志排查问题就趋于繁琐。

那么是不是可以把微服务的日志进行归集到一起呢?业界已经有很多成型的方案。那接下来就聊聊如何进行日志归集呢?归集的日志如何进行存储呢?存储的日志该如何展示呢?如何实现告警呢?

  • 如何进行日志归集?

业界常见的日志归集方案,莫非就分为两种:一种是直采方式;另一种是 agent 方式。

所谓的直采方式,就是在应用程序中将日志,直接上传到存储层或者服务端,例如 Log4j 的 appender 。

所谓的 agent 方式,相当于在应用机器上部署一个 agent 服务,专门用于采集日志,然后推送到存储层或者服务端,应用本身只负责产生日志。

直采方式适用于:在面对没有额外的资源,可以独立部署采集日志的 agent 时,例如负载均衡设备,那就不得不考虑直采方式。

agent 方式适用于:只要应用将日志以文件的形式输出到磁盘上,agent 就可以将日志采集到,并且对应用本身松耦合。与直采方式相比:可扩展性、可维护性,agent采集方式更胜一筹。

  • 业界常见的日志归集工具有哪些呢?

一大堆轮子呼之欲出。

Elastic 旗下的 Logstash、Elastic 旗下的 Filebeat、Apache 麾下的Flume、Linux 系统提供的 Syslog/Rsyslog/Syslog-ng、Facebook 名下的 Scribe 等等等。

估计坚持阅读到此的你会一脸的懵逼(笑哭),不过没关系,就当今天扩展一下知识面吧。

今天我主要提提我用过的两款:Elastic 旗下的 Filebeat、Apache 麾下的 Flume。

Filebeat 是用 Go 语言开发,是一个二进制文件,部署无依赖,占用资源极少,轻量 3M 多,开箱即用,亲测使用特别方便。而且业界名声也不小,是 ELK 架构升级后的产物,请问你是否听说过 ELK 呢(笑哭)?

Flume 是用 Java 语言开发,我用 Flume 主要是集成到项目框架中提供日志归集的能力,主要针对 Flume 去除了一些冗余,扩展了部分功能,进行了二次扩展开发(后续有时间专门写一篇 Flume 二次开发的那些事儿,请期待)。

  • 归集的日志如何进行存储呢?

又一堆轮子呼之欲出。

ElasticSearch、Mongodb、HDFS、时序数据库 influxdb、opentsdb、rrd等等。

由于工作场景的需要,通过关键词进行定位查询,而 elasticsearch 做查询是最合适不过的了。因为每个轮子,有每个轮子的使用场景,在此就不做深入展开。

  • 有哪些日志分析可视化工具?

对,你肯定猜到了,又一堆轮子呼之欲出。

基于 Node.js 开发的展示工具,提供日志展示、汇总、搜索,分析仪表盘等功能的kibana。

基于 go 语言开发的专注于根据CPU 和 IO 利用率之类的特定指标提供时间序列图表的 Grafana。

  • 如何实现告警呢?

万里长征,只差一步。日志归集完成了,那如果想看看有没有某个关键字,例如 error、exception 等等,出现关键字就发个告警通知,实现起来岂不是  so easy。

洋洋洒洒聊了这么多关于日志归集的,我经常用的是 ELK,后续找个时间详细写一篇关于日志归集的文章吧。

三. 升华一下,老司机带你装 B,带你飞

到目前为止,你已经了解了如何实现应用服务状态的监控,并且知道了如何基于日志做监控的思路。那你曾经有没有纠结过:一笔请求的调用关系呢?一笔请求大概穿越了多少个系统?一笔请求大概耗时都花费那个节点?

先给大家抛个概念“APM应用性能监控”(不懂的先自行填补一下知识空白),如果有时间的话,请你多重点关注以下三种 APM 组件。

第一种: Zipkin,是由 Twitter 公司开源的分布式的跟踪系统,主要包括:数据的收集、存储、查找和展现。

第二种:Pinpoint:由韩国人开源的分布式跟踪组件,是一款对 Java 编写的大规模分布式系统的 APM 工具。

第三种:Skywalking:国产的优秀 APM 组件,是一个对 Java 分布式应用的业务运行情况进行追踪、告警和分析的系统。

轮子千万款,总有一款适合你。

四. 写在最后

互联网寒冬下,大环境不好的情况下,你只能自强!自强!!自强!!!

不知不觉码了这么多字,不知道你 get 到了多少。一起聊技术、谈业务、喷架构,少走弯路,不踩大坑。欢迎关注「一猿小讲」,会持续输出原创精彩分享,敬请期待!

一篇文章讲透线上应用监控相关推荐

  1. 【密码学】 一篇文章讲透数字证书

    [密码学] 一篇文章讲透数字证书 数字证书介绍   数字证书是一种用于认证网络通信中参与者身份和加密通信的证书,人们可以在网上用它来识别对方的身份.   我们在上一篇博客中介绍了数字签名的作用和原理, ...

  2. 总线全称_一篇文章讲透I2C总线协议

    最近一段时间工作上比较忙,一直没有抽出空来写文章与大家分享,这两天腾出些时间静下心来沉淀一番.看标题大家已经知道了是来总结I2C总线,我相信大家或多或少的都接触过I2C总线,这篇文章我们就由浅入深的仔 ...

  3. 一篇文章讲透控制反转和依赖注入

    https://www.jianshu.com/p/07af9dbbbc4b 转载链接:http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/# http ...

  4. 百度排名批量查询_一篇文章讲透百度霸屏引流细节思路与极其简单的操作玩法...

    点评:百度霸屏引流现在常规的操作套路大部分都是挖掘关键词铺文章,核心就是拼文章内容,文章数量和平台,平台有了,文章有了,内容不行,上首页也很难转化,还是要在内容上多下功夫. 废话不多说,我们今天来聊聊 ...

  5. 一篇文章讲透单片机的RAM和FLASH

    作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解. 1.先聊聊存储器 存储器是单片机结构的重要组成部分,存储器是用来存储编 ...

  6. 一篇文章讲透yolo v1-v7

    YOLO V7出来的时候,有朋友跟我吐槽:V5还没闹明白呢,又来个V7,太卷了. 我找来了深耕目标检测的朋友张老师,从V1到V7,给各位做一次YOLO的系统分享. 张老师在辅助驾驶领域深耕多年,主要研 ...

  7. 仿bugtags实现App线上Crash监控及问题复现

    仿bugtags实现App线上Crash监控及问题复现 实现线上crash监控,包含了手机堆栈信息和设备信息,及时上传,后台修复并启用推送进行热修复流程,重要的是要手机用户的使用步骤及现场截屏,以便更 ...

  8. JVM第六讲:线上环境 FGC 频繁,如何解决?

    本文是JVM第六讲:线上环境 FGC 频繁,如何解决?重点:得靠经验来解决 文章目录 1.问题背景 2.遇到的问题及解决方案 2.1.pinpoint 打点存在大批量300ms以上 2.2.应用 cp ...

  9. android线上内存监控_如何在Android上监控(和减少)您的数据使用情况

    android线上内存监控 Increasingly sophisticated phones and data-hungry applications make it easier than eve ...

最新文章

  1. 微软发布新的Azure Pipelines功能和集成
  2. [编写高质量代码:改善java程序的151个建议]建议69 列表相等只需关心元素相等...
  3. .NET软件开发, 你应该知道 (整)
  4. Windows 下目录及文件向Linux同步
  5. 使用Chrome打开http://www.cutv.com/demo/live_test.swf页面时swf文件自动下载问题
  6. RS-485中继器的多种使用方法
  7. 模拟微信自动化发送(微信公众号文章自动点击)
  8. 【高并发】JUC中的Executor框架详解1
  9. 大数据之-Hadoop3.x_MapReduce_自定义序列化步骤---大数据之hadoop3.x工作笔记0095
  10. [日志]挂在树上的茶壶
  11. java获取当前服务器用户_从授权服务器获取资源服务器中的用户角色
  12. 问答WAP版重新改版上线
  13. 路由器和交换机的基本配置
  14. ExtJS 快速反入门指南
  15. 如何在Windows 10上禁用登录屏幕的背景模糊
  16. Java面对对象程序设计——面对对象
  17. java 随机姓名_随机组合生成好听的名字(java)
  18. Cubic spline(三次样条插值)(转载)
  19. android酷狗缓存目录,酷狗缓存的歌曲在哪个文件夹_酷狗音乐缓存的歌曲在电脑哪个目录-win7之家...
  20. 用latex编写 的论文模版

热门文章

  1. 用java画安卓图标_30个高质量并且免费的Android图标【Android Icon素材】
  2. python图标icon_【Python】站长之家icon图标爬虫
  3. @public @private @protected @package
  4. 产品经理 研发管理 ——周辉
  5. 如何从Windows中访问EXT4格式的Linux硬盘
  6. DIV布局艺购艺术品商城网页(1页) HTML+CSS+JavaScript 学生DW网页 使用html+css实现一个静态页面(含源码)
  7. html瀑布流元素布局宽度,css3多列属性实现瀑布流布局
  8. jboss eap 7_JBoss EAP 7快速入门
  9. 如何通过Nginx代理将EasyNVR的视频流代理到其他IP地址?
  10. 公司中个个职位的英文缩写名称都叫什么?