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

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

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

Tips:

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

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

一. 应用服务状态监控

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

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

640?wx_fmt=png

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

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

通过配置健康检查 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 脚本为例,稍作改动注释掉循环语句。

640?wx_fmt=png

完成了脚本的编写,接下来就是搭配 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 到了多少。一起聊技术、谈业务、喷架构,少走弯路,不踩大坑。欢迎关注「一猿小讲」,会持续输出原创精彩分享,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381898.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何设置时间倒计时

开发工具与关键技术:Visual Studio 2015、SQL Server 2014 作者:黄世豪 撰写时间:2019年01月31号相信很多小伙伴在做项目时会遇到过要用到时间倒计时的效果,下面我们来实现一下如何将自己设置的时间来让其进行时间倒计。 jsp调用…

js倒计时读秒

1.需求及分析 最近,接到一个接收手机验证码的功能,大体就是设置一个定时器,在每次执行的时候将秒数,逐个减去1,小于0的时候,清除定时器,然后完善一下功能,例如,加上一下状态的变化&…

C#实现倒计时的功能

软件界面: 软代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…

android studio高考倒计时,高考倒计时app排行榜

编辑推荐 时间管理倒计时 v1.3.0 大小:13.7MB 更新时间:21-04-14 下载 时间管理倒计时,一款专为小伙伴打造的手机时间规划工具,为小伙伴提供更强大的规划服务,在这里小伙伴可以自由规划自己的时间,为小伙伴…

VS2015+C#实现倒计时小程序

最近疫情严重,在家呆着也是呆着,于是就想学一下上位机的编写,权衡利弊之后,选择了C#语言,原因是据说它写出来的上位机比较小,不占内存。开发环境就用VS吧,用的人挺多的。好了,进入正…

C#之一个倒计时小应用程序的实现

只能开始计时,不能停止计时 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…

易语言编写倒计时小程序

本人为编程爱好者,非专业人员。 最近工作中需要用到编写倒计时软件,故有此篇。 软件功能: 1.时间倒计时 2.倒计时会有一个透明放大的标签显示时间 3.各窗口可隐藏 以下为软件运行界面: 代码: .版本 2 .支持库 she…

DIY蓝牙小音响

PRE 我个人是比较喜欢手工做一些小东西,但是由于知识限制,我无法去制作一些复杂的东西,如果是一些简单的小玩具,如果我有能力做,我还是很乐意去做的。前段时间正好在看音响,我最后入手了一个便宜的EDIFIER…

树莓派系列二(语音识别)

树莓派的基本概念和安装系统在系列文章一中介绍了.这篇准备介绍一下语音识别. 一直想研究一下语音识别,用来做家庭物联网的控制入口,未来也许就是这样,讯飞的叮咚音响可以连接京东的物联平台,苹果的homekit平台,华为的平台暂时落后的有点多... 国内语音识别领域,我个人比较欣…

毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32

文章目录 0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 PAJ7620U2模块4.2 HC-05蓝牙模块4.3 JQ8900语音模块 5 部分核心代码6 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

两台电脑共享一个音响方法

两台电脑共享一个音响方法 由于某种原因,需要两个电脑使用同一个扬声器,现分享一种简单的方案 原理:通过主机的音频输入功能,将另一台电脑的音频接收过来并播放。 连线如下: PC2作为主设备,正常连接音响…

Spring IOC DI - 整合MyBatis

Spring IOC目录 主要内容Spring 框架介绍Spring 框架的优势(对比以前项目的缺点)Spring 框架引入历史发展框架学习三要素Spring 模块介绍 Spring IoC/DI - 引入IoC/DI 概念辨析使用IoC/DI的好处IoC/DI具体应用场景 Spring IoC/DI - 代码实现环境准备Spring 框架环境搭建创建Mav…

Spring框架——IOC、DI

本篇博客主要介绍Java中的IOC和DI,以及在String框架中的应用。首先,我们将对IOC和DI进行概念介绍,然后讲解它们的关系及在String框架中的应用,最后通过一个实例来展示它们的具体用法。 IOC和DI的概念介绍 IOC(Invers…

叮咚!你点的Spring套餐来了!

儒猿技术团队最新出品: 《Spring顶尖高手进阶:互联网教育系统项目实战》 长按扫描下方二维码了解: 课程背景 在技术日新月异的今天,Spring作为Java主流开发框架,出道十多年仍然稳坐C位,经久不衰&#xff0c…

乐鑫Esp32学习之旅 17 全网首发,esp32 sdk直连京东微联·小京鱼·IoT开放平台,实现叮咚音响语音智能控制。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。…

计时器setTimeout()函数、setInterval()函数

文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:🏅计时器setTimeout(函数名,延迟时间)结束计时器setTimeout 🏅计时器setInterval(函数名,延迟时间&a…

UGUI源码深度剖析

源码下载后 直接嵌入工程,删除引擎extension里的; 自制UI,在一个空场景中显示一个图片,当鼠标点击图片,执行操作。 gameobject : mesh meshfilter meshrender maintexture meshcollider camera ray

三星Note2 行货 水货 型号版本

来源:http://samsung.tgbus.com/201301/462040.shtml 三星Galaxy Note早期的用户定位,其实是喜欢大屏幕的商务男士,但是发售之后没想到,在市场中女性成为三星Galaxy Note的最大的购买群体。而比三星Galaxy Note屏幕更大的Galaxy N…