看一下效果圖: InfulxDb 官方網站:https://portal.influxdata.com/downloads/ docker 安裝influxdb資料庫 chronograf可視化工具(非必要,只是可以web訪問,類似PHPMySQL) 啟動influxdb,其中 v參數表示將dock ...
看一下效果圖:
InfulxDb
官方網站:https://portal.influxdata.com/downloads/
docker
docker pull influxdb
安裝influxdb資料庫
docker pull quay.io/influxdb/chronograf:1.8.4
chronograf可視化工具(非必要,只是可以web訪問,類似PHPMySQL)
docker run -d -p 8086:8086 -v /var/lib/influxdb:/var/lib/influxdb --name influxdb influxdb
啟動influxdb,其中-v參數表示將docker內的文件夾映射到本地,冒號前為本地路徑,冒號後為docker內路徑。-p表示映射埠,建議不使用預設的8086埠,比如-p 2222:8086
。
Windows
chronograf Windows可執行文件下載地址
influxdb Windows可執行文件下載地址
Windows運行很簡單:influxd.exe -config influxdb.conf(註意不是少打了一個b)
當然運行之前可以修改influxdb.conf配置文件,主要修改欄位:
bind-address = "0.0.0.0:8088"
[meta]
dir = "G:/Grafana/influxdb/meta"
[data]
dir = "G:/Grafana/influxdb/data"
wal-dir = "G:/Grafana/influxdb/wal"
[http]
auth-enabled = true # 開啟http密碼驗證
不過linux還是建議docker安裝,Windows可以選擇可執行文件,也可以docker,就看你是不是Windows10專業版了(因為Windows10專業版安裝docker很簡單)。
創建管理員用戶
啟動influxdb後,運行influxdb
(windows先在cmd下cd到下載的influx.exe所在目錄然後輸入influx.exe)命令,輸入一下命令即可
create user admin with password ‘admin’ with all privileges
註意修改admin賬號和密碼兩個的值, 如果不是管理員無法操作資料庫,不知道怎麼處理,那就直接使用管理員吧
開啟http auth驗證
只需要按上面的配置文件修改就行,這裡說一下如何修改docker內的文件,直接看命令( 命令中的influxdb:為docker啟動時-name指定的名稱,也可以是容器ID):
docker cp ./influxdb.conf influxdb:/etc/influxdb/influxdb.conf
當然這個命令也支持將docker內的文件拷貝出來
docker cp influxdb:/etc/influxdb/influxdb.conf ./influxdb.conf
python influxdb
influxdb的語句其實和MySQL的差不多。而且python庫也封裝了一些常用的命令,只需調用函數即可執行相應的功能,當然查詢語句還是要自己寫的。
具體方法請參考官方文檔:https://influxdb-python.readthedocs.io/en/latest/include-readme.html
grafana
安裝
如果是Windows,直接下載可執行文件安裝即可(我沒試過就不詳細說了),下載地址:https://grafana.com/grafana/download?platform=windows
docker運行:
docker run -d -p 3000:3000 --name=grafana -v grafana-storage:/var/lib/grafana grafana/grafana
命令中grafana-storage為本地文件夾路徑:比如也放在/var/lib/grafana
docker更新grafana:
docker pull grafana/grafana #重新pull最新版本
docker stop my-grafana-container # 停止已運行容器
docker rm my-grafana-container # 刪除舊容器
使用
瀏覽器訪問IP:埠進入登錄頁面,IP看你運行在哪了,埠預設3000。用戶名密碼都是admin,第一次登錄會提示修改密碼。
進入頁面後預設大概是這樣的:(開始是沒有添加data source)
我們先添加一下data source(數據來源),點擊左邊像設置(Configuration)一樣按鈕,然後點擊data sources,之後點擊add data source。選擇influxdb之後進入:
name任意,主要看http的URL是influxdb的IP和埠,然後是InfluxDB Details這一欄,需要填寫database(資料庫),User(用戶名),password(密碼),http method任意,get和post都行,我選的是post。然後點擊save & test,如果顯示綠色的提示說明保存測試成功,如果是紅色的則資料庫連接有誤。
添加數據
grafana的準備工作就做完了,接著就需要往資料庫中保存數據了。現成的工具有telegraf、collectd等。telegraf有exe可執行文件,用起來感覺還不錯。而collectd主要是Linux用的,Windows雖然有可執行文件,但體驗不怎麼樣,需要付費升級商業版。
官方下載地址:https://portal.influxdata.com/downloads/
如果訪問慢的地址:https://lanzous.com/icdvnhg
啟動:telegraf.exe -config telegraf.conf
註意啟動之前修改配置文件,看一些主要修改欄位:
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"] # influxdb的鏈接
database = "telegraf" # 資料庫名,不存在的話預設會自動創建
username = "" # influxdb配置的用戶名和密碼
password = ""
運行之後可以使用chronograf來看一下資料庫裡面有沒有數據,也可以直接命令行進入資料庫。(chronograf很簡單就不多贅述了)
進入資料庫的命令:influx -host 127.0.0.1 -port 8086 -username admin -password admin
(註意修改後面的參數值),Windows需要下載可執行文件influx.exe,下載路徑:https://portal.influxdata.com/downloads/。
添加grafana圖表
既然資料庫里有數據了,那麼接下來我們通過grafana展示一下數據。
圖表就不自己建了,我們也使用現成的(後面提一下怎麼自己構建圖表)。公開的圖表下載地址:
https://grafana.com/grafana/dashboards?collector=Telegraf&dataSource=influxdb&direction=asc&orderBy=name&search=Windows
如果需要其他圖表可以自己更改篩選條件,在網頁的左邊就有選項。
這裡面有幾個現成的圖表,我們隨便選擇一個複製鏈接,比如第二個:https://grafana.com/grafana/dashboards/1902
接著打開grafana的網頁端,點擊左邊的+好後點擊import:
Grafana.com Dashboard這一欄中填剛纔複製的地址,第二欄空著不管他,點擊導入,
folder應該只有一個選項,選擇他就行,telegraf選擇開始添加的資料庫。
接著就可以看到telegraf保存的系統狀態了,不過有很多圖表可能沒數據,原因就需要你自己一個一個看了,可能是圖表查詢語句錯了,也可能telegraf沒有保存相應的數據。
自建圖表
還是點擊左邊的加號,創建dashboard,
左邊的add query是使用預設的Graph面板(panel),而右邊則是選擇面板。面板有很多,具體參考官方文檔。更簡單的做法是參考你前面導入的圖表,看一下他們的查詢語句和一些配置就知道該怎麼做了,如果裡面有一些選項不知道是乾什麼用的,點一下看看有什麼變化可能就明白了。
我們直接點擊add query,進入:
1、Query
填寫查詢語句的,Query後面是資料庫的名稱(也就是前面添加的data source)。下麵的就是查詢語句了,簡單說一下:
FROM default select measurement WHERE
default預設就行,當然你選擇另外一個autogen也一樣,這是由於influxdb資料庫的原因,influxdb直接查詢資料庫下的某個measurement需要這樣寫:select * from 資料庫名.autogen.measurement名
。當然更常用的是使用如下語句查詢, 這樣就可以省略autogen:
use 資料庫名
select * from measurement名
其中measurement類似於表一樣,如果資料庫配置正確的話,點擊select measurement 應該會出現所有的表。
第二行的SELECT很明顯就是選擇欄位了,第二個是選擇聚合函數,值得註意的是,如果不選擇聚合函數,即使資料庫里有數據,圖表也不會顯示。GROUP BY一般預設即可,當然也可以自己修改,FORMAT AS也是預設的,ALIAS BY表示取別名,當你添加了兩個以上的查詢語句時,用於顯示Legend來區分。
2、Visualization
圖表的一些設置,這個不好細說,另外我也剛接觸只會皮毛就不獻醜了。如果不知道某個選項什麼作用,點一下看看有什麼變化吧。也可以參考公開的圖表怎麼設置的。
3、General
修改標題和描述用的
4、Alert
告警,應該是監控值有沒有異常,如果有則發送郵件到指定郵箱(需提前配置發件郵箱),當然不一定是郵件還有其他類型。沒用過,不知道怎麼發送。而且使用了變數的圖表還無法使用這個功能,會出現Template variables are not supported in alert queries,只有Graph面板能使用這個功能。
圖片來自:https://www.jianshu.com/p/2b230390f37e
其他我就不介紹了,因為我也不會。最後說一點:頁面右上角有一個刷新的圖表,可以刷新數據,也可以選擇自動刷新的時間間隔。
自建數據
前面使用了telegraf來將Windows的一些狀態保存在資料庫,現在我們說一下另一個神器的使用:AIDA64,至於這個有多神我就不描述了。雖然它功能十分強大,但現在只使用它的系統監控功能,先看一下AIDA的設置:
它可以將監控信息保存在文件,也可以發送到郵箱,甚至顯示到桌面的任務欄等。當然這些我都沒用過,我使用的是它將數據實時保存在共用記憶體中(在外部程式這個選項中),我們可以將所需要的數據勾選,然後通過編程語言來將共用記憶體中的數據同步到資料庫,這裡我使用的是Python。軟體設置只需要在外部程式選項中勾選允許共用記憶體,另外可以選擇性勾選需要的數據,也可以簡單粗暴的全部勾選。
Python代碼:
import re
import time
from datetime import datetime
from influxdb import InfluxDBClient
from ctypes import windll, c_char_p, c_int
tvid = '12345678' # 用於grafana區分機器
message = windll.kernel32.OpenFileMappingW
message.restype = c_int
client = InfluxDBClient(host='', port=8086, username='', password='', database='')
handle = message(1, False, "AIDA64_SensorValues")
if handle:
view = windll.kernel32.MapViewOfFile
view.restype = c_char_p
while True:
xml = view(handle, 1, 0, 0, 256)
re_ = r'<id>(.*?)</id><label>(.*?)</label><value>(.*?)</value>'
data = {}
data['tvid'] = tvid
for i in re.findall(re_, xml.decode()):
try:
data[i[0].lower()] = int(i[2])
except ValueError:
try:
data[i[0].lower()] = float(i[2])
except ValueError:
data[i[0].lower()] = i[2]
d = {
"measurement": "windows",
"time": datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'),
"tags": {
'tvid': tvid
},
"fields": data
}
if not client.write_points([d]):
break
time.sleep(4.99)
else:
print(0)
其他可以預設,註意修改InfluxDBClient的參數。
查看共用記憶體有沒有數據:
from ctypes import windll, c_char_p, c_int
message = windll.kernel32.OpenFileMappingW
message.restype = c_int
handle = message(1, False, "AIDA64_SensorValues")
if handle:
view = windll.kernel32.MapViewOfFile
view.restype = c_char_p
print(view(handle, 1, 0, 0, 256))
else:
print(0)
分享一下我用的AIDA64:https://lanzous.com/icdysif
我的圖表json(可以點擊+號 import,粘貼json導入),註意修改json中DataSource,我的是InfluxDB。有點大,放文件了:https://lanzous.com/icdz81e