监控系统和日志系统概述
服务器的实时资源和性能状态等指标直接影响着运行在其中的应用健康度和承载力,通过这些指标我们可以对分布式系统的整体服务提供能力进行预判,同时基于这些信息可以为后期硬件和软件的选型和调整提供参照。而日志系统可以记录下服务器中的应用运行状态并将后台运行日志实时采集,可以提供给运维人员和程序编写人员进行故障分析和修复。基于分布式架构搭建起来的系统包含了多个服务器集群,成千上万服务器难以单独去检测和采集日志,一个完善的日志监控系统对于运维人员和架构师的重要性不言而喻。
监控概述
监控是通过采集服务器相关资源信息和服务运行状态及性能来保证服务器系统的安全运营和服务健康度的一种重要方式。通过监控服务器各项资源和应用的服务提供性能可以对分布式系统的整体服务提供能力进行预判,同时基于这些信息可以为后期硬件和软件的选型和调整提供参照。
日志概述
日志是监视程序运行的一种重要的方式,主要有两个目的:1.bug的及时发现和定位,2.显示程序运行状态。通过查看日志可以看出程序正在做什么,是不是按预期的设计在执行,而日志级别的设定可以方便我们对运行状态和异常所在进行分析了解,所以记录下程序的运行状态是必要的。
项目选型
在项目初期对尝试了采用企业级的一体化日志监控方案elastic stock,其通过Beats编写侵入性代码对服务器性能和服务状态进行获取,然后通过Logstash进行数据清洗和整合,再由Elasticsearch进行信息聚合并提供全文检索服务,然后基于Kibana通过RESTful API来定向获取信息并渲染成可视化界面,该方案的准入门槛较高并且提供的服务过于冗余。
遵循“奥卡姆剃刀”的开发理念,采用了易于上手而且满足项目需要的Spring Boot Admin框架,该框架在被监控服务内部嵌入admin client基于Actuator接口对服务器状态和服务信息进行采集,然后将信息提交给单一的admin server服务进行聚和,并用Vue前端框架搭建了简洁的交互界面便于我们查看。
日志框架选型上采用了Logback+slf4j,Spring Boot的传统日志采集通过Commons Logging和Log4j搭配实现,但是由于该框架的接口实现较为麻烦同时性能较差逐渐退出市场。本次以slf4j作为日志采集的接口,并用Logback实现了日志采集功能提供了运行性能,符合分布式开发的理念。
监控系统和日志系统功能解析
本项目搭建的日志监控系统提供了服务健康状态、服务器资源、交互性能、配置信息和运行环境等指标的监控,并且借助Logback+slf4j对日志信息进行采集,以日志等级进行划分便于我们找出异常日志。
监控系统功能解析
Spring Boot Admin框架采用服务墙和服务列表的方式来展现服务,服务墙主要是简单地展示服务名及状态,而服务列表则展示应用数、实例数及离线实例等信息。通过颜色变化来区分服务健康与否,如绿色表示服务正常、灰色表示服务下线、红色表示服务错误等。
应用墙
应用列表
点击服务块便可以进入服务详情页面,其中包含了服务细节、服务各个接口的性能监控、服务所在的运行环境、服务包含的类、服务的配置信息和服务的定时计划等信息。
在服务细节中以可视化的角度展现了服务的进程信息、线程数、垃圾回收和堆栈信息等,并且实时动态变化提供详尽的监控服务。
服务细节
在服务细节部分主要是提供服务内部的线程性能,需要自定义添加指标。
服务性能
服务环境则是获取服务运行所在的服务器的相关硬件和系统信息,如图2-5所示包括了时区、系统、JDK路径等信息。
服务环境
服务类主要是获取该服务的类信息和依赖关系。
服务的类
服务配置属性获取了该服务配置文件中的配置信息,如图2-7展示的便是该服务在数据库配置方面的配置信息。
服务的配置属性
服务计划任务获取了该服务的定时任务涉及的类及函数信息,并保留cron表达式来表征定时规划。
服务的计划任务
日志系统功能解析
Spring Boot Admin可以提供三种日志服务,包括了事件日志、服务日志详情和日志级别,事件日志是基于server端对所有的服务事件(上线、下线、异常等)的聚合登记。
事件日志
服务日志详情则是基于Logback+slf4j通过client端对服务的日志采集获得实时的后台日志信息。
日志信息
介于以上日志信息过于繁乱,而日志信息可以依照日志的严重程度进行分级,我们便可以及时处理主要矛盾。将服务中涉及的多个线程的日志级别分离出一个日志级别的可视化界面便于我们去定位异常。
日志等级
除此之外还提供了JVM、映射和缓存等监控信息,本项目并不涉及则不再赘述。
JVM
映射
优化和提升
通过以上的阐述基本展现了本项目的日志监控系统的大体功能,但是原生的Spring Boot Admin存在一些不足之处如没有提供加密登录的验证功能,这样一来任何获得后台访问路径的人都可以直接访问监控系统;以及发生了服务异常只是在前端页面展示,若我们没有在工作台便没法及时获取这个异常状态,我们需要参考云服务提供商的异常通知服务加入短信通知或者邮件通知,以便运维人员不在岗位也能通过手机及时获取异常信息,自动预警功能显得十分的重要。
因此我基于security框架搭建了一个用户的登陆系统,需要输入正确的用户名及密码才能登陆访问。
登陆界面
在服务异常预警系统上先从网易邮箱申请三方平台登录的授权码,利用mail框架进行第三方登录通过网易的smtp服务器转发预警邮件到指定的邮箱中实现服务异常的实时预警功能,如下图是对账业务下线后触发的预警机制。
邮件预警
打开邮件可以看到详细的预警信息,指明了哪一个应用实例的状态变化,以及出现这种状态变化的日志信息和异常详情,便于我们快速定位。
详细的预警信息
网友评论