安裝InfluxDB
InfluxDB的簡介
InfluxDB 是用Go語言編寫的一個開源分布式時序、事件和指標數據庫,無需外部依賴。
類似的數據庫有Elasticsearch、Graphite等。、
功能特點
基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等)
可度量性:你可以實時對大量數據進行計算
基於事件:它支持任意的事件數據基於事件:它支持任意的事件數據
InfluxDB的主要特點
無結構(無模式):可以是任意數量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函數,方便統計支持min, max, sum, count, mean, median 等一系列函數,方便統計
原生的HTTP支持,內置HTTP API原生的HTTP支持,內置HTTP API
強大的類SQL語法強大的類SQL語法
自帶管理界面,方便使用自帶管理界面,方便使用
注意
自帶管理界面在1.2版之后,將不再提供。
集群功能在1.2版之后,也不再提供。
InfluxDB與傳統數據庫的比較
InfluxDB的名詞 | 傳統數據庫的概念 |
---|---|
database | 數據庫 |
measurement | 數據庫的表 |
points | 表里的一行數據 |
InfluxDB的獨特的特性
point
Point相當於傳統數據庫里的一行數據,如下表所示:
oint屬性 | 傳統數據庫中的概念 |
---|---|
time(時間戳) | 每個數據記錄時間,是數據庫中的主索引(會自動生成) |
fields(字段、數據) | 各種記錄值(沒有索引的屬性)也就是記錄的值:溫度, 濕度 |
tags(標簽) | 各種有索引的屬性:地區,海拔 |
注意
- 在influxdb中,字段必須存在。因為字段是沒有索引的。如果使用字段作為查詢條件,會掃描符合查詢條件的所有字段值,性能不及tag。類比一下,fields相當於SQL的沒有索引的列。
- tags是可選的,但是強烈建議你用上它,因為tag是有索引的,tags相當於SQL中的有索引的列。tag value只能是string類型。
series
相當於是 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一起。
> select * from students name: students time score stuid value ---- ----- ----- ----- 1542848518465067760 89 s123 1542850528630385278 79 s123 1542850533581732431 69 s123 1542850536266169940 39 s123 1542850676477097687 99 s123 1542874869654197110 s124 100 1542874898710687064 s125 60 > show series from students key --- students,stuid=s123 students,stuid=s124 students,stuid=s125
shardshard 和 retention policy 相關聯。每一個存儲策略下會存在許多 shard,每一個 shard 存儲一個指定時間段內的數據,並且不重復;
例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。
每一個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file。
組件
1.TSM 存儲引擎主要由幾個部分組成: cache、wal、tsm file、compactor。
Cache:cache 相當於是 LSM Tree 中的 memtabl。插入數據時,實際上是同時往 cache 與 wal 中寫入數據,可以認為 cache 是 wal 文件中的數據在內存中的緩存。當 InfluxDB 啟動時,會遍歷所有的 wal 文件,重新構造 cache,這樣即使系統出現故障,也不會導致數據的丟失。
cache 中的數據並不是無限增長的,有一個 maxSize 參數用於控制當 cache 中的數據占用多少內存后就會將數據寫入 tsm 文件。如果不配置的話,默認上限為 25MB,每當 cache 中的數據達到閥值后,會將當前的 cache 進行一次快照,之后清空當前 cache 中的內容,再創建一個新的 wal 文件用於寫入,剩下的 wal 文件最后會被刪除,快照中的數據會經過排序寫入一個新的 tsm 文件中。
2.WAL:wal 文件的內容與內存中的 cache 相同,其作用就是為了持久化數據,當系統崩潰后可以通過 wal 文件恢復還沒有寫入到 tsm 文件中的數據。
3.TSM File:單個 tsm file 大小最大為 2GB,用於存放數據。
4.Compactor:compactor 組件在后台持續運行,每隔 1 秒會檢查一次是否有需要壓縮合並的數據。
主要進行兩種操作
- 一種是 cache 中的數據大小達到閥值后,進行快照,之后轉存到一個新的 tsm 文件中。
- 另外一種就是合並當前的 tsm 文件,將多個小的 tsm 文件合並成一個,使每一個文件盡量達到單個文件的最大大小,減少文件的數量,並且一些數據的刪除操作也是在這個時候完成。
安裝
環境: CentOS6.8_x64
InfluxDB版本:1.7.0
InfluxDB的安裝
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm rpm -ivh influxdb-1.7.0.x86_64.rpm
安裝后產生的InfluxDB相關文件說明:
/usr/bin下文件
- influxd influxdb服務器
- influx influxdb命令行客戶端
- influx_ inspect 查看工具
- influx_stress 壓力測試工具
- influx_tsm 數據庫轉換工具(將數據庫從b1或bz1格式轉換為tsm1格式)
/var/lib/influxdb下文件夾
data 存放最終存儲的數據,文件以**.tsm**結尾
meta 存放數據庫元數據
wal 存放預寫日志文件
/etc/influxdb下文件
influxdb.conf influxdb數據庫配置文件
配置文件參數詳解:https://blog.csdn.net/zx711166/article/details/84325865
修改配置
修改InfluxDB的配置,主要配置jmeter存儲的數據庫與端口號,還有需要將UI端口開放, 找到 [http] 、 [[graphite]]節點,enabled改為true(默認是開啟的),bind-address修改綁定的IP和端口:
vim /etc/influxdb/influxdb.conf
# 找到graphite並且修改它的庫與端口,修改為下面的結果: [[graphite]] enabled = true database = "jmeter" bind-address = ":2003" protocol = "tcp" consistency-level = "one"
# [http] #Determines whether HTTP endpoint is enabled. enabled= true # The bindaddress used by the HTTP service. bind-address= ":8086" 此處配置的IP和端口供grafana連接使用
# 找到admin,將前面的#號去掉,開放它的UI端口,1.70版本沒找到這個admin到配置的地方,我就沒有修改,沒有修改也是可以的 [admin] # Determines whether the admin service is enabled. enabled = true # The default bind address used by the admin service. bind-address = ":8083" # Whether the admin service should use HTTPS. # https-enabled = false # The SSL certificate used when HTTPS is enabled. # https-certificate = "/etc/ssl/influxdb.pem
配置完了之后:
啟動InfluxDB
服務式啟動命令
#服務式啟動命令 service influxdb start #停止服務 service influxdb stop #重啟服務 service influxdb restart #嘗試重啟服務 service influxdb try-restart #重新加載服務 service influxdb reload #強制重新加載服務 service influxdb force-reload #查看服務狀態 service influxdb status #以非服務方式啟動 cd /usr/bin ./influxd
服務啟動查看是否正常
#通過查看服務對應進程
[root@CESHI_HT_Jmeter_1 ceshi]# ps aux | grep influx root 14919 0.0 0.0 103320 860 pts/0 S+ 13:14 0:00 grep --color=auto influx influxdb 29294 0.1 0.9 820816 72588 ? Sl Jan13 1:25 /usr/bin/influxd -pidfile /var/run/influxdb/influxd.pid -config /etc/influxdb/influxdb.conf
#通過service influxdb status命令,查看服務狀態
[root@CESHI_HT_Jmeter_1 ceshi]# service influxdb status
influxdb process is running [ OK ]
服務啟動后相關端口
- 8086:HTTP API的端口
- 8088:備份恢復時使用,默認值為8088
InfluxDB 客戶端命令行方式操作
客戶端命令行方式操作
[root@localhost influxdb]# influx Connected to http://localhost:8086 version 1.7.0 InfluxDB shell version: 1.7.0 Enter an InfluxQL query >
顯示數據庫
> show databases name: databases name ---- _internal jmeter
新建數據庫
> create database testdb > show databases name: databases name ---- _internal testdb
刪除數據庫
> drop database testdb > show databases name: databases name ---- _internal
使用數據庫
> create database testdb > use testdb Using database testdb
顯示所有表
show measurement
刪除表
> drop measurement disk_free
安裝Grafana
使用yum下載Grafana並且安裝
1 wget https://dl.grafana.com/oss/release/grafana-6.3.5-1.x86_64.rpm 2 rpm -ivh grafana-6.3.5-1.x86_64.rpm 3 報錯:warning: grafana-6.3.5-1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 24098cb6: NOKEY 4 error: Failed dependencies: 5 urw-fonts is needed by grafana-6.3.5-1.x86_64 6 7 執行 yum install -y urw-fonts 8 再進行第一步的運行rpm -ivh grafana-6.3.5-1.x86_64.rpm 9 然后啟動即可/etc/init.d/grafana-server restart
打開瀏覽器,訪問機器IP“http://127.0.0.1:3000”
輸入用戶名,密碼登錄系統。用戶名與密碼都是"admin"
添加需要展示數據的數據庫(配置InfluxDB )
添加InfluxDB數據庫配置。輸入帳號密碼“admin / admin”,點擊“add”添加之后點擊“Test & Save” 提示“Success”說明成功了
【注意】URL的端口是8086,而剛才配置的8083是UI的端口。
- 8083端口是InfluxDB的UI界面展示的端口
- 8086端口是Grafana用來從數據庫取數據的端口
- 2003端口則是剛剛設置的,Jmeter往數據庫發數據的端口
配置JMeter
在線程組右鍵——>添加——>監聽器——>后端監聽器
使用InfluxdbBackendListenerClient說明:
- influxdbMetricsSender:org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
- influxdbUrl:influx數據庫的url。example : http://influxHost:8086/write?db=jmeter
- application:被測試的應用名稱。此值也作為名為“application”的標記存儲在“events”中
- measurement:使用默認的”jmeter“就行
- summaryOnly:為true的情況下,只輸出所有請求的集合數據報告,為flase的情況下,輸出每條數據的詳情報告、
- samplersRegex:正則表達式將與樣本名稱匹配並發送到后端。默認匹配所有
- testTitle:測試名稱。默認的設置為 Test name。該值作為名為“text”的字段存儲在“事件”度量中。 JMeter在測試的開始和結束時自動生成一個注釋,其值以'started'和'ended'結尾
- percentiles:要發送到后端的百分位數,多個值已
;
分割 - TAG_WhatEverYouWant:自定義標簽。您可以根據需要添加任意數量的自定義標簽。對於它們中的每一個,只需創建一個新行並在其名稱前加“TAG_”
配置Grafana
添加一個圖表
點擊旁邊的綠點“Add Panel -> Graph”
配置圖表
配置好了,就能看到圖了。如果看不到圖,請用Jmeter多發幾次請求。下圖中選擇監控的選項,可以在Jmeter的官網上查看到對應的解釋
Graph里面的選項有:
General(常規選擇)、Metrics(指標)、Axes(坐標軸)、Legend(圖例)、 Display(顯示樣式)、Time range(時間范圍)
Genera(常規選擇):添加圖形標題,圖形寬度高度等
Title:儀表板上的面板標題
Span:列在面板中的寬度
Height:面板內容高度(以像素為單位)
選取/詳細信息鏈接(Drilldown / detail link)
選取部分允許添加動態面板的鏈接,可以鏈接到其他儀表板或URL。
每個鏈接都有一個標題,一個類型和參數。鏈接可以是 dashboard或 absolute鏈接。如果它是一個儀表板鏈接, dashboard值必須是一個儀表板的名字。如果這是一個 absolute鏈接,是URL鏈接的URL。
params允許添加額外的URL參數的鏈接。格式是 name=value與多個參數分開,當鏈接到另一個儀表板使用模板變量,你可以使用 var-myvar=value填充模板變量的期望值鏈接
Metrics(指標)
定義了來源數據的呈現,每個數據源都提供不同的選擇。面板的來源數據通過group,host,application,item從zabbix中獲得。
Axes(坐標軸)
用於坐標軸和網格的顯示方式,包括單位,比例,標簽等。
Left Y和 Right Y可以定制使用,因其中的可選參數太多,請在使用的時候參考官方文檔;
Legend(圖例):圖例展示
圖例的參數:
Total:返回所有度量查詢值的總和
Current:返回度量查詢的最后一個值
Min:返回最小的度量查詢值
Max:返回最大的度量查詢值
Avg:返回所有度量查詢的平均值
Decimals:控制Legend值的多少,以小數顯示懸浮工具提示(圖)
Grafana 中Legend值的計算取決於你使用的度量查詢方式和什么樣類型的聚合或合並點來實現的,所有上述所說的值在同一時間可能都是不正確的。例如,如果你是每秒請求一次,這可能是使用平均值來作為一個整合,然而這個Legend值不會代表請求的總數。這只是Grafana收到的所有數據點的總和。
Display(顯示樣式)
顯示樣式的控件屬性圖如下:
圖表模式(Draw Modes)
Bar:一個條形圖顯示值
Lines:顯示線圖值
Points:顯示點值
選擇模式(Mode Options)
Fill:系列的顏色填充,0是沒有。
Line Width:線的寬度。
Staircase:樓梯狀顯示。
如果有多個選擇項,它們可以作為一個群體顯示。
疊加和空值(Stacking & Null value)
Stack:每個系列是疊在另一個之上
Null value:空值
如果你啟用了堆棧可以選擇應該顯示鼠標懸停功能。
Time range(時間范圍)
更多Grafana功能請查閱官方文檔....https://grafana.com/grafana
導入grafana已經有的模版
目前界內很多大佬都有上傳自己研發的一套監控體系,看以從儀表盤下載對應的需求的儀表盤進行監控,同時可以從中優化 添加時候自己工作業務需要的監控
官網模板庫地址:https://grafana.com/dashboards?dataSource=influxdb 如jmeter官方模板:copy id
在Import 添加搜到的模板id(還有一個和官網模板差不多的 模板ID是:4026 可參考下)
選擇建好的data source
添加完成后就會出現了以下界面了
就可以顯示實時監控的數據信息了。
參考鏈接: