Python+Influxdb+Grafana打造可视化监控

个人随机记录

一.InfluxDB

1.什么是InfluxDB数据库

influxDB(时序数据库),常使用的一种场景:监控数据统计。以时间序列根据统计的数据,利用图形化界面Grafana制作可视化折线图。

2.与传统数据库的区别

传统数据库的概念 influxDB中的名词 MySQL
数据库 database database
数据库中的表 measurement table
表中的一行数据 point column

 

 

 

 

 

point的数据结构由时间戳(time)、标签(tags)、数据(fields)三部分组成,具体含义如下:

point属性 含义
time 数据记录的时间,是主索引(自动生成)
tags 各种有索引的属性
fields 各种value值(没有索引的属性)

 

 

 

 

 

tag set:不同的每组tag key和tag value的集合;

field set:每组field key和field value的集合;

retention policy:数据存储策略(默认策略为autogen)InfluxDB没有删除数据操作,规定数据的保留时间达到清除数据的目的;

series:共同retention policy,measurement和tag set的集合;series(一般由:retention policy, measurement, tag set就共同组成),其含义如下:所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。
3.保留策略(retention policy)

每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,在集群中的副本个数为1,之后用户可以自己设置(查看、新建、修改、删除),例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。
每个数据库可以有多个过期策略:

-- db_name:数据库名    rp_name: 策略名
-- 默认有个策略0s表示永久保存
show retention policies on db_name;  
-- 设置一个策略保留30天
create retention policy rp_name on db_name duration 30d replication 1 default; 
show retention policies on db_name;
-- 修改上个策略为90天
alter retention policy rp_name  on db_name duration 90d replication 1 default;  
show retention policies on db_name; 
-- 删除策略
drop retention policy rp_name on db_name; 

-- 创建数据库时设定策略保留时间
CREATE DATABASE 
[WITH [DURATION ] [REPLICATION ]
      [SHARD DURATION ] [NAME ]]
-- 例如
CREATE DATABASE mydb WITH DURATION 14d

4.常用InfluxQL语句

-- 查看所有的数据库
show databases;

-- 使用特定的数据库
use database_name;

--创建数据库
create database database_name;

--删除数据库
drop database database_name;

-- 查看所有的measurement
show measurements;

-- 查询10条数据
select * from measurement_name limit 10;

-- 查看一个measurement中所有的tag key 
show tag keys

-- 查看一个measurement中所有的field key 
show field keys

-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;

5.influxdb常用查询操作

select * from db_name
select * from db_name limit 2 #如果数据量太大,得使用limit,限制输出多少行
delete from db_name where time=1531992939634316937

6.influxdb内置函数

influxdb提供了一些内置函数,这些函数方便grafana拉取数据。

-- 查询非空值的数量
seltct count(value) from db_name
-- 查询唯一值
select distinct(value) from db_name;
-- 查询平均值
select mean(value) from db_name;
-- 查询总和
select sum(value) from db_name;
-- 查询最大的N个值
select top(value, 5) from db_name;
-- 查询最小的N个值
select bottom(value, 5) from db_name;

二、influxDB + grafana实现可视化监控

思路:

  • 采集(使用Python脚本进行采集)
  • 入库(Python脚本采集完插入Influxdb数据库)
  • 展现(Grafana读取Influxdb的数据进行展现)

1.python操作influxdb数据库需要先安装第三方包(influxdb-5.3.1-py2.py3-none-any.whl)

在线安装:pip install influxdb

离线安装:pip install influxdb-5.3.1-py2.py3-none-any.whl

2.python操作influxdb(测试Demo),把json格式的数据写入influxdb数据库

from influxdb import InfluxDBClient
from datetime import datetime
import time
import math

collection_name = "xingyu"
current_count = 1
increase_amount = 1
co_size = 1
increase_co_size = 1
# influx配置
client = InfluxDBClient(host='localhost', port=8086)
database_list = client.get_list_database()
print(database_list)
# 删除数据库
client.drop_database('Spider')
# 创建数据库
client.create_database('Spider')
# 切换至对应数据库才可以操作数据库对象
client.switch_database('Spider') 

while True:
    time.sleep(5)
    current_count = current_count + 2
    increase_amount = increase_amount + 20
    co_size = co_size * 1.5
    increase_co_size = increase_co_size + 2
    current_count = math.sin(current_count )
    increase_amount = math.cos(increase_amount )
    co_size = math.tan(co_size )
    increase_co_size = math.cos(increase_co_size )
    current_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
    json_body = [
                {
                    "measurement": "testTable",
                    "time": current_time,
                    "tags": {
                        "spider_name": collection_name
                    },
                    "fields": {
                        "count": current_count,
                        "increase_count": increase_amount,
                        "size": co_size,
                        "increase_size": increase_co_size

                    }
                }
            ]
    print(json_body)
    client.write_points(json_body)

3.展现

连接数据源-》配置Query-》Visualization-》General-》Alert

注:

Influxdb:时序数据库 

使用版本:influxdb-1.7.7_windows_amd64 

启动:influxd.exe、 influx.exe    http://localhost:8086

Chronograf:时序数据库的操作界面

启动:chronograf.exe   默认账户admin, 密码:admin  http://localhost:8888

Grafana:一个可视化面板DashBoard,有着非常漂亮的图表和布局

启动:grafana-server.exe    http://localhost:3000

 

你可能感兴趣的:(Python,可视化监控)