这次自己动手借助AI工具去写一个数据库监控系统的因素还是有多个的,一个是Oracle数据库暂时没有接入类似Zabbix和Prometheus这些开源的监控系统,更没有接入任何商用的监控系统。不是我不会部署和使用Zabbix和Prometheus这些监控系统,而是还没有太大必要性,去接入当前已有的Zabbix监控系统。因为当前的zabbix监控系统版本是6.0的,官网说法是:监控Oracle类型的数据库,只对12C起步的版本支持,做过兼容性测试。我所维护的Oracle数据库基本都是11G的。之前也尝试过使用Zabbix 6.0自带的ODBC接口和模板进行接入(没有测通),也尝试过使用orabbix加自定义模板接入(已测通),两种方法我都不采用,由于我没有任何zabbix系统的账号,折腾起来太麻烦了,就放弃Oracle数据库接入zabbix进行监控。还有因为最近AI技术进步可观,想试用一番,就想尝试借助Claude Code的编程能力,根据自己的运维需求,去DIY一个用来监控Oracle数据库的监控系统。我根据自己的运维监控需求,把需求内容写到*.md文件上,需求不多,相对简单,要求有前后端,就告诉Claude Code帮忙做出来。后面也提过两次大的新功能需求添加,都写到新的*.md文件上,以及小功能(数据库实例状态探测),没有写下来,直接告诉Claude Code。最终做出来的监控系统,采用的技术架构和成品就如下图例展示。简单说下该监控系统的技术要求,就是运行在python3环境(python 3.10+),后端存储使用MySQL,需要安装以下python3的插件: cat >requirements.txt
Flask>=2.3.0
Flask-SQLAlchemy>=3.0.0
Flask-JWT-Extended>=4.5.0
Flask-Cors>=4.0.0
PyMySQL>=1.1.0
cryptography>=41.0.0
python-dotenv>=1.0.0
oracledb>=2.0.0
APScheduler>=3.10.0
Werkzeug>=2.3.0
pytz>=2023.3
监控系统的功能模块
这个监控系统的功能模块主要分为以下一些:
1、用户信息管理和登陆认证模块。
2、定时任务调度、定时探测和定时采集模块。
3、仪表盘模块,总看板。
4、数据库资产管理模块。
5、采集管理和模板管理模块。
6、告警管理模块。
7、监控项目内容细节展示模块,下面细分多个监控项目卡片。
就第2个功能模块设计是内置的,其他的模块,在系统前端都能看到。
监控系统的功能展示
监控项目内容展示的卡片如下:
在访问方面,用nginx也做了反向代理。
这样,前后端的端口就没有直接暴露出来。
总结
做完成这个监控系统的过程中,包括写需求、与AI工具(Claude Code)交互沟通、配置环境、部署系统、测试与验证、评估与优化和问题发现与解决,这些工作,前前后后总共花了3个左右的人天。当中很多问题,基本交给Claude Code帮忙解决,也有一些问题,它一直解决不了,后面根据我的指引,才解决掉。这个问题,就是采集时候,一次的采集任务,调度器总是同时发起了两个采集进程,导致同时收集了两个采集结果,写入到了资料库,导致前端展示的时候,展示了两份数据。可能是根据实际运行环境的原因,导致它一直没法发现到,因为它看不到后台在同时运行了两个后端进程。