看一下效果圖:

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 = https://www.cnblogs.com/kanadeblisst/p/{}
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/144567.html
標籤:Python
上一篇:萌新問個問題
