一篇文章讲透线上应用监控

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


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


严重声明:

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

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

01. 应用服务状态监控

生产上应用服务的运行一般要求 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 到了没?


02. 基于应用日志的监控

接触过金融项目的都知道,日志是解决系统 Bug 的最后一盏阿拉丁神灯。在微服务发展如火如荼的今天,服务粒度越拆越细、模块分工越来越明确,随之而来的就是根据日志排查问题就趋于繁琐。那么是不是可以把微服务的日志进行归集到一起呢?业界已经有很多成型的方案。那接下来就聊聊如何进行日志归集呢?归集的日志如何进行存储呢?存储的日志该如何展示呢?如何实现告警呢?

如何进行日志归集?

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

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

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

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

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

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

一大堆轮子呼之欲出。Elastic 旗下的 Logstash、Elastic 旗下的 Filebeat、Apache 麾下的 Flume、Linux 系统提供的 Syslog/Rsyslog/Syslog-ng 堪称 Syslog 一系列、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 等等,出现关键字就发个告警通知。

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


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

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

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

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

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

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

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


04. 写在最后


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

不知不觉码了这么多字,不知道你 get 到了多少。如果感觉对你有点帮助,请多多推荐给身边的朋友就很欣慰。

欢迎关注微信公众号“一猿小讲”了解更多精彩分享。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 作为 Zabbix 骨灰级粉丝,一直以来对第三方监控(APM)都是拒绝的。一来觉得收费,二来担心数据被人所知,三来...
    OneAPM阅读 1,488评论 1 3
  • 阅读目录(Content) 一、Flume简介 二、Flume特点 三、Flume的一些核心概念 3.1、Agen...
    达微阅读 4,707评论 0 9
  • 博客原文 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 引言 概述 Apache Flume...
    rabbitGYK阅读 11,447评论 13 34
  • 本文是对大数据组件Flume的一个学习总结,共包括如下章节的内容: 简介 核心概念 使用场景 快速起步 小结 一、...
    我是老薛阅读 1,352评论 0 1
  • 这天见你,等你下班,看着你的笑容,很开心。心里却也在交叉着惦记与不舍。 走你回家的那一段路,尽管一遍又一遍,现在,...
    柒少年阅读 841评论 0 7