Influxdb
Influxdb的安装配置启动
influxdb简介
1、influxdb使用GO语言开发,是一种时序序列数据库
2、influxdb的查询语句类似于mysql的select * from mysql.user
3、schemaless(无模式),结构型数据库类似mysql需要先定义列,influxdb无需预先定义,无结构的
4、数据库 -->measurement(类似于表)-->points(数据,每一条数据就是一个point)
5、它有三大特性:
1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等);
2. Metrics(度量):你可以实时对大量数据进行计算;
3. Eevents(事件):它支持任意的事件数据。
influxdb的points数据说明
1、time,默认存储数据会有时间,时间无需关心,会帮助我们自动插入
2、tags:用来存储数据标识,各种有索引的属性
3、fields:用于存储数据,没有索引
influxdb的下载和安装
centos下载连接:https://dl.influxdata.com/influxdb/releases/influxdb-1.6.0.x86_64.rpm
Ubantu下载连接:https://dl.influxdata.com/influxdb/releases/influxdb_1.6.0_amd64.deb
通过wget命令下载:wget 下载连接
centos安装:yum localinstall influxdb-1.6.0.x86_64.rpm
Ubantu安装:dpkg -i influxdb_1.6.0_amd64.deb
安装完成后默认会有一个influxdb用户
root@xdl-gj:/etc# cat /etc/passwd | grep influxdb
influxdb:x:999:999::/var/lib/influxdb:/bin/false
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 = true
bind-address = "127.0.0.1:8086"
[ifql]
[logging]
[subscriber]
[[graphite]]
[[collectd]]
[[opentsdb]]
[[udp]]
[continuous_queries]
配置说明:
data:存放最终存储的数据,文件以.tsm结尾
meta:存放数据库元数据
wal:存放预写日志文件
创建目录更新权限
mkdir -pv /usr/local/influxdb,说明:-p表示递归创建目录,-v表示创建新目录显示信息
root@xdl-gj:/etc/influxdb# mkdir -pv /usr/local/influxdb
mkdir: 已创建目录 '/usr/local/influxdb'
chown -R influxdb:influxdb /usr/local/influxdb/
influxdb的启动和开机自启动
systemctl restart influxdb
systemctl enable influxdb
systemctl status influxdb #查看状态
systemctl stop influxdb #停止influxdb服务
观察进程和监听端口
ps auxf
root@xdl-gj:/etc/influxdb# ps auxf | grep influxdb
influxdb 24525 0.1 0.5 738072 20792 ? Ssl 22:51 0:00 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
netstat -tulnp
root@xdl-gj:/etc/influxdb# netstat -tulnp | grep influxd
tcp 0 0 127.0.0.1:8086 0.0.0.0:* LISTEN 24525/influxd
tcp 0 0 127.0.0.1:8088 0.0.0.0:* LISTEN 24525/influxd
influxdb开启登录认证
操作influxdb数据库准备开启认证
influxdb --help :查询influx客户端的使用帮助
influx :默认连接到localhost:8086
show users:查看所有用户,默认没有
create user "xudonglin" with password '123456' with all privileges:创建xudonglin用户,密码为123456 并具有管理员权限
influxdb增加auth配置如下,并重启influxd(systemctl restart influxd)
只需要在influxdb.conf配置文件中[http]下面添加:auth-enabled = true
使用用户名密码登录:
1、influx -username xudonglin -password 123456:可以直接登录
2、influx -username xudonglin -password '' :执行这个命令之后再输入密码
3、influx 先进行连接,之后输入auth命令,进行用户登录
root@xdl-gj:~# influx
Connected to http://localhost:8086 version 1.6.0
InfluxDB shell version: 1.6.0
> auth
username: xudonglin
password:
安全性强度
本地 > 内网 > 公网
influxdb数据库的简单操作
数据库(database)操作
show databases :查询所有的数据库
create database xudonglin :创建数据库
drop database xudonglin :删除数据库
数据表(measurement)操作
use xudonglin:操作xudongln数据库
show measurements :查询当前数据库下所有的数据表
insert cpuinfo,item=xudonglin_192.168.0.105_cpu.idle value=80 1564217916148774054 :无需创建measurement,可直接插入数据
插入数据的格式:insert 数据表,tags fileds time
说明:time不写会默认插入当前的时间,中间不要出现多余的空格
select * from cpuinfo :查询所有cpuinfo的数据
drop measurement cpuinfo :删除数据表
influxdb常用查询操作
select * from cpuinfo
select * from cpuinfo limit 2 :如果数据量太大,使用limit,限制输出的行数
delete from cpuinfo where time=1564217916148674054:删除一条数据,但是influxdb一般不会手动删除数据,主要根据策略自动删除
influxdb数据保留事件设置
show retention policies on xudonglin :查看xudongln数据库表中数据保存的事件,duration为0s时表示永久有效
create retention policy rp_xudonglin on xudonglin duration 30d replication 1 default
说明:创建一个名字为rp_xudonglin的保存策略,保存时间为30天
如果表中有多个策略,可以通过select * from 策略名.表名,这张表这个策略下的数据
alter retention policy rp_xudonglin on xudonglin duration 2d replication 1 defalut:修改策略
drop retention policy re_xudonglin on xudonglin:删除策略,删除后这个策略的数据也将被删除,所以一般不要删除
influxdb使用易看的事件格式
1、使用precision rfc339
2、连接时指定:influx -host 192.168.0.105 -username xudonglin -password '123456' -precision rfc3339
influxdb自带函数查询
influxdb提供了一些内置函数,这些函数方便grafana拉取数据
查询非空的数量
select count(value) from cpuinfo
查询唯一值
select distinct(value) from cpuinfo
查询平均值
select mean(value) from cpuinfo
查询总和
select sum(value) from cpuinfo
查询最大的N个值
select bottom(value,0) from cpuinfo
查询最小的N个值
select bottom(value,1) from cpuinfo
Grafana的安装和influxdb数据源配置
grafana介绍
grafana是一个可视化面板,有着非常漂亮的图表,布局方便
数据源可以使用zabbix、influxdb等
grafana的下载和安装
Ubantu:
wget https://dl.grafana.com/oss/release/grafana_6.2.5_amd64.deb
dpkg -i grafana_6.2.5_amd64.deb
centos:
wget https://dl.grafana.com/oss/release/grafana-6.2.5-1.x86_64.rpm
yum localinstall grafana-6.2.5-1.x86_64.rpm
grafana的启动和开机自启动
systemctl restart granfana-server
systemctl enable grafanna-server
systemctl status grafana-server
访问grafana测试
http://ip:3000
grafana配置influxdb数据源
grafana的默认用户名密码都是admin,第一次登录会要求更改密码
配置influxdb的数据源(Data Source),用户名和密码
Grafana+infludb绘图基础
Grafana配置图形展现
流程:先创建dashboard,然后才能创建图像
创建dashboard
修改dashboard
删除dashboard
创建Graph Panel(值为整形、浮点型的可以创建图形)
手动插入数据观察
先开启Grafana自动刷新
插入数据
图形设置
设置图形标题
配置透明度
显示当前值、最大、最小、平均值
左y轴的单位可以指定
把每个值的point都显示出来
布局可以随意拖拉
可以复制图形的配置
可以把值表格展现(表格可以排序)
influxdb+grafana监控cpu
监控思路
1、采集数据(使用python脚本进行采集)
2、入库(python脚本采集完插入influxdb数据库)
3、展示(Grafana读取influxd数据进行展示)
首先了解一下/proc/loadavg文件
系统平均负载个字段的含义
xdl@xdl-gj:~/python$ cat /proc/loadavg
0.17 0.16 0.10 2/957 19900
前三个分别表示1、 5、 15分钟内的平均进程数
第四个分子表示正在运行的进程数,分母表示进程总数
最后一个表示最近运行的进程ID
from influxdb import InfluxDBClient import os # 连接influxdb数据(host, port, username, password, database) client = InfluxDBClient("192.168.0.105", 8086, 'xudonglin', '123456', 'xudonglin') # 获取1、 5、 15 分钟内的平均进程数 loadavg1 = os.popen("cat /proc/loadavg | awk '{print $1}'").read() loadavg5 = os.popen("cat /proc/loadavg | awk '{print $2}'").read() loadavg15 = os.popen("cat /proc/loadavg | awk '{print $3}'").read() data_json = [ {'measurement': 'loadavg', 'tags': { 'item': 'xudonglin_192.168.0.105_loadavg1' } , 'fields': { 'value': float(loadavg1) }, }, {'measurement': 'loadavg', 'tags': { 'item': 'xudonglin_192.168.0.105_loadavg5' } , 'fields': { 'value': float(loadavg5) }, }, {'measurement': 'loadavg', 'tags': { 'item': 'xudonglin_192.168.0.105_loadavg15' } , 'fields': { 'value': float(loadavg15) }, }, ] client.write_points(data_json)
将脚本添加到linux的crontab任务,然后图表展示(/etc/crontab)
* * * * * xdl python3 /data/loadavg.py >/dev/null 2>/dev/null
python监控cpu时间并存入influxdb
from influxdb import InfluxDBClient import psutil # 连接influxdb数据(host, port, username, password, database) client = InfluxDBClient("192.168.0.105", 8086, 'xudonglin', '123456', 'xudonglin') cpu_times_percent = psutil.cpu_times_percent(interval=1) user = cpu_times_percent.user system = cpu_times_percent.system iowait = cpu_times_percent.iowait idle = cpu_times_percent.idle data_json = [ {'measurement': 'cpu_times_percent', 'tags': { 'item': 'xudonglin_192.168.0.105_user' } , 'fields': { 'value': user }, }, {'measurement': 'cpu_times_percent', 'tags': { 'item': 'xudonglin_192.168.0.105_system' } , 'fields': { 'value': system }, }, {'measurement': 'cpu_times_percent', 'tags': { 'item': 'xudonglin_192.168.0.105_iowait' } , 'fields': { 'value': iowait }, }, {'measurement': 'cpu_times_percent', 'tags': { 'item': 'xudonglin_192.168.0.105_idle' } , 'fields': { 'value': idle }, }, ] client.write_points(data_json)
添加到linux的crontab任务,然后图表展示观察
* * * * * xdl python3 /data/cpu_times_percent.py >/dev/null 2>/dev/null
influxdb+Granfana监控内存磁盘流量
python监控内存并入influxdb
from influxdb import InfluxDBClient import psutil # 连接influxdb数据(host, port, username, password, database) client = InfluxDBClient("192.168.0.105", 8086, 'xudonglin', '123456', 'xudonglin') virtual_memory = psutil.virtual_memory() total = virtual_memory.total available = virtual_memory.available used = virtual_memory.used data_json = [ {'measurement': 'memory', 'tags': { 'item': 'total' } , 'fields': { 'value': total }, }, {'measurement': 'memory', 'tags': { 'item': 'available' } , 'fields': { 'value': available }, }, {'measurement': 'memory', 'tags': { 'item': 'used' } , 'fields': { 'value': used }, }, ] client.write_points(data_json)
添加到linux的crontab任务,然后图标展示观察
* * * * * xdl python3 /data/memory.py >/dev/null 2>/dev/null
内存的换算一般是用的1024的比例,Grafana上有两个单位
1、data(iec)这个是按照1024的比例换算的
2、data(metric)这个是按照1000比来换算的
python监控磁盘并存入infludb
from influxdb import InfluxDBClient import psutil # 连接influxdb数据(host, port, username, password, database) client = InfluxDBClient("192.168.0.105", 8086, 'xudonglin', '123456', 'xudonglin') # 获取所有磁盘 for one_disk in psutil.disk_partitions(): mountpoint = one_disk.mountpoint diskused = psutil.disk_usage(mountpoint).percent data_list = [ {'measurement': 'disk', 'tags': { 'item': 'diskused.%s' % mountpoint }, 'fields': { 'value': float(diskused) } } ] client.write_points(data_list)
添加到linux的crontab任务,然后图标展示观察
* 1 * * * xdl python3 /data/disk.py >/dev/null 2>/dev/null #每小时采集一次
python监控流量并存入influxdb
from influxdb import InfluxDBClient import psutil # 连接influxdb数据(host, port, username, password, database) client = InfluxDBClient("192.168.0.105", 8086, 'xudonglin', '123456', 'xudonglin') # 监控每个网卡的发送流量和接收流量 for netname, netinfo in psutil.net_io_counters(pernic=True).items(): bytes_sent = netinfo.bytes_sent bytes_recv = netinfo.bytes_recv data_list = [ {'measurement': 'traffic', 'tags': { 'item': 'bytes_sent.%s' % netname }, 'fields': { 'value': bytes_sent } }, {'measurement': 'traffic', 'tags': { 'item': 'bytes_recv.%s' % netname }, 'fields': { 'value': bytes_recv } } ] client.write_points(data_list)
添加定时任务
* * * * * xdl python3 /data/traffic.py >/dev/null 2>/dev/null
流量单位说明(每秒的流量,无负数)
non_negative_derivative(mean('value'), 1s)
通过psutil收集到的是bytes,流量单位一般是bit,所以需要乘以8
说明:
influxdb+grafana的组合监控硬件并不是好选择,如果熟悉Zabbix的话,推荐Zabbix来监控硬件
influxdb+grafana的组合来监控业务数据是非常好用的