基于InfluxDB+Grafana打造大数据监控利器--转
這是一個(gè)大數(shù)據(jù)爆發(fā)的時(shí)代。面對(duì)信息的激流、多元化數(shù)據(jù)的涌現(xiàn),我們?cè)讷@取、存儲(chǔ)、傳輸、理解、分析、應(yīng)用、維護(hù)大數(shù)據(jù)時(shí),無(wú)疑需要一種便捷的信息交流通道,以便快速、有效、準(zhǔn)確地理解和駕馭這個(gè)過(guò)程。本文將通過(guò)時(shí)序數(shù)據(jù)庫(kù)(InfluxDB)+Grafana的實(shí)踐,來(lái)介紹如何將數(shù)據(jù)便捷地展現(xiàn)出來(lái)。
?
一、InfluxDB
?
開(kāi)源的分布式時(shí)序、時(shí)間和指標(biāo)數(shù)據(jù)庫(kù),使用Go語(yǔ)言編寫,無(wú)需外部依賴。其中,時(shí)間序列數(shù)據(jù)庫(kù)是數(shù)據(jù)格式里包含Timestamp字段的數(shù)據(jù),比如某一時(shí)間用戶上網(wǎng)流量、通話詳單等。但是,有什么數(shù)據(jù)不包含Timestamp呢?幾乎所有的數(shù)據(jù)都可以打上一個(gè)Timestamp字段。時(shí)間序列數(shù)據(jù)更重要的一個(gè)屬性是如何去查詢它,包括數(shù)據(jù)的過(guò)濾、計(jì)算等。
?
它有三大特性:
-
時(shí)序性(Time Series):與時(shí)間相關(guān)的函數(shù)的靈活使用(例如最大、最小、求和等);
-
度量(Metrics):對(duì)實(shí)時(shí)大量數(shù)據(jù)進(jìn)行計(jì)算;
-
事件(Event):支持任意的事件數(shù)據(jù),換句話說(shuō),任意事件的數(shù)據(jù)我們都可以做操作。
?
個(gè)人認(rèn)為InfluxDB的幾個(gè)優(yōu)點(diǎn):
-
無(wú)特殊依賴,幾乎開(kāi)箱即用(如ElasticSearch需要Java)
-
自帶數(shù)據(jù)過(guò)期功能;
-
自帶權(quán)限管理,精細(xì)到“表”級(jí)別;
-
原生的HTTP支持,內(nèi)置HTTP API
-
強(qiáng)大的類SQL語(yǔ)法,支持min, max, sum, count, mean, median 等一系列函數(shù),方便統(tǒng)計(jì)。
-
自帶管理界面(如下圖),免插件配置。
?
?
InfluxDB基本概念
?
1、與傳統(tǒng)數(shù)據(jù)庫(kù)中的名詞做比較
?
| InfluxDB中的名詞 | 傳統(tǒng)數(shù)據(jù)庫(kù)中的概念 |
| database | 數(shù)據(jù)庫(kù) |
| measurement | 數(shù)據(jù)庫(kù)中的表 |
| points | 表里面的一行數(shù)據(jù) |
?
2、InfluxDB中特有的概念
?
1)Point
?
Point由時(shí)間戳(time)、數(shù)據(jù)(field)、標(biāo)簽(tags)組成。
?
Point相當(dāng)于傳統(tǒng)數(shù)據(jù)庫(kù)里的一行數(shù)據(jù),如下表所示:
?
| Point屬性 | 傳統(tǒng)數(shù)據(jù)庫(kù)中的概念 |
| time | 每個(gè)數(shù)據(jù)記錄時(shí)間,是數(shù)據(jù)庫(kù)中的主索引(會(huì)自動(dòng)生成) |
| fields | 各種記錄值(沒(méi)有索引的屬性)也就是記錄的值:溫度, ? 濕度 |
| tags | 各種有索引的屬性:地區(qū),海拔 |
?
2)series
?
所有在數(shù)據(jù)庫(kù)中的數(shù)據(jù),都需要通過(guò)圖表來(lái)展示,而這個(gè)series表示這個(gè)表里面的數(shù)據(jù),可以在圖表上畫成幾條線:通過(guò)tags排列組合算出來(lái)。
?
如下所示:
?
?
3、InfluxDB相關(guān)API
?
InfluxDB 支持http api?方式寫入數(shù)據(jù)。使用curl這個(gè)工具來(lái)模擬HTTP 請(qǐng)求,在實(shí)際使用中,可以將請(qǐng)求寫入代碼中,通過(guò)其他編程語(yǔ)言來(lái)模擬HTTP請(qǐng)求。
?
例如:通過(guò)HTTP API向Internet_users這張表添加數(shù)據(jù)
curl -v –XPOST "http:// localhost:8086/write?db=Internet&u=user&p=password" --data-binary "Internet_users,users=小區(qū)上網(wǎng)用戶,mobile=移動(dòng)端上網(wǎng)用戶,users_num=56,
mobile_num=21 1493571600000000000"
?
?
說(shuō)明:
-
db=Interne是指使用Interne數(shù)據(jù)庫(kù);
-
--data-binary后面是需插入數(shù)據(jù),其中:
Internet_users:表名(measurement)
tag字段:users和mobile,值分別為:小區(qū)上網(wǎng)用和移動(dòng)端上網(wǎng)用戶
field key字段:users_num和mobile_num,值分別為56和21
時(shí)間戳(timestamp):1493571600000000000
?
這樣,就向Interne數(shù)據(jù)庫(kù)的Internet_users表中插入了一條數(shù)據(jù)。
?
需要注意,DB參數(shù)必須指定一個(gè)數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)庫(kù)名,數(shù)據(jù)體的格式遵從InfluxDB規(guī)定格式,首先是表名,后面是tags,然后是field,最后是時(shí)間戳。tags、field和時(shí)間戳三者之間以空格相分隔。
?
InfluxDB 數(shù)據(jù)可視化工具
?
InfluxDB 用于存儲(chǔ)基于時(shí)間的數(shù)據(jù),比如監(jiān)控?cái)?shù)據(jù),因?yàn)镮nfluxDB本身提供了Http API,所以可以使用InfluxDB很方便的搭建了個(gè)監(jiān)控?cái)?shù)據(jù)存儲(chǔ)中心。對(duì)于InfluxDB中的數(shù)據(jù)展示,這里不得不提數(shù)據(jù)展示利器-Grafana。
?
二、Grafana
?
一個(gè)純粹的HTML/JS應(yīng)用,其功能非常強(qiáng)大,訪問(wèn)InfluxDB時(shí)不會(huì)有跨域訪問(wèn)的限制。只要配置好數(shù)據(jù)源為InfluxDB之后就可以,剩下的工作就是配置圖表。
?
配置數(shù)據(jù)源:
?
?
設(shè)置查詢條件:
?
?
展示數(shù)據(jù):
?
?
Grafana告警功能
?
沒(méi)有比”可視化“更好的一個(gè)詞能來(lái)概括運(yùn)維的本質(zhì),我想Grafana也是深知廣大運(yùn)維人員的痛處:如何用可視化數(shù)據(jù)說(shuō)話? 所以Grafana在 4.0以后版本:新增報(bào)警功能(Alerting),根據(jù)官網(wǎng)介紹,Grafana報(bào)警方式也有很多種,常見(jiàn)的Email、Slack即時(shí)通訊、webhook等。
?
下圖為目前集群Grafana監(jiān)控界面,主要包含對(duì)集群主機(jī)CPU、內(nèi)存配合Grafana的閾值預(yù)警功能:
?
主機(jī)內(nèi)存和CPU使用率監(jiān)控:
?
?
通過(guò)規(guī)則配置,可配置相關(guān)監(jiān)控規(guī)則,包含相關(guān)邏輯與時(shí)間跨度以及監(jiān)控告警條件。目前,僅支持一種條件類型—— Query 。可以指定Query字母,時(shí)間跨度和聚合函數(shù)。字母指定你在Metrics tab里設(shè)置的聚合函數(shù)。Query的結(jié)果和聚合函數(shù)將會(huì)是一個(gè)單一的值,用于后面判斷是否超過(guò)了閾值。
?
規(guī)則配置完成后可在報(bào)警列表里統(tǒng)一查看報(bào)表狀態(tài):
?
?
三、實(shí)踐案例
?
1、數(shù)據(jù)采集規(guī)劃
?
目前采集數(shù)據(jù)主要來(lái)源于Hadoop的jmx監(jiān)控,獲取相關(guān)Cluster、Queue等Metrics信息以及部分Oracle日志信息,通過(guò)相關(guān)接口寫入InfluxDB數(shù)據(jù)庫(kù),根據(jù)來(lái)源及日志信息從數(shù)據(jù)庫(kù)層進(jìn)行獨(dú)立管理設(shè)計(jì),以便后續(xù)維護(hù)。
?
2、InfluxDB數(shù)據(jù)庫(kù)權(quán)限配置
?
InfluxDB自帶權(quán)限控制,權(quán)限分別為:
-
ADMIN:所有者
-
READ :只讀 (精確到庫(kù)與表)
-
WRITE:只寫 (精確到庫(kù)與表)
-
ALL (READ 和 WRITE ) :讀和寫
?
鑒于源數(shù)據(jù)流,目前只會(huì)用到三個(gè)角色,對(duì)于這三個(gè)角色分工如下:
-
ADMIN:維護(hù)人員
-
READ:數(shù)據(jù)展示與后臺(tái)查詢(Grafana上設(shè)置的Influnxdb為只讀)
-
WRITE:外部程序(插入數(shù)據(jù)至Influnxdb)
?
配置數(shù)據(jù)庫(kù)權(quán)限需開(kāi)啟相關(guān)認(rèn)證,操作如下:
vi /etc/InfluxDB/InfluxDB.conf
?
把 [http] 標(biāo)簽下的 auth-enabled 選項(xiàng)值改為 true
[http]?
enabled = true?
bind-address = ":8086"?
auth-enabled = true
log-enabled = true?
write-tracing = false?
pprof-enabled = false?
https-enabled = false?
https-certificate = "/etc/ssl/InfluxDB.pem"
?
3、Influnxdb和Grafana高可用配置
?
本次實(shí)踐為了避免因主機(jī)通斷而導(dǎo)致Influnxdb和Grafana服務(wù)無(wú)法使用的情況,所以在部署應(yīng)用時(shí)用了2臺(tái)虛擬機(jī),2臺(tái)虛擬機(jī)安裝的服務(wù)如下:
?
| 主機(jī) | 服務(wù) |
| Localhost-01 | InfluxDB+Grafana |
| Localhost-02 | InfluxDB+Grafana |
?
在系統(tǒng)層方面又做了如下設(shè)置:
?
-
主機(jī)域名設(shè)置
?
將兩臺(tái)主機(jī)設(shè)置為主備模式,共用同一個(gè)域名http://xxx.xxx.com
?
| 域名 | 主機(jī) | 主備模式 |
| http://xxx.xxx.com | Localhost-01 | 主 |
| http://xxx.xxx.com | Localhost-02 | 備 |
?
-
負(fù)載均衡設(shè)置
?
負(fù)載均衡設(shè)置即VIP主用與容災(zāi)端域名+端口與的Localhost-01~02主備節(jié)點(diǎn)域名+端口映射。大家都知道InfluxDB和Grafana端口如下圖展示:
?
| 服務(wù) | 端口 |
| InfluxDB | 8083 |
| InfluxDB | 8086 |
| InfluxDB | 8088 |
| Grafana | 3000 |
?
所以映射關(guān)系可設(shè)計(jì)成這樣:
-
VIP:主用ip、容災(zāi)ip
-
VPORT:8083
-
均衡算法:pi 32 rr
-
健康檢查:tcp
-
實(shí)例IP及端口:
Localhost-01的ip 8083
Localhost-02的ip 8083
?
其它端口均按此設(shè)置,負(fù)載均衡設(shè)置完成后,這里不得不提Grafana配置,如果要做到可視化展示的高可用,那么Grafana配置數(shù)據(jù)源就必須采用域名+端口的方式:
?
?
至此數(shù)據(jù)安全設(shè)置完畢。
?
4、Grafana界面配置
?
完成以上環(huán)境配置,根據(jù)相關(guān)需求進(jìn)行Grafana界面配置以及監(jiān)控配置,具體操作可以參照官網(wǎng)操作教程,這里不再贅述。
?
HDFS目錄配額監(jiān)控:
?
?
HDFS空間使用率監(jiān)控:
?
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/7795263.html
總結(jié)
以上是生活随笔為你收集整理的基于InfluxDB+Grafana打造大数据监控利器--转的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Kibana查询说明
- 下一篇: postman中 form-data、x