Influxdb

Influxdb的安裝配置啓動python

  influxdb簡介mysql

    一、influxdb使用GO語言開發,是一種時序序列數據庫linux

    二、influxdb的查詢語句相似於mysql的select * from mysql.usersql

    三、schemaless(無模式),結構型數據庫相似mysql須要先定義列,influxdb無需預先定義,無結構的shell

    四、數據庫 -->measurement(相似於表)-->points(數據,每一條數據就是一個point)數據庫

    五、它有三大特性:
           1. Time Series (時間序列):你能夠使用與時間有關的相關函數(如最大,最小,求和等);
           2. Metrics(度量):你能夠實時對大量數據進行計算;
           3. Eevents(事件):它支持任意的事件數據。
json

  influxdb的points數聽說明c#

    一、time,默認存儲數據會有時間,時間無需關心,會幫助咱們自動插入centos

    二、tags:用來存儲數據標識,各類有索引的屬性安全

    三、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

  使用用戶名密碼登陸:

    一、influx -username xudonglin -password 123456:能夠直接登陸

    二、influx -username xudonglin -password ''     :執行這個命令以後再輸入密碼

    三、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使用易看的事件格式

    一、使用precision rfc339

    二、鏈接時指定: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

  監控思路

    一、採集數據(使用python腳本進行採集)

    二、入庫(python腳本採集完插入influxdb數據庫)

    三、展現(Grafana讀取influxd數據進行展現)

  首先了解一下/proc/loadavg文件

    系統平均負載個字段的含義

      xdl@xdl-gj:~/python$ cat /proc/loadavg
      0.17 0.16 0.10 2/957 19900

      前三個分別表示一、 五、 15分鐘內的平均進程數

      第四個分子表示正在運行的進程數,分母表示進程總數

      最後一個表示最近運行的進程ID

from influxdb import InfluxDBClient
import os

# 鏈接influxdb數據(host, port, username, password, database)
client = InfluxDBClient("192.168.0.105", 8086, 'xudonglin', '123456', 'xudonglin')
# 獲取一、 五、 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上有兩個單位

    一、data(iec)這個是按照1024的比例換算的

    二、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的組合來監控業務數據是很是好用的

相關文章
相關標籤/搜索