概述:

何为时序型数据库?

什么是时间序列数据库,最简单的定义就是数据格式里包含Timestamp字段的数据,比如某一时间环境的温度,CPU的使用率等。但是,有什么数据不包含Timestamp呢?几乎所有的数据其实都可以打上一个Timestamp字段。时间序列数据的更重要的一个属性是如何去查询它,包括数据的过滤,计算等等。

influxdb作为现在主流的时序型数据库,性能强悍,在NetDevOps中主要是用于监控设备。

lnfluxdb是一个开源的分布式时序、时间和指标数据库,使用go语言编写,无需外部依赖。它有三大特性:

  1. 时序性(Time Series):与时间相关的函数的灵活使用(诸如最大、最小、求和等);
  2. 度量(Metrics):对实时大量数据进行计算;
  3. 事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。

安装InfluxDB:

使用docker-compose安装:

influxdb.yaml:

version: '3'
services:# influxdb容器influxDB:image: "influxdb"user: rootenvironment:- INFLUXDB_DB=devdb   # 数据库- INFLUXDB_ADMIN_USER=admin- INFLUXDB_ADMIN_PASSWORD=Cisc0123- INFLUXDB_USER=devdbuser- INFLUXDB_USER_PASSWORD=Cisc0123volumes:- /influx/influxdb:/var/lib/influxdb  # 数据卷- /network_protocal/practice_work/influx_db/init-influxdb.sh:/docker-entrypoint-initdb.d/init-influxdb.sh  # 初始化脚本networks:- influx_net  # 网络ports:- "8086:8086"restart: always# 用grafana做图形化界面grafana:# 镜像名称image: "grafana/grafana"user: rootvolumes:- /influx/grafana:/var/lib/grafananetworks:- influx_net# 开放端口ports:- "3000:3000"depends_on:- "influxDB"restart: always# 创建网络
networks:influx_net:driver: bridge

init-influxdb.sh:初始化脚本,配置devdb数据库的存放数据的policy,默认数据存放3周

#!/bin/bashset -einflux <<-EOSQL
create retention policy "devdb_rp_policy" on "devdb" duration 3w replication 1 default
EOSQL

在influxdb.yaml同一个文件夹下使用命令,创建容器:

docker-compose -f influxdb.yaml up -d

可以在游览器上输出:http://192.168.0.166:3000/,登陆grafana,账号密码默认是admin/admin。登陆后,连接influxdb:

选择influxdb,并填上相关参数:

influxdb基本操作:

注意:建议最好将基本操作在写yaml文件时就定义完成。

  1. 进入influxdb:

    docker exec -it influx_db_influxDB_1(容器名称) influx
    
  2. 创建数据库:

    create database devdb
    
  3. 使用数据库:

    use devdb
    
  4. 创建普通用户:

    CREATE USER "devdbuser" WITH PASSWORD 'Cisc0123'
    
  5. 创建管理员:

    CREATE USER admin WITH PASSWORD 'Cisc0123' WITH ALL PRIVILEGES
    
  6. 删除用户:

    drop user admin
    
  7. 给与普通用户数据库权限:

     grant all on devdb to devdbuser
    
  8. 创建retention policies

    create retention policy "devdb_rp_policy" on "devdb" duration 3w replication 1 default
    
  9. 修改

    alter retention policy "devdb_rp_policy" on "devdb" duration 30d default
    
  10. 查看retention policies

    show retention policies on "devdb"
    
  11. 删除retention policies

    drop retention policy "devdb_rp_policy" on devdb
    

python实战:

实验目的:
使用SNMP获取MEM利用率,写入influxdb,然后通过influxdb做呈现。

实验设备:
CSR1000v,已经配置好snmp,IP地址为192.168.0.66。

实验步骤:
1.测试与与influxdb的连通性:
influxdb_init_connect.py:

from influxdb import InfluxDBClientinflux_host = '192.168.0.166'
router_ip = "192.168.0.66"
snmp_community = "tcpipro"if __name__ == '__main__':# 使用系统管理员来查询信息client = InfluxDBClient(influx_host, 8086, 'admin', 'Cisc0123')# 查看数据库 print(client.get_list_database())# 创建数据库print(client.create_database('testdb'))print(client.get_list_database())# 删除数据库print(client.drop_database('testdb'))print(client.get_list_database())# 使用devdbuser查看信息client = InfluxDBClient(influx_host, 8086, 'devdbuser', 'Cisc0123', 'devdb')measurements_result = client.query('show measurements;')  # 显示数据库中的表print(f"Result: {format(measurements_result)}")retention_result = client.query('show retention policies on "devdb";')  # 显示数据库中的表print(f"Result: {format(retention_result)}")

测试结果:能够连接到influxdb中的devdb。

2.编写snmpv2_get函数:
snmpv2_get.py:

from pysnmp.hlapi import *def snmpv2_get(ip, community, oid, port=161):# varBinds是列表,列表中的每个元素的类型是ObjectType(该类型的对象表示MIB variable)error_indication, error_status, error_index, var_binds = next(getCmd(SnmpEngine(),CommunityData(community),UdpTransportTarget((ip, port)),ContextData(),ObjectType(ObjectIdentity(oid))))# 错误处理if error_indication:print(error_indication)elif error_index:print('%s at %s' % (error_status,error_index and var_binds[int(error_index) - 1][0] or '?'))# 如果返回结果又多行,需要拼接后返回result = ""for varBind in var_binds:# 返回结果result = result + varBind.prettyPrint()# 返回的为一个元组,OID与字符串结果# print(result)return result.split("=")[0].strip(), result.split("=")[1].strip()

3.组织好数据格式并向influxdb中写入:
influxdb_monior_router.py:

import time
import datetime
from snmpv2_get import snmpv2_get
from influxdb import InfluxDBClient
from influxdb_init_connect import router_ip, snmp_community, influx_hostclient = InfluxDBClient(influx_host, 8086, 'devdbuser', 'Cisc0123', 'devdb')while True:# ----------------------写入内存数据------------------------# cpmCPUMemoryUsedmem_usage = snmpv2_get(router_ip, snmp_community, "1.3.6.1.4.1.9.9.109.1.1.1.1.12.7", port=161)# cpmCPUMemoryFreemem_free = snmpv2_get(router_ip, snmp_community, "1.3.6.1.4.1.9.9.109.1.1.1.1.13.7", port=161)# 对UTC时间做格式化current_time = datetime.datetime.utcnow().isoformat("T")# 组织数据信息cpu_mem_body = [{"measurement": "router_monitor","time": current_time,"tags": {"device_ip": router_ip,"device_type": "IOS-XE"},"fields": {"mem_usage": int(mem_usage[1]),"mem_free": int(mem_free[1]),},}]# 每隔五秒收集数据信息,写入到influxdb中client.write_points(cpu_mem_body)time.sleep(5)

这里的数据信息是一个列表,里面可以存放多个JSON数据:

  1. “measurement”: “router_monitor”,为表名;
  2. “time”: current_time为时间戳,必须存在;
  3. "tags"字段方便搜索;
  4. "fields"字段为记录的数据信息,不能检索。

4.在grafana中创建dashboard:

使用SQL语句,创建dashboard:

语句如下:

SELECT mean("mem_usage")*100/(mean("mem_usage")+mean("mem_free")) FROM "router_monitor" WHERE $timeFilter GROUP  BY time($__interval), "device_ip" fill(none)

参考资料:
https://www.bilibili.com/video/BV1SV41127HU?from=search&seid=13988085653859648559

NetDevOps常用数据库python实战-influxDB_grafana相关推荐

  1. Python操作常用数据库

    Python操作常用数据库 前言 简介 SQLite 连接SQLite 创建数据表 增 删 改 查 MySQL mysql-connector操作MySQL 创建数据表 增 删 改 查 pymysql ...

  2. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1) 1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: ...

  3. Python实战技术 - Python虚拟隔离环境 和 Docker技术

    Python实战技术 - Python虚拟隔离环境 和 Docker技术 已经学过,只想查查手册?--试试直接跳转到命令: (1)使用venv创建相关命令 (2)使用virtualenv创建相关命令 ...

  4. 【Python实战】数据预处理(数据清理、集成、变换、归约)

    [Python实战]数据预处理 前言 数据预处理概述 数据清理 异常数据处理 1.异常数据分析 2.异常数据处理方法 缺失值处理 噪声数据处理 数据集成 1.实体识别 2.冗余属性 3.数据不一致 数 ...

  5. 【Python实战】用Scrapyd把Scrapy爬虫一步一步部署到腾讯云上,有彩蛋

    接着之前的几篇文章说. 我把爬虫已经写好了,而且在本地可以运行了. 这个不是最终的目的啊. 我们是要在服务器上运行爬虫. 利用周末,同时腾讯送的7天云服务器体验也快到期了 就在这里再来一篇手把手的将爬 ...

  6. 100个Python实战练手项目(附源码+素材),学习必备

    前言: 不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了最新32个Python实战项目列表,都有完整且详细的视频教程和 ...

  7. Python实战案例:旅游方面博文的数据分析

    Python实战案例:旅游方面博文的数据分析 一.旅游方面博文数据展示 数据分析的出现便利了每个人,企业,竞争者.在以前的时候,如果想要了解市场的动向,就设计了调查问卷或者现场采访的方式,以至于被很多 ...

  8. 你需要知道的20个常用的Python技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 Python的可读性和简单性是其广受 ...

  9. 送你38个常用的Python库,数值计算、可视化、机器学习等8大领域都有了

    来源:大数据DT(ID:bigdatadt) 作者:李明江 张良均 周东平 张尚佳 内容摘编自<Python3智能数据分析快速入门> 本文约5200字,建议阅读10分钟. 本文为你总结了常 ...

  10. 客户信贷评级 Python 实战

    作者 | 萝卜 来源 | 早起Python(ID:zaoqi-python) 前言 大样本的数据集固然提供了丰富的信息,但也在一定程度上增加了问题的复杂性.如果我们分别对每个指标进行分析,往往得到的结 ...

最新文章

  1. RTL Schematic 与 Technology Schematic的区别?
  2. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
  3. python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...
  4. 互联网安全前景乐观,安全问题不会成为影响互联网应用的障碍
  5. javaEE 飞机大战
  6. python打开csv文件、计算总成绩_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...
  7. eclipse使用maven tomcat插件部署无法关联源代码
  8. 凤凰机器人猜成语答案_看图猜成语:一只手上拿着绳子,旁边有个起吊机
  9. vue.js下载教程
  10. 地理空间搜索 ->R树索引
  11. 基于SprnigBoot+ElementUI 整合Vue案例【公司案件管理系统】
  12. 千字文(粱敕员外散骑侍郎周兴嗣撰)
  13. python长度单位转化_所有长度单位的换算
  14. 【冬季】寒冬已至,让这些公众号温暖你的冬天
  15. 使用Python3自带GUI tkinter 做的图形化操作SQLite3数据库的工具 v1.12 修修补补将就用
  16. 小程序京东首页底部导航栏代码
  17. 【教程】在word中如何替换文字,新手请绕道!
  18. 云计算现在前景如何?怎么转型成为云计算工程师?
  19. 济南商讯在线计算机,迅时IP话机 NRP2000W
  20. 首月流水3亿的暑期档黑马,被外挂所困扰

热门文章

  1. 20191126_2_英文情感分析
  2. 教你如何用机翻软件开拓自己的青青草原
  3. python—csv模块处理单字符分隔符文件
  4. 关于XGB.booster()报错TypeError: 'str' object is not callable的解决方法
  5. 吴恩达深度学习——循环神经网络
  6. 深度学习花书-5.4 估计、偏差和方差
  7. 专访肖仰华:知识图谱迅速“升温”下的学习方法与就业选择
  8. 3分钟tips:Python中的range与xrange
  9. 【keras】有关loss function的定义-返回的是`矩阵`还是`标量`
  10. NASNET-【论文理解】