Sharing A Powerful Tool For Application Auto Monitor

简介:

本文分享的这个应用监控小工具,本来是我在五年多以前开发实现的windows服务监控的一个windows服务。听上去比较拗口吧,是的,这个应用一开始就是个监控windows服务的windows服务。

记得当时写这个程序的直接原因就是,做数据统计结转迁移备份之类的后台定时windows任务实在太多,而且由于历史原因,服务挂掉了也没有人及时知道,最终都会造成用户投诉,但很久才反馈到开发这边,或者用户根本不投诉,而日志系统又做的不好(可以算是没有),很可能就一直不知道某些应用已经发生问题。

这个工具的缺点也很明显,我亲眼看到过某司后台强大的运维监控系统,各种详细的参数和指标,大量日志和完善的日志分析系统,可以直接定位问题至某个集群某台服务器,以及可视化数据监控平台管理后台…必须承认,这个小工具做不到某司统一监控平台系统的任何一点。

后来随着需求改变,监控的类型变多,逐渐完善,在这个过程中,也曾经考虑加入很多特殊应用的内部业务监控逻辑。但是开发组发现统一监控平台不是那么容易实现,抽象改进使监控通用必须统一应用框架,但我们那时候人手不足,只好简单粗暴实现最容易的通用逻辑,且慢慢被改造为基于http的应用的简单心跳检查,目前支持的主要应用类型有windows服务、web服务、web页面、wcf、web api等。

在某些特殊业务场景下,这个神器还能重见天日,还可以占有一席用武之地。

现在,这个应用支持两种表现形式:1、winform程序 2、windows服务

将winform改造为windows服务很简单,只要将Program类文件稍作修改:

Program

最后配合我这里介绍的动态安装windows服务或者installutil.exe,可以直接实现监控服务安装。

 

下面简要概括这个监控系统包括的主要功能模块。

一、应用监控管理模块

这个模块是这个应用程序的核心。

主要实现监控参数配置、监控项定义和业务逻辑实现。

最大亮点是支持动态监控项目配置。你可以通过工具界面及时调整监控项、重新定义时间间隔,同时它可以控制最大最小及隐藏,支持手动暂停和启动,还支持日志功能及时查看等。

通过这个工具,以前靠猜,面向巧合编程,经常需要码农手动一个一个排查windows日志找问题,现在直接通过工具日志就能直接定位排查线上问题了。

还有就是,这个小程序可以很简单的实现windows服务监控并尝试自动修复而减少人工干预,出现问题会根据配置发送邮件和(或)短信通知相关人员,当然,发邮件和短信的这个逻辑要依赖你自己完成,比如黑白名单功能、发送的优先级,要不要自动带上服务器IP,发送的频率控制等等。

1、监控主面板

2、监控项配置

monitoritem

对于监控项目和预警对象(MonitorItemInfo)的抽象非常重要,每一个监控项和提醒策略贯穿整个监控系统的始终。

MonitorItemInfo

如果你曾有过每天都有多个新应用同时上线的工作经历,你一定知道这些抽象多么重要。

实际上,如果应用较少,应用类型很单一,我们完全可以定义一套通用的监控策略,而不用每个应用都有一个配置。

但是,变化是永恒的主题,不同子系统的不同应用肯定会有不同的监控业务逻辑,这里千万不要认为是过度设计,我反而认为至少少了两个抽象,定时时间策略和回调通知报警接口。

监控的应用类型也可以动态扩展,小程序中已经定义了监控接口IServiceMonitor,按照自己的业务要求实现逻辑,然后加上配置即可。

IServiceMonitor

其实,目前为止,这个工具的最大的两个不足是:

(1)、监控调度周期不灵活

目前每个监控项的时间间隔定义是一致的,实际上,监控项的定时策略完全可以改造成类似quartz(cron表达式)那样的定时任务调度,每个监控项都有自己的独特的时间策略。

真正做到某一类型应用或者某一个应用单独设置时间间隔进行监控才是接近最佳的。

(2)、不支持热插拔

虽然这个工具已经支持监控项及定时调度配置实时改动,但是不支持监控项动态插件式的监控模式。

理想的情况是,有新的监控项目,直接开发搞出一个新的dll至某文件夹,当然有可能还要加上一段配置文件,然后监控不重启即可动态监控。

虽然我之前搞过一个插件式文件处理系统,但是考虑到监控程序应该易用简单不出问题,还是放弃了插件式设计思路。

 

二、管理员模块

定义了一个简易管理员功能模块,实现了登陆和改密需求,示例代码为了演示需要,被我改变了原来的基于角色的权限控制(RBAC)服务(AdminUserService)。

login       modifypwd

当然,这个模块你可以根据监控需要进行扩展。

对了,这个小程序启动时需要输入用户名和密码,您可以根据如下用户名和密码进行登陆:

用户名admin 

密码123456

 

三、日志管理模块

如你所知,监控系统越高级,监控参数越详细,依赖的日志也越多。

这个工具定义了统一日志接口ILog,示例中模拟支持文本、数据库和NoSQL类型的日志。

但是远远不够,实际监控平台还需要分享大量web请求响应日志、OS日志等。

日志模块可通过配置的方式进行动态管理。

logadmin

如果你需要开发可视化的管理后台,建议使用RDBMS如MySQL或者MongoDB等NoSQL记录日志,当然你完全可以开发其他类型的日志提供程序与之适配。

 

最后再重复一次,这个小程序启动时需要输入用户名和密码,您可以根据如下初始用户名和密码进行登陆:

用户名admin 

密码123456

 

demo地址:PowerServiceMonitor





本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/p/Sharing-A-Powerful-Tool-For-Service-Auto-Monitor.html,如需转载请自行联系原作者


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
12月前
|
人工智能 弹性计算 运维
云端问道7期方案教学-使用操作系统智能助手OS Copilot轻松运维与编程
本文介绍了阿里云基础软件团队推出的操作系统智能助手 OS Copilot,旨在解决 Linux 开发与运维中的痛点。OS Copilot 基于大模型和操作系统领域知识构建,支持自然语言问答、命令辅助执行、系统运维优化及代码生成等功能,极大降低了学习成本和工作量。文章详细阐述了其产品架构、典型应用场景以及实验反馈渠道,帮助用户更高效地进行系统管理和编程。目前该产品处于公测阶段,免费提供给阿里云 ECS 实例和 Alinux 3 系统用户使用。
198 1
|
设计模式 存储 安全
【设计模式——学习笔记】23种设计模式——单例模式Singleton(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——单例模式Singleton(原理讲解+应用场景介绍+案例介绍+Java代码实现)
207 0
|
SQL Oracle 关系型数据库
oracle11g SAP测试机归档日志暴增排查(二)
oracle11g SAP测试机归档日志暴增排查(二)
687 1
|
存储 自然语言处理 供应链
跨境电商团队如何高效管理项目?这5款协作工具值得尝试
跨境电商团队面临的全球化供应链、跨文化沟通、时区差异及语言障碍等挑战,可通过选择合适的协作工具来克服。推荐工具包括板栗看板、Trello、Slack、Asana和Zoom,它们分别在任务管理、即时通讯、项目跟踪和视频会议等方面提供强大支持,帮助团队提升效率、确保任务高效执行和顺畅沟通。
跨境电商团队如何高效管理项目?这5款协作工具值得尝试
|
设计模式 缓存 Java
谷粒商城笔记+踩坑(14)——异步和线程池
初始化线程的4种方式、线程池详解、异步编排 CompletableFuture
谷粒商城笔记+踩坑(14)——异步和线程池
|
测试技术
谷歌DeepMind全新ToT基准:全面评估LLM时间推理能力
【7月更文挑战第10天】DeepMind的ToT基准测试了大型语言模型的时间推理能力,分为ToT-Semantic(合成数据,评估时间逻辑理解)和ToT-Arithmetic(真实数据,检查时间计算)。研究使用Claude-3-Sonnet、GPT-4和Gemini 1.5 Pro进行评估,发现模型在时间逻辑理解上表现各异,而时间计算上均较强。 Gemini 1.5 Pro在复杂问题上表现出色,而GPT-4在数学相关问题上较弱。[[1](https://arxiv.org/pdf/2406.09170)]
322 1
|
PHP 数据库 数据安全/隐私保护
帝国cms仿鳄鱼下载站网站源码(已测试)
帝国cms仿鳄鱼下载站网站源码(已测试)
348 10
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
266 0