项目作者: lsj9383

项目描述 :
nginx vts 监控
高级语言: Python
项目地址: git://github.com/lsj9383/vts-monitor.git
创建时间: 2019-03-12T16:10:20Z
项目社区:https://github.com/lsj9383/vts-monitor

开源协议:

下载


VTS Monitor

VTS是一个Nginx第三方模块,可以统计到Nginx的流量、key的触发次数、集群的健康状态。该模块只提供了全量的统计,即从统计开始到当前时刻的所有数据。当希望获得服务的QPS、不同时间的服务器状态分布情况时,VTS就无能为力。VTS Monitor提供一个通用化方案,在一个VTS可用的情况下,通过简单的配置,就能获得服务器在不同时间的状态。

  • 特征
    • 统计每分钟的接口调用次数
    • 获得指定某天的接口调用次数的时间分布, 粒度(天)

一、部署

1.环境及依赖:

  • Linux
  • Python3.x
  • pip

2.虚拟环境初始化

  1. $ pip install virtualenv
  2. $ virtualenv --no-site-packages venv
  3. $ source venv/bin/activate
  4. # 在虚拟环境中安装依赖关系
  5. (venv)$ pip install -r requirements.txt
  6. # 退出虚拟环境
  7. (venv)$ deactive

3.数据源更新脚本

接口调用的数据需要每分钟到vts进行获取和更新,以计算每个时间段的调用情况:

  1. # 进行一次的数据源更新
  2. (venv)$ cd update
  3. (venv)$ python update_shelve.py
  4. # 通过crontab进行定期触发
  5. $ crontab -e
  6. * * * * * cd <脚本路径> && <虚拟环境的python解释器> update_shelve.py

二、使用

目前使用非常简单, 提供了两个接口和相关的参数来获取需要的接口调用数据。

1.接口的调用次数

  1. (GET) http://host:port/monitor/get
  2. # 参数(urlencode)
  3. key : <接口名>, 获得指定接口的调用次数, 若没有指明则会返回所有接口的调用次数
  4. date : <日期>, 指明获得哪天的接口调用数据, 格式为:%Y-%m-%d
  5. # 响应
  6. 响应上是各个时间段的调用次数, 时间段用时间戳stamp表示, 若希望获得格式化的显示可以使用`/monitor/get/pretty`接口
  7. {
  8. "<key-name-1>" : [
  9. [<start-timestamp>, <end-timestamp>, <number>],
  10. [<start-timestamp>, <end-timestamp>, <number>],
  11. [<start-timestamp>, <end-timestamp>, <number>],
  12. ],
  13. "<key-name-2>" : [
  14. [<start-timestamp>, <end-timestamp>, <number>],
  15. [<start-timestamp>, <end-timestamp>, <number>],
  16. [<start-timestamp>, <end-timestamp>, <number>],
  17. ],
  18. ...
  19. }
  20. # DEMO
  21. http://test.topbook.cc:5000/monitor/get?key=/monitor/user/profile

2.获得请求名称

  1. (GET) http://host:port/monitor/keys
  2. # 响应
  3. [
  4. "<key-name-1>",
  5. "<key-name-2>",
  6. ...
  7. ]
  8. # DEMO
  9. http://test.topbook.cc:5000/monitor/keys

三、解决方案

1.架构

整个架构规划如下, 只要Nginx启用了VTS模块的功能,本方案即可定期查询VTS信息,将信息按时间增量方式进行计算。

2.数据存储方案