栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于docker部署 opentsdb + grafana数据监控系统

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于docker部署 opentsdb + grafana数据监控系统

文章目录
  • 0 前言
  • 1 docker opentsdb部署
  • 2 docker grafana部署
  • 3 python client写入方案
  • 4 数据持久化方案
  • 参考材料

0 前言

量化系统在运行的过程中有数据监控的需求,期望能够对策略的运行状态、资金指标等信息进行监控,刚好又接触了docker相关的技术,于是产生了利用docker来部署一套监控系统的想法。所幸,社区已经有很多前人的工作了,搭建起来也比较顺利,有兴趣的朋友可以与我交流~
监控系统采用opentsdb+grafana技术组合,后面也会深入的学习一下时序数据库opentsdb。

1 docker opentsdb部署

OpenTSDB是一个分布式的、可伸缩的时间序列数据库,其底层存储以Hbase为主。OpenTSDB支持多tag维度查询,支持毫秒级的时序数据。OpenTSDB主要实现了时序数据的存储和查询,其自带的前端界面比较简单,经常会结合grafana一起使用。另外,OpenTSDB也提供了丰富的插件接口,可以帮助开发人员对其进行扩展。
接下来,介绍一下基于docker进行OpenTSDB部署。petergrace/opentsdb-docker镜像已经配置好了Hbase,以及一些opensdb运行所需要的表,基于此镜像部署比较简单。
(1)下载镜像

docker pull petergrace/opentsdb-docker

(2)启动容器

docker run -d -p 4242:4242 --name opentsdb petergrace/opentsdb-docker

注意,启动docker容器之后,要过几十秒hbase才启动成功,然后才可以访问opentsdb。

(3)部署效果
访问浏览器:localhost:4242,可以得到如下效果。注意,这个界面很不好用。

2 docker grafana部署

Grafana是一个跨平台的开源的度量分析和可视化工具,主要用于查询并可视化展示采集的数据。Grafana提供了丰富的可视化展示方式,包括快速灵活的客户端图表,拥有不同方式的可视化指标和日志的面板插件以及丰富的仪表盘插件,包括热图、折线图、图表等。
grafana官方提供了打包好的docker镜像,但grafana docker在对接opentsdb docker时,有坑,需要使用容器互联机制。
(1)下载镜像

docker pull grafana/grafana

(2)启动容器

docker run -d --name=grafana-tsdb --link=opentsdb:opentsdb -p 3000:3000 grafana/grafana

注意,在使用opentsdb容器作为数据源时,需要加上容器互联机制–link=opentsdb:opentsdb。docker容器互联机制使用–link参数可以让窗口之间安全地进行交互。若不使用–link,在grafana配置opentsdb数据源时会出现 HTTP Error Bad Gateway
(3)部署效果
启动容器以后,浏览器访问localhost:3000,便可进入grafana主页,默认用户名和密码都是admin。

(4)连接opentsdb数据源
有几个需要注意的点:

  • http://opentsdb:4242,这里我测试opentsdb为启动grafana docker时的–link名称,此时使用localhost是连不上的。我还没有测试部署到服务器上这样能不能访问。
  • 注意opentsdb版本选2.3就行。我进入opentsdb-docker容器里面看,是2.4版本的,不过也可以连。
3 python client写入方案

github上找到一个用于OpenTSDB的python Client,实测了一下,挺好使。
(1)安装opentsdb-py

pip install opentsdb-py

(2)写入随机值测试

import logging
import numpy as np
import time
from opentsdb import TSDBClient

logging.basicConfig(level=logging.DEBUG)

tsdb = TSDBClient()

while 100000:
    random_value = np.random.randint(0, 100)
    tsdb.send('metric.test', random_value, tag1='val1', tag2='val2')
    time.sleep(1)

tsdb.close()
tsdb.wait()

(3)grafana metic展示
python脚本写数据开始之后,便可以在grafana面板中查询打metric的值了。
至此,数据监控方案就完整的搭建出来了,不过目前是在本地进行的实验,不知道部署到服务器上会不会还有坑。

4 数据持久化方案

数据持久化方案主要依赖于docker的数据管理,docker的数据卷是一个可供容器使用的特殊目录,它将主机操作系统直接映射进容器。注意在stop docker容器时,使用-t选项,给hbase足够的时间关闭,否则数据会丢失。推荐至少等待30秒。
可以有两种做法:
(1)基于opentsdb-docker镜像说明,使用docker-compose up -d,来使用docker-compose.yml来启动容器,在docker-compose.yml内将数据卷挂载到${pwd}/.data/目录下。

git clone https://github.com/PeterGrace/opentsdb-docker.git
cd opentsdb-docker
docker-compose up -d # 启动docker容器
docker-compose stop -t 30 # 关闭docker容器

docker-compose.yml文件内容如下,可以发现就是在docker容器的启动配置,既然如此,那应该可以在docker run时配置启动参数。
docker-compose持久化方案已经验证过,在docker-compose stop之后,再启动,仍然可以读取到原来的数据。

---
opentsdb:
  hostname: otsdb-host
  image: petergrace/opentsdb-docker:latest
  environment:
    - WAITSECS=30    
  ports:
    - 4242:4242
    - 60030:60030
  volumes:  
    - "./data:/data/hbase"
  container_name: opentsdb

(2)在docker run 时加-v参数。
参考docker-compose的配置,在docker run时加-v参数实证也是可以的。下图展示了stop容器和rm容器后的持久化效果。

docker run -d -p 4242:4242 --name opentsdb -v="D:dockeropentsdb:/data/hbase" petergrace/opentsdb-docker:latest # 启动optsdb容器
docker stop -t 30 opentsdb # 关闭opentsdb容器
docker start opentsdb # 重新启动opentsdb容器

参考材料
  • 使用grafana可视化opentsdb(基于docker)
  • opentsdb-1-使用docker安装及使用opentsdb
  • grafana文档
  • opentsdb-docker镜像
  • opentsdb-docker github仓库
  • opentsdb python client
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号