注:本文档主要用于说明fastapi审计模块(webhook)的完善开发
系统功能架构
fastapi + 钉钉webhook + MySQL + zabbix + cmdb + grafana
用户可实时在钉钉群聊中获取告警信息和资产信息,自动化拉取zabbix中出现告警的机器信息和获取cmdb中的虚拟机资产信息,并将用户使用请求记录在MySQL数据库中,grafana中对MySQL中的数据进行监控出图

sql设计:
zabbix_alert表字段:
|
key |
comment |
|
sender |
发送消息者 |
|
group_name |
发送者所在群聊 |
|
create_at |
at机器人的时间 |
|
message_content |
告警内容(json格式存储) |
|
chatops_type |
消息类型(zabbix_alert) |
assets_log表字段
|
key |
comment |
|
sender |
发送消息者 |
|
group_name |
发送者所在群聊 |
|
at_ipaddres |
at的IP地址 |
|
send_time |
发送消息的时间 |
|
status |
消息返回的状态(success、IP不存在、资产不存在) |
|
content |
消息返回的内容(json格式存储) |
sql建表语句:
CREATE TABLE assets_log ( id bigint unsigned NOT NULL AUTO_INCREMENT, at_ipaddress varchar(20) DEFAULT NULL, sender varchar(50) DEFAULT NULL, group_name varchar(64) NOT NULL, send_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, status varchar(50) DEFAULT NULL, content text NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
技术路线
-
该审计中心模块后端采用fastapi(python小型web框架)提供web网络服务,主要功能为:从cmdb和zabbix中获取资产信息和告警信息。
-
路由采取异步处理(async)措施,能够在短时间内处理多个用户的不同请求,提高用户体验感。
-
MySQL数据存储:采取后台任务(BackgroundTasks)执行的方式将数据写入MySQL存储(因为用户获取信息的内容可以延时存储到数据库中,在后台默默写入数据库,降低短时间内系统网络的负载);同时使用aiomysql异步数据库模块实现对消息的异步写入,提高并发写入的速度。
-
grafana采取直接从MySQL中获取数据进行监控展示,监控字段内容主要通过sql查询获得:MySQL提供对json格式数据做提取的功能(JSON_EXTRACT)-这就是为什么存取内容采用json格式的原因(其他提取content内容方法:高版本的8.0版本MySQL支持正则快速提取;grafana8.x+版本支持transformations使用正则对字段进行处理)- 更加灵活的字段存储能够得到更加灵活的监控图表
-
compose容器化启动
fastapi介绍
FastAPI 是一个基于 Python 的现代 Web 框架,它具有快速构建高性能 API 的特点。
FastAPI 关键特性:
快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
高效编码:提高功能开发速度约 200% 至 300%。
更少 bug:减少约 40% 的人为(开发者)导致错误。
智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
简单:设计的易于使用和学习,阅读文档的时间更短。
简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
健壮:生产可用级别的代码。还有自动生成的交互式文档。
标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
常见 Python Web 框架的介绍与区别
性能:
Django:是一个全功能的框架,它提供了许多内置的功能和扩展。虽然它在性能方面相对较低,但它非常适合构建大型应用程序。
Flask:是一个轻量级的框架,它更加注重简洁和灵活性。相比于 Django,Flask 具有更好的性能表现,但它的功能相对较少。
FastAPI:是一个高性能的框架,它基于异步请求处理和类型注解。FastAPI 比 Django 和 Flask 在性能上更为出色,并且它使用 Python 的 asyncio 库来实现高效的并发请求处理。
开发难度:
Django:是一个全功能的框架,它提供了许多现成的功能和组件,使得开发更加快速和简单。但是,对于初学者来说,Django的学习曲线可能相对较陡。
Flask:是一个简洁而灵活的框架,它更多地侧重于自定义和配置。相对于 Django,Flask 的学习曲线较为平缓,适合小型和简单的项目。
FastAPI:使用了类型注解和自动生成文档的功能,使代码更易读和维护。它提供了基于标准的API模式和强大的验证工具,减少了开发过程中的错误。
推广程度:
Django:是最受欢迎和广泛使用的 Python Web 框架之一。它拥有庞大的社区支持和丰富的文档资源,可以轻松找到相关的教程、插件和解决方案。
Flask:是一个比较受欢迎的框架,拥有庞大的社区和丰富的扩展库。虽然它的用户群体相对较小,但在小型项目和快速原型开发中非常流行。
FastAPI:是一个相对较新的框架,但它正在迅速获得开发者的关注。它的高性能和现代特性吸引了许多开发者,并且社区正在逐渐扩大。
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
启动方式
FastAPI 使用 uvicorn 作为默认的 Web 服务。因此,需要在安装 FastAPI 和 uvicorn
注:Django和flask都有内置的小型服务器,开发可以不依赖专业服务器(可使用gunicorn同步服务器部署项目)
uvicorn 是一个轻量级的 ASGI(异步服务器网关接口)服务器
uvicorn main:app --host 0.0.0.0 --port 80 --reload
# main:启动服务的py文件名
# app:服务对象名
# --host 指定主机名:0.0.0.0表示任意主机都可以访问
# --port 服务提供的端口
# --reload 以调试模式启动,代码发生修改会重载服务

被折叠的 条评论
为什么被折叠?



