Flask日志监控脚本
现在要写一个任务去监控每一秒钟的带宽值(每一分钟去监控三分钟之前的日志)
现在就新增一个task
需求分析:
- 请求flask的监控项api接口,然后获取monitor数据表的数据---》request.get(“http://x.x.x.x/v1/monitor”)
- 查询数据库原始日志nginxlog三分钟之前的日志 然后放入dataframe
- 循环获取监控项数据表里的数据,依次从dataframe去获取原始日志有没有出发邮件告警
也可以生成celery异步任务 :
做指令下发
Flask和celery的结合
拿router下面的user举例:
在下面多创建一个路由叫做celery
@user_bp.route("/celery")
# 相当于请求这个接口 就可以给我下发任务
def celery_trigger():
# 获取参数
args=request.args.get("args")
# 调用异步任务
from celery_app.tasks import celery_tigger
#发送任务(这个delay相当于就是调用异步任务去触发 )
celery_tigger.delay(args)
return "this is celery_trigger"
然后再celery_app下面的tasks里面添加一个新的任务
@celery.task
def celery_tigger(sth2):
print("this is celery_tigger")
print(sth2)
效果如下:
celery的可视化组件:flower
首先先安装
flower启动就一条命令:
然后在浏览器输入ip:5000就可以看到这个可视化工具
其中processed表示的是出发的任务数 succeded表示成功的数量等
celery定时任务
flask总结:
上线部署是部署到阿里云里面去 但是现在就直接上线到虚拟机里面去
整个项目流程:可以看项目框架图(也可以看自己做的那张图)
Zookeeper在kafka中有什么用?
Kafka一般应用场景,为什么会选择kafka?
日志收集 流量削峰 业务解耦
有没有了解过其他中间件?
nsq rebbitmq activemq kafka redis
用了几台机器去完成这个实验?设计这个实验的目的是什么?
6台 其中三台(nginx filebeat kafka zk) 1台(mysql) 1台(跑flask应用) 1台nginx代理机
学习 找工作 通过朋友知道目前这种架构很流行,所以自己在本地搭环境进行学习
生产者不断生产日志 Kafka响应不过来怎么办?
参数设置缓解压力
找到瓶颈(磁盘 内存 带宽) 然后就可以扩容了
Flask用了哪些模块,分别做了什么?
看上面那张图
Flask 怎么接收参数?
Request对象
做了哪些表 表里多少数据 这个表是做什么的!!!(七八张表)
Flask的后端编写 所有东西都是绑到app核心对象里面
核心对象app在manage.py里面创建的 运行也是从这个文件开始
Orm是做对象关系映射 建立数据模型的
把路由注册到蓝图上 把蓝图注册到app上 整个视图函数放在route目录上面
Api编写使用表现层状态转移(restful) 把路由帮到api上面 api再绑到蓝图上面
基于token做的用户登录验证
Flask-marshmallow我们没有使用 我们自己自定义
Flask-scrip 方便管理
Flask-migrate是绑到flask-script上面的
项目步骤里的前端vue框架我们没学
上线部署:
这个项目目前还是只适用于开发环境
上线部署的应用分为两种:
nginx+gunicron
nginx+uwsgi
我们的python程序是用gunicron运行的
相比于uwsgi而言,gunixcron配置简单使用方便
测试环境和线上环境一模一样
流程:写完代码—》测试—》审核—》发布到线上环境
持续集成ci/cd:这个流程平台化自动化管理(软件jenkins可以做到)
Flask应用集群是真实机器(gunicorn运行在这个里面)
Nginx就是暴露在外网的接口 而下面的东西用的就是内网
gunicorn -w是指定启动几个worker进程(几个worker) -b是指定接口
gunicorn -w 2 -b :8000 manage:app 启动是在当前目录下启动(线上环境启动方式)
在新主机上安装依赖包:pip3 install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --trusted-host pypi.douban.com
现在去配置nginx
在kafka1的主机里配置nginx的conf文件
proxy_pass是反向代理
代表访问80端口v1的时候 全部代理去8000的flask端口
只有以v1开头的才会代理到我们的8000端口
可以实现动静分离来进行分流
以v1开头的后端都代理到后端
前端就是静态 新加一个location 代理到前面写的html里面去(本地直接返回)