参考InfluxDB 入门

一、简介

1、什么是InfluxDB
InfluxDB(时序数据库),常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;

可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后制作图表做统计;

2、与传统数据库相关区别

和传统数据库相比,influxdb在相关概念上有一定不同,具体如下

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排列组合算出来。

示例数据如下: 其中census是measurement,butterflies和honeybees是field key,location和scientist是tag key

name: census
————————————
time                 butterflies     honeybees     location     scientist
2015-08-18T00:00:00Z      12             23           1         langstroth
2015-08-18T00:00:00Z      1              30           1         perpetua
2015-08-18T00:06:00Z      11             28           1         langstroth
2015-08-18T00:06:00Z      11             28           2         langstroth

需要注意的是,influxdb不需要像传统数据库一样创建各种表,其表的创建主要是通过第一次数据插入时自动创建,如下:

insert mytest, server=serverA count=1,name=5 //自动创建表
“mytest”,“server” 是 tags,“count”、“name” 是 fields
fields 中的 value 基本不用于索引insert + measurement + "," + tag=value,tag=value + + field=value,field=value
tag与tag之间用逗号分隔;field与field之间用逗号分隔
tag与field之间用空格分隔
tag都是string类型,不需要引号将value包裹
field如果是string类型,需要加引号

3、保留策略(retention policy)

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

show retention policies on "db_name"

Shard 在 influxdb中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。
这样做的目的就是为了可以通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效。
建议在数据库建立的时候设置存储策略,不建议设置过多且随意切换

create database testdb2 with duration 30d

4、常用InfluxQL语句

-- 查看所有的数据库
show databases;-- 使用特定的数据库
use database_name;--创建数据库
create database wangxiaoyu;--删除数据库
drop database wangxiaoyu;-- 查看所有的measurement
show measurements;-- 查询10条数据
select * from measurement_name limit 10;-- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式-- 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339-- 查看一个measurement中所有的tag key
show tag keys-- 查看一个measurement中所有的field key
show field keys-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;

二、下载安装

1、下载
下载地址 https://dl.influxdata.com/influxdb/releases/influxdb-1.6.0.x86_64.rpm
百度网盘下载链接: https://pan.baidu.com/s/1c6V7qmiKXJJpYIT-D1vz6g 密码: 37i4

2、安装完后默认会有个influxdb用户

yum localinstall influxdb-1.6.0.x86_64.rpm

3、配置文件
influxdb的配置/etc/influxdb/influxdb.conf

[meta]dir = "/usr/local/influxdb/meta"
[data]dir = "/usr/local/influxdb/data"wal-dir = "/usr/local/influxdb/wal"
[coordinator]
[retention]
[shard-precreation]
[monitor]
[http]enable = truebind-address = "127.0.0.1:8086"
[ifql]
[logging]
[subscriber]
[[graphite]]
[[collectd]]
[[opentsdb]]
[[udp]]
[continuous_queries]

配置说明

data  #存放最终存储的数据,文件以.tsm结尾
meta #存放数据库元数据 wal  #存放
wal #存放预写日志文件,以 .wal 结尾

创建目录更新权限

mkdir -pv /usr/local/influxdb/
chown -R influxdb:influxdb /usr/local/influxdb/

4、influxdb的启动和开机自启

systemctl restart influxdb
systemctl enable influxdb

观察进程和监听端口

ps -ef | grep influxdb
netstat -tlunp | grep influxd

5、influxdb数据库开启认证

influx --help #查看influx客户端的使用帮助
influx  #默认连接到localhost:8086
show users #查看所有用户,默认没有
CREATE USER "wangxiaoyu" WITH PASSWORD '123456' WITH ALL PRIVILEGES #创建wangxiaoyu用户,密码123456,管理员权限

influxdb增加auth配置如下,只需要在[http]这个底下添加,并重启influxdb(systemctl restart influxdb)

auth-enabled = true

使用用户名密码登录influxdb

influx #无指定用户名密码的话,会报错
influx -username 'wangxiaoyu' -password '123456'
influx -username 'wangxiaoyu' -password ''

三、简单操作

1、登陆然后创建和删除一个数据库

influx -username 'wangxiaoyu' -password '123456'
> create database wangxiaoyu;
> show databases;
> drop database wangxiaoyu;
> show databases;


2、measurement(类似于表)操作

create database wangxiaoyu;   #创建一个数据库
use wangxiaoyu;               #使用这个数据库
show measurements;            #查看表,这里还没有表
insert cpuinfo,item1=wangxiaoyu_cpu.idle,item2=itemtest2 value=90 #插入数据,如果没有这个表会自动创建,无需创建measurement,可直接插入数据。
show measurements;            #查看表,这里有刚才插入时创建的表
select * from cpuinfo;        #查询所有cpuinfo表中的数据
drop measurement cpuinfo      #删除表

3、influxdb常用查询操作

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

4、influxdb数据保留时间设置

show retention policies on wangxiaoyu;  #默认有个策略0s表示永久保存
create retention policy rp_wangxiaoyu on wangxiaoyu duration 30d replication 1 default; #设置一个策略保留30天
show retention policies on wangxiaoyu;
alter retention policy rp_wangxiaoyu on wangxiaoyu duration 90d replication 1 default;  #修改上个策略为90天
show retention policies on wangxiaoyu;
drop retention policy rp_wangxiaoyu on wangxiaoyu;  #删除策略


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

查询非空值的数量

insert cpuinfo,item=wangxiaoyu_cpu.idle value=90
seltct count(value) from cpuinfo


查询唯一值

select distinct(value) from cpuinfo;


查询平均值

seelect mean(value) from cpuinfo;

查询总和

select sum(value) from cpuinfo

查询最大的N个值

select top(value,3) from cpuinfo

查询最小的N个值

select bottom(value,3) from cpuinfo

四、Grafana安装及influxdb数据源配置

1、grafana的下载和安装

可以自己找版本高的,现在好像已经到7点多版本了
https://grafana.com/grafana/download

下载地址: https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1.x86_64.rpm

安装

yum localinstall grafana-5.2.1-1.x86_64.rpm

grafana的启动和开机自启

systemctl restart grafana-server
systemctl enable grafana-server

2、访问grafana
http://ip:3000
grafana的默认用户名密码都是admin,第一次登录会要求更改密码

3、配置influxdb的数据源,用户名和密码



4、Influxdb手动插入数据

influx -username 'wangxiaoyu' -password '123456'
use wangxiaoyu
insert cpuinfo,item=wangxiaoyu_cpu.idle value=90
insert cpuinfo,item=wangxiaoyu_cpu.idle value=80
insert cpuinfo,item=wangxiaoyu_cpu.idle value=80

5、创建一个dashboard仪表盘并配置

创建一个图表,然后选择刚才设置的influxdb数据源,并且配置相应的数据条件

可以看到刚才插入的数据

右上角可以设置时间段及自动刷新

五、influxdb+grafana监控CPU

1、监控思路

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

2、Python操作Influxdb数据库得先安装扩展

yum install epel-release -y #安装epel yum源
yum install python2-pip -y #安装pip工具
pip install influxdb -i http://pypi.douban.com/simple --trusted-host pypi.douban.com #安装Influxdb扩展yum install python-devel gcc -y
pip install psutil -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  #安装psutil模块采集硬件信息

3、python操作influxdb(/usr/local/influxdb/python/test.py)

from influxdb import InfluxDBClient
client = InfluxDBClient('127.0.0.1', 8086, 'wangxiaoyu', '123456', 'wangxiaoyu')
data_list = [{'measurement': 'mytest', 'tags': {'item':'host_ip_item'}, 'fields': {'value': 100}}]
client.write_points(data_list)

然后执行一下脚本

python /usr/local/influxdb/python/test.py

进入数据库查看一下,有插入数据

4、采集cpu load脚本(/usr/local/influxdb/python/loadavg.py)

from influxdb import InfluxDBClient
import commands
client = InfluxDBClient('127.0.0.1', 8086, 'wangxiaoyu', '123456', 'wangxiaoyu')status,loadavg1 = commands.getstatusoutput(" cat /proc/loadavg |awk '{print $1}' ")
status,loadavg5 = commands.getstatusoutput(" cat /proc/loadavg |awk '{print $2}' ")
status,loadavg15 = commands.getstatusoutput(" cat /proc/loadavg |awk '{print $3}' ")data_list = [{'measurement': 'loadavg', 'tags': {'item': 'wangxiaoyu_10.0.0.101_loadavg1'}, 'fields': {'value': float(loadavg1)}}]
client.write_points(data_list)
data_list = [{'measurement': 'loadavg', 'tags': {'item': 'wangxiaoyu_10.0.0.101_loadavg5'}, 'fields': {'value': float(loadavg5)}}]
client.write_points(data_list)
data_list = [{'measurement': 'loadavg', 'tags': {'item': 'wangxiaoyu_10.0.0.101_loadavg15'}, 'fields': {'value': float(loadavg15)}}]
client.write_points(data_list)

添加到linux的crontab任务(/etc/crontab)

* * * * * root python /usr/local/influxdb/python/loadavg.py >/dev/null 2>/dev/null

5、创建一个图表,名称为CPU load监控 然后进行配置

可以看到监控数据

6、python监控cpu时间并入influxdb脚本(/usr/local/influxdb/python/cpu_times_percent.py)

from influxdb import InfluxDBClient
import psutilcpu_times_percent = psutil.cpu_times_percent(interval=1)
client = InfluxDBClient('127.0.0.1', 8086, 'wangxiaoyu', '123456', 'wangxiaoyu')data_list = [{'measurement': 'cpu_times_percent', 'tags': {'item': 'wangxiaoyu_10.0.0.101_user'}, 'fields': {'value': float(cpu_times_percent.user)}}]
client.write_points(data_list)
data_list = [{'measurement': 'cpu_times_percent', 'tags': {'item': 'wangxiaoyu_10.0.0.101_system'}, 'fields': {'value': float(cpu_times_percent.system)}}]
client.write_points(data_list)
data_list = [{'measurement': 'cpu_times_percent', 'tags': {'item': 'wangxiaoyu_10.0.0.101_iowait'}, 'fields': {'value': float(cpu_times_percent.iowait)}}]
client.write_points(data_list)
data_list = [{'measurement': 'cpu_times_percent', 'tags': {'item': 'wangxiaoyu_10.0.0.101_idle'}, 'fields': {'value': float(cpu_times_percent.idle)}}]
client.write_points(data_list)

添加到linux的crontab任务(/etc/crontab)

* * * * * root python /usr/local/influxdb/python/cpu_times_percent.py >/dev/null 2>/dev/null

7、创建一个图表,名为cpu time 占比监控 并配置

单位设为百分比%

六、influxdb+grafana监控内存磁盘流量

1、python监控内存并入influxdb脚本(/usr/local/influxdb/python/virtual_memory.py)

from influxdb import InfluxDBClient
import psutilvirtual_memory = psutil.virtual_memory()
client = InfluxDBClient('127.0.0.1', 8086, 'wangxiaoyu', '123456', 'wangxiaoyu')data_list = [{'measurement': 'memory', 'tags': {'item': 'total'}, 'fields': {'value': float(virtual_memory.total)}}]
client.write_points(data_list)
data_list = [{'measurement': 'memory', 'tags': {'item': 'available'}, 'fields': {'value': float(virtual_memory.available)}}]
client.write_points(data_list)
data_list = [{'measurement': 'memory', 'tags': {'item': 'used'}, 'fields': {'value': float(virtual_memory.used)}}]
client.write_points(data_list)

添加到linux的crontab任务(/etc/crontab)

* * * * * root python /usr/local/influxdb/python/virtual_memory.py >/dev/null 2>/dev/null

2、创建一个图表名为内存监控并进行配置

单位选择data(iec) 下的bytes

内存的换算一般都是用的1024的比例,Grafana上两个单位
data(iec) 这个是按照1024比例来算的
data(metric) 这个是按照1000比例来算的

lor_FFFFFF,t_70#pic_center)
3、然后查看图表数据

4、python监控磁盘并入influxdb(/usr/local/influxdb/python/disk.py)

from influxdb import InfluxDBClient
import psutilclient = InfluxDBClient('127.0.0.1', 8086, 'wangxiaoyu', '123456', 'wangxiaoyu')for one_disk in psutil.disk_partitions():mountpoint = one_disk.mountpointdiskused = psutil.disk_usage(mountpoint).percentdata_list = [{'measurement': 'disk', 'tags': {'item': 'diskused.%s' % mountpoint}, 'fields': {'value': float(diskused)}}]client.write_points(data_list)

添加到linux的crontab任务(/etc/crontab)

* * * * * root python /usr/local/influxdb/python/disk.py >/dev/null 2>/dev/null

5、创建一个图表名为磁盘监控然后配置,单位为百分比

6、然后查看图表数据

7、python监控流量并入influxdb(/usr/local/influxdb/python/traffic.py)

from influxdb import InfluxDBClient
import psutilclient = InfluxDBClient('127.0.0.1', 8086, 'wangxiaoyu', '123456', 'wangxiaoyu')for netname, netinfo in psutil.net_io_counters(pernic=True).items():bytes_sent = netinfo.bytes_sentbytes_recv = netinfo.bytes_recvdata_list = [{'measurement': 'traffic', 'tags': {'item': 'bytes_sent.%s' % netname}, 'fields': {'value': bytes_sent}}]client.write_points(data_list)data_list = [{'measurement': 'traffic', 'tags': {'item': 'bytes_recv.%s' % netname}, 'fields': {'value': bytes_recv}}]client.write_points(data_list)

添加到linux的crontab任务

* * * * * root python /usr/local/influxdb/python/traffic.py >/dev/null 2>/dev/null

8、创建一个图表名为流量监控然后配置

#pic_center)
流量单位说明(每秒的流量,无负数)
non_negative_derivative(mean(“value”), 1s) 返回在一个series中的一个字段中值的变化的非负速率
通过psutil收集到的是bytes,流量单位一般bit,所以说还乘以8

单位选择bits/sec

9、然后查看图表数据

说明
influxdb+grafana的组合监控硬件并不是好选择,如果熟悉Zabbix的话,推荐Zabbix来监控硬件。
influxdb+grafana的组合用来监控业务数据是非常好用的。

influxdb+grafana 监控相关推荐

  1. influxdb+grafana监控网络情况

    日常的服务器监控中,网络监控是必不可少的,而influxdb+grafana是我在工作中经常用到的,接下来做个部署流程记录,以下服务器基于centos7: 1.安装influxdb 下载安装包进行yu ...

  2. cAdvisor+InfluxDB+Grafana 监控Docker

    容器的监控方案其实有很多,有docker自身的docker stats命令.有Scout.有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxD ...

  3. Jmeter + Grafana + InfluxDB 性能测试监控

    阅读目录 1. 安装InfluxDB 2. 安装Grafana 3. 配置Jmeter 序章 前几天在群里看到大神们在讨论Jmeter + InfluxDB + Grafana监控.说起来Jmeter ...

  4. telegraf监控mysql数据库_部署Telegraf+Influxdb+Grafana 架构来监控 MySQL

    前段时间小编写了一篇:使用Nginx+Telegraf+Influxb+Grafana构建高逼格Nginx集群监控系统!文章,详细了介绍了 采集器telegraf, 时序数据库influxdb , 数 ...

  5. grafana模板_EMQ X + InfluxDB + Grafana:物联网数据监控可视化方案

    本文以常见物联网使用场景为例,介绍了如何利用 EMQ X 消息中间件与开源数据可视化方案 InfluxDB + Grafana ,将物联网设备大量基于时序的数据便捷地展示出来. 在物联网项目中接入平台 ...

  6. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql 转载于:https://www.cnblogs.com/gaoyuechen/p/10081026. ...

  7. 基于InfluxDB+Grafana打造大数据监控利器--转

    这是一个大数据爆发的时代.面对信息的激流.多元化数据的涌现,我们在获取.存储.传输.理解.分析.应用.维护大数据时,无疑需要一种便捷的信息交流通道,以便快速.有效.准确地理解和驾驭这个过程.本文将通过 ...

  8. Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警

    前言 这次主要分享通过Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警方案.通过执行耗时,定位哪些接口拖累了服务的性能:通过请求频次,设置适当的限流 ...

  9. Kafka JMX 监控 之 jmxtrans + influxdb + grafana

    目录 效果图 环境准备 安装 influxdb 安装我们刚刚下载 influxdb rpm文件 查看默认配置 修改参数 启动 influxdb 查看启动状态 设置基本配置 influxdb 其他命令扩 ...

最新文章

  1. 图灵奖得主杨立昆:AI+时代,未来将会如何被改变
  2. L型四驱越野模型车初期磨合指南
  3. python编程培训-课程:尹会生的Python编程培训课程
  4. C++——this指针
  5. boost::allocator_value_type的实例
  6. JZOJ5146:港湾
  7. 95-50-020-java.nio.channels-NIO-NIO概览
  8. [转]加班,加班,加班
  9. Python入门--函数参数的定义,以及print输出格式的设置
  10. 【积跬步以至千里】唧唧Down下载视频无法正常合并分段文件解决方案
  11. Windows server 2008 R2和Windows server 2003系统有什么区别?开服用什么系统的更好?
  12. 信息技术c语言试题,全国信息技术水平考试C语言考试试卷.doc
  13. 3.12_ValueError: x and y must have same first dimension, but have shapes (100,) and (1,)
  14. 编写js代码,点击相应的按钮使得网页背景颜色发生改变
  15. 关注家庭教育-父母对子女的期望
  16. 使枚举成功的USB设备成为WINUSB设备
  17. N-最短路径分词算法
  18. keytool运行错误
  19. 2022年十大知名堡垒机品牌你真的知道吗?
  20. java循环输出abcd_Java线程输出ABCD

热门文章

  1. 通过抖音接口获取账号视频的播放量,点赞,评论,转发数据
  2. 分手后她又有了男朋友。可是还是跟我深夜电话,直到她睡觉,她也没有想跟我复合我想知道这是为什么?
  3. 健身瑜伽游泳篮球馆多门店私教课程预约会员卡小程序开发
  4. 5760php,学习PHP就来六星教育,助你进阶中高级、架构师
  5. ZZULIOJ周赛 问题 E: 维克托
  6. ios卡牌游戏项目源码
  7. 较真儿地聊聊,互联网公司为啥喜欢用飞书?
  8. 数学建模笔记(十四):马氏链模型
  9. pageable设置size_分页工具一Pageable与Page
  10. Processing of multipart/form-data request failed. Stream ended unexpectedly