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