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的组合来监控业务数据是非常好用的

 

  

 

  

 

    

 

      

    

 

    

    

 


 

  

  

 

 

 

 

 

 

  

posted @ 2019-07-26 16:48  xdl_smile  阅读(2025)  评论(0编辑  收藏  举报