如何進行Prometheus的數(shù)據(jù)庫監(jiān)控,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
10年積累的成都網(wǎng)站制作、成都網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設流程,更有邱縣免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
傳統(tǒng)監(jiān)控系統(tǒng),會面臨哪些問題?
以zabbix為例
初次使用需要配置大量管理功能,隨著服務器和業(yè)務的增長會發(fā)現(xiàn)zabbix,這種傳統(tǒng)監(jiān)控面臨很多問題
DB性能瓶頸,由于zabbix會將采集到的性能指標都存儲到數(shù)據(jù)庫中,當服務器數(shù)量和業(yè)務增長很快時數(shù)據(jù)庫性能首先成為瓶頸。
多套部署,管理成本高,當數(shù)據(jù)庫性能成為瓶頸時首先想到的辦法可能時分多套zabbix部署,但是又會帶來管理很維護成本很高的問題。
易用性差,zabbix的配置和管理非常復雜,很難精通。
郵件風暴,郵件配置各種規(guī)則相當復雜,一不小心可能就容易造成郵件風暴的問題。
隨著容器技術的發(fā)展,傳統(tǒng)監(jiān)控系統(tǒng)面臨更多問題
容器如何監(jiān)控?
微服務如何監(jiān)控?
集群性能如何進行分析計算?
如何管理agent端大量配置腳本?
我們可以看到傳統(tǒng)監(jiān)控系統(tǒng)無法滿足,當前IT環(huán)境下的監(jiān)控需求
2015年Google發(fā)表了一篇論文《Google使用Borg進行大規(guī)模集群的管理》
這篇論文也描述了Google集群的規(guī)模和面臨的挑戰(zhàn)
單集群上萬服務器
幾千個不同的應用
幾十萬個以上的jobs,而且動態(tài)增加或者減少
每個數(shù)據(jù)中心數(shù)百個集群
基于這樣一個規(guī)模,Google的監(jiān)控系統(tǒng)也面臨巨大挑戰(zhàn),而Borg中的Borgmon監(jiān)控系統(tǒng)就是為了應對這些挑戰(zhàn)而生。
那么我們來看一下Google如何做大規(guī)模集群的監(jiān)控系統(tǒng)
首先,Borg集群中運行的所有應用都需要暴露出特定的URL,http://<app>:80/varz 通過這個URL我們就可以獲取到應用所暴露的全部監(jiān)控指標。
然而這樣的應用有數(shù)千萬個,而且可能會動態(tài)增加或者減少,Borgmon中如何發(fā)現(xiàn)這些應用呢?Borg中的應用啟動時會自動注冊到Borg內(nèi)部的域名服務器BNS中,Borgmon通過讀取BNS中應用列表信息,收集到應用列表,從而發(fā)現(xiàn)有哪些應用服務需要監(jiān)控。當獲取到應用列表后,就會將應用的全部監(jiān)控變量值拉取到Borgmon系統(tǒng)中。
當監(jiān)控指標收集到Borgmon中,就可以進行展現(xiàn)或者提供給告警使用,另外由于一個集群實在是太過龐大了,一個Borgmon可能無法滿足整個集群的監(jiān)控采集和展現(xiàn)需求,所以一般會在一些復雜的環(huán)境下,一個數(shù)據(jù)中心可能部署多個Borgmon,分為數(shù)據(jù)收集層和匯總層,數(shù)據(jù)收集層會有多個Borgmon專門用來到應用中收集數(shù)據(jù),匯總層Borgmon則從數(shù)據(jù)收集層Borgmon中獲取數(shù)據(jù)。
Borgmon收集到了性能指標數(shù)據(jù)后,會把所有的數(shù)據(jù)存儲在內(nèi)存數(shù)據(jù)庫里,定時checkpoint到磁盤上,并且會周期性的打包到外部的系統(tǒng)TSDB。通常情況下,數(shù)據(jù)中心和全局Borgmon中一般至少會存放12小時左右的數(shù)據(jù)量,以便渲染圖表使用。每個數(shù)據(jù)點大概占用24字節(jié)的內(nèi)存,所以存放100萬個time-series,每個time-series每分鐘一個數(shù)據(jù)點,同時保存12小時數(shù)據(jù),僅需17GB內(nèi)存。
Borgmon中通過標簽的方式查詢指標,基于標簽過濾我們可以查詢到某個應用的具體指標,也可以查詢更高維度的信息
基于標簽過濾信息,比如我們基于一組過濾信息查詢到host0:80這個app的http_requests
我們也可以查詢到整個美國西部,job為webserver的http_requests
那么這個時候拿到的就是所有符合條件的實例的列表
在數(shù)據(jù)收集和存儲的基礎之上,我們可以通過規(guī)則計算得到進一步的數(shù)據(jù)。
比如,我們想在web server報錯超過一定比例的時候報警,或者說在非200返回碼,占總請求的比例超過某個值的時候報警。
Borgmon是Google內(nèi)部的系統(tǒng),那么在Google之外如何使用它呢?這里就提到我們所描述的Prometheus這套監(jiān)控系統(tǒng)。Google內(nèi)部SRE工程師的著作《Google SRE》這本書中,直接就提到了Prometheus相當于就是開源版本的Borgmon。目前Prometheus在開源社區(qū)也是相當火爆,由Google發(fā)起Linux基金會旗下的原生云基金會(CNCF)就將Prometheus納入其下第二大開源項目(第一項目為Kubernetes,為Borg的開源版本)。
Prometheus整體架構和Borgmon類似,組件如下,有些組件是可選的:
Prometheus主服務器,用來收集和存儲時間序列數(shù)據(jù)
應用程序client代碼庫
短時jobs的push gateway
特殊用途的exporter(包括HAProxy、StatsD、Ganglia等)
用于報警的alertmanager
命令行工具查詢
另外Grafana是作為Prometheus Dashboard展現(xiàn)的絕佳工具
基于Prometheus的數(shù)據(jù)庫指標采集,我們以MySQL為例,由于MySQL沒有暴露采集性能指標的接口,我們可以單獨啟動一個mysql_exporter,通過mysql_exporter到MySQL數(shù)據(jù)庫上抓去性能指標,并暴露出性能采集接口提供給Prometheus,另外我們可以啟動node_exporter用于抓取主機的性能指標。
對于服務端配置非常簡單,由于Prometheus全部基于Go語言開發(fā),而Go語言程序在安裝方面非常方便,安裝服務端程序只需要下載,解壓并運行即可。可以看到服務端常用程序也比較少,只需要包含prometheus這個主服務程序和alertmanager這個告警系統(tǒng)程序。
服務端配置也非常簡單,常用配置包含拉取時間和具體采集方式,就我們監(jiān)控mysql數(shù)據(jù)庫來講,只需要填入mysql_exporter地址即可。
對于mysql采集只需要配置連接信息,并啟動mysql_exporter即可
完成配置之后即可通過mysql_exporter采集mysql性能指標
然后我們在prometheus服務端也可以查詢到采集的mysql性能指標
基于這些采集指標和Prometheus提供的規(guī)則計算語句,我們可以實現(xiàn)一些高緯度的查詢需求,比如,increase(mysql_global_status_bytes_received{instance="$host"}[1h])
我們可以查詢MySQL每小時接受到的字節(jié)數(shù),然后我們將這個查詢放到Grafana中,就可以展現(xiàn)非常酷炫的性能圖表。
而目前結合Prometheus和Grafana的MySQL監(jiān)控方案已經(jīng)有開源實現(xiàn),我們很輕松可以搭建一套基于Prometheus的監(jiān)控系統(tǒng)
對于告警方面我們也可以基于Prometheus豐富的查詢語句實現(xiàn)復雜告警邏輯
比如我們要對MySQL備庫進行監(jiān)控,如果復制IO線程未運行或者復制SQL線程未運行并且持續(xù)2分鐘就發(fā)送告警我們可以使用如下這條告警規(guī)則。
# Alert: The replication IO or SQL threads are stopped. ALERT MySQLReplicationNotRunning IF mysql_slave_status_slave_io_running == 0 OR mysql_slave_status_slave_sql_running == 0 FOR 2m LABELS { severity = "critical" } ANNOTATIONS { summary = "Slave replication is not running", description = "Slave replication (IO or SQL) has been down for more than 2 minutes.", }
在比如,我們要監(jiān)控MySQL備庫延遲大于30秒并且預測在未來2分鐘之后大于0秒持續(xù)1分鐘,則告警
# Alert: The replicaiton lag is non-zero and it predicted to not recover within # 2 minutes. This allows for a small amount of replication lag. ALERT MySQLReplicationLag IF (mysql_slave_lag_seconds > 30) AND on (instance) (predict_linear(mysql_slave_lag_seconds[5m], 60*2) > 0) FOR 1m LABELS { severity = "critical" } ANNOTATIONS { summary = "MySQL slave replication is lagging", description = "The mysql slave replication has fallen behind and is not recovering", }
當然在數(shù)據(jù)庫方面不只是有MySQL的監(jiān)控實現(xiàn),目前業(yè)界也有很多其他開源實現(xiàn),所以在數(shù)據(jù)庫監(jiān)控方面也能實現(xiàn)開箱即用的效果
看完上述內(nèi)容,你們掌握如何進行Prometheus的數(shù)據(jù)庫監(jiān)控的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
本文標題:如何進行Prometheus的數(shù)據(jù)庫監(jiān)控
瀏覽地址:http://www.2m8n56k.cn/article38/pccepp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、做網(wǎng)站、、網(wǎng)站設計公司、網(wǎng)站內(nèi)鏈、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)