fastapi + dingding的webhook

注:本文档主要用于说明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 以调试模式启动,代码发生修改会重载服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值