一纤垂、項目背景
目前點我達(dá)的數(shù)據(jù)庫集群主要集中在3個區(qū)域峭沦, 一個是杭州阿里云的rds集群逃糟,? 一個是上海阿里云idc自建的數(shù)據(jù)庫集群, 還有一個是杭州idc自建數(shù)據(jù)庫集群菇肃,總的數(shù)據(jù)庫實例規(guī)模大概在500左右取募, 阿里云rds的監(jiān)控展示和報警推送,完全依賴于阿里云的云監(jiān)控斗忌。
需要解決的問題
當(dāng)然织阳,不是說阿里云的云監(jiān)控不好砰粹, 是當(dāng)集群規(guī)模達(dá)到一定數(shù)量之后
1、實例縱向維度的對比很難做弄痹, 無法做時間跨度比較大的監(jiān)控趨勢查看
2嵌器、實例橫向的對比很難去做嘴秸,比如訂單分片后庇谆,各個分片節(jié)點rds的負(fù)載凭疮、請求等情況,無法做橫向?qū)Ρ?/p>
3寞肖、監(jiān)控指標(biāo)較單一衰腌, 無法新增新的監(jiān)控指標(biāo)
4右蕊、報警規(guī)則比較單一,無法做定制化的報警規(guī)則和推送
5帕翻、引擎層的監(jiān)控數(shù)據(jù)采集頻率無法控制萝风,且如果小于60s需要額外付費(fèi)用
所以基于以上幾點原因, 本人做了rds數(shù)據(jù)庫監(jiān)控的本地化改造睬塌, 即將rds的引擎監(jiān)控歇万、機(jī)器層面監(jiān)控、以及報警推送等轉(zhuǎn)為dba自己來做文狱, 脫離阿里云云監(jiān)控缘挽, 同時監(jiān)控系統(tǒng)同樣適用于idc自建數(shù)據(jù)庫壕曼,達(dá)到監(jiān)控體系的統(tǒng)一。
二摹蘑、項目架構(gòu)
思考:
本地化監(jiān)控改造大概分為以下幾個部分:
1轧飞、定監(jiān)控體系架構(gòu)撒踪, 決定采用當(dāng)前比較流行并且本人比較熟悉的prometheus監(jiān)控體系
2制妄、1對多問題泵三,常規(guī)的自建數(shù)據(jù)庫監(jiān)控一般使用prometheus的官方mysqld_exporter,在ecs上部署一個exporter,1對1進(jìn)行監(jiān)控俺抽。 但是rds沒有實體機(jī)器來部署exporter 所以需要對官方的mysqld_exporter 進(jìn)行改造或者重新開發(fā)较曼,讓exporter支持1對多的監(jiān)控诗芜。 這里我是采用比較快的方法埃疫,直接拿官方mysqld_exporter 進(jìn)行源碼修改。
3翠桦、機(jī)器層面的監(jiān)控胳蛮,node_exporter 跟mysqld_exporter 一樣, 直接拿官方源碼進(jìn)行修改斗幼,支持1對多的監(jiān)控
4抚垄、rds實例過多呆馁, 如果一一把配置都寫進(jìn)prometheus比較繁瑣,故這里使用prometheus 里的consul config特性阴挣,將數(shù)據(jù)庫實例信息注冊到consul纺腊,然后prometheus 從consul里抓取實例信息茎芭,下發(fā)給exporter骗爆, exporter 再去具體實例上抓取需要的監(jiān)控信息蔽介。
5、報警收斂和分級推送犀呼。 點我達(dá)已經(jīng)有了一套報警收斂薇组、推送的自研系統(tǒng)律胀, 所以這里只需把報警推送到Alertmanager 就可以了。
6罪佳、監(jiān)控圖表展示黑低, 毫無疑問使用grafana。 grafana里有一個percona的插件蕾管,可以直接生成各種監(jiān)控圖表掰曾,且能與mysqld_exporter 和node_exporter無縫對接(rds這里不一樣停团,需要自己畫圖)。
具體架構(gòu):
解決了以上6個問題塞蹭,那么就有了下面的監(jiān)控體系架構(gòu)讶坯。
三、相關(guān)服務(wù)模塊
1漱办、consul注冊服務(wù)
點我達(dá)目前的ops運(yùn)維管理平臺是比較open的娩井,每個人都可以自己開發(fā)服務(wù), 開放http接口咐刨,然后就可以接入ops平臺了扬霜。? 因為數(shù)據(jù)庫實例的特殊性著瓶,一般都是在新建或者刪除的時候,才把注冊信息更新沸久, 所以這里余蟹,我直接用go開發(fā)了一個consul注冊的服務(wù), 接入了ops管理平臺诵竭,同時又有了流程審批控制兼搏, 一舉兩得佛呻。
目前注冊和注銷均在點我達(dá)ops運(yùn)維平臺里做病线, 具體流程如下:
注冊完成后送挑,consul上顯示的信息如下:
具體注冊接口與注冊操作方法惕耕,詳細(xì)請參考本人的開源項目:iushas/consul_register
github地址為: https://github.com/iushas/consul_register
2、promehteus里的配置
promehteus里的配置最為關(guān)鍵欺缘,因為同時涉及到mysqld_exporter 和 node_exporter ,所以這里同時把兩個配置同時貼出來丧鸯,供大家參考嫩絮。
1)mysqld_exporter的配置:
同時支持不接入consul剿干,1對1監(jiān)控和接入consul,實例id下發(fā)派敷,1對多監(jiān)控撰洗。
2)node_exporter的配置:
配置里的tag是第一步consul注冊的時候注冊進(jìn)去的數(shù)據(jù)庫屬性差导, 可以為 hz-ali 代表杭州的rds设褐, 可以為 sh-idc 代表上海的自建機(jī)房。 所以第一步注冊信息很重要犀被,后面不同的prometheus里的region和其他屬性的區(qū)分外冀,都是通過consul里打的tag來實現(xiàn)的。
3西轩、mysqld_exporter
定制化exporter 支持一對多脑沿, 由于consul里沒有注冊每臺rds實例的監(jiān)控賬號庄拇,所以要求每臺實例的監(jiān)控賬號和密碼權(quán)限統(tǒng)一。
這里只解釋下如何實現(xiàn)以對多的監(jiān)控祠汇。
這里配置很簡單,只要在.my.cnf里把賬號密碼配置進(jìn)去就可以了诗力, host可以隨便寫我抠。
配置好后菜拓, 把服務(wù)拉起來, Prometheus里的 這一段配置會把向exporter-address:9104 這個請求地址發(fā)送的scrape請求俺夕,添加上一個參數(shù)贱鄙,
target=__address__, 這個__address__是從consul里讀取到的rds的 tcp的地址
比如我的這個地址:
下發(fā)的給exporter的請求為:
然后exporter拿到這個地址請求后映九,把需要的實例信息解析出來瞎颗,通過地址去數(shù)據(jù)庫里拿去監(jiān)控信息哼拔, 這樣每次protheus下發(fā)新的地址后,exporter會拿新的地址去查詢管挟,就實現(xiàn)了一個exporter監(jiān)控多個數(shù)據(jù)庫的功能轿曙。
詳細(xì)的mysqld_exporter的代碼介紹和實現(xiàn)參見本人的開源項目:
github地址為:https://github.com/iushas/mysqld_exporter
4、node_exporter
node_exporter 跟mysqld_exporter 差不多僻孝,也是基于Prometheus官方提供的監(jiān)控插件來修改,但是這里跟mysqld_exporter 不同的是守谓,
1穿铆、阿里云rds機(jī)器層面的監(jiān)控,只能通過阿里云aliyun的監(jiān)控和屬性API進(jìn)行獲取斋荞,使用阿里云aliyun的 API荞雏,又涉及到角色授權(quán)等。
2、對于真實的虛擬機(jī)監(jiān)控悦陋,還是只能做1對1的監(jiān)控,即一個node_exporter 對應(yīng)一個ecs機(jī)器筑辨。
3俺驶、調(diào)用阿里云API的監(jiān)控,可以實現(xiàn)1對多棍辕。
所以這里可以看到第二步Prometheus里的配置一部分還是原來的node配置暮现,一部分是新增加的監(jiān)控參數(shù)配置(帶Rds的)
詳細(xì)介紹參見本人的開源項目:
github地址為:https://github.com/iushas/node_exporter
5、報警推送
這里不再簡述了楚昭, 就是在prometheus里設(shè)置閾值栖袋, 然后推送給Alertmanager,? 然后Alertmanager后面還有一套報警推送和收斂的系統(tǒng)抚太,詳情請看上面的整體監(jiān)控架構(gòu)圖塘幅。
四、圖表展示
這里圖表展示分為2部分尿贫,一部分是引擎層面的監(jiān)控圖晌块,直接使用的是Grafana里的Percona插件。另一部分機(jī)器層面的監(jiān)控需要自己手動畫圖帅霜。
關(guān)于這部分匆背,我不打算詳細(xì)說明,只給大家貼兩張圖好了身冀。
五钝尸、總結(jié)
目前市面上還沒有將數(shù)據(jù)庫的?監(jiān)控exporter做成1對多?的方案, 我的這次修改首次實現(xiàn)了這個功能搂根,結(jié)合Prometheus珍促,減少了運(yùn)維成本。經(jīng)過這次改造剩愧, 點我達(dá)的rds監(jiān)控和本地自建數(shù)據(jù)庫的監(jiān)控有了一個完整統(tǒng)一的監(jiān)控體系猪叙, 目前仍在持續(xù)接入中。我后面會持續(xù)更新迭代仁卷,解決和優(yōu)化數(shù)據(jù)庫性能穴翩、監(jiān)控、高可用等方面的問題锦积,并且輸出一些其他的高質(zhì)量實戰(zhàn)工具和文章芒帕。同時本文章的幾個服務(wù)已經(jīng)開源,也希望能給提供給開發(fā)能力沒有很突出的dba們丰介,感興趣的同學(xué)可以嘗試一下背蟆。
更多詳細(xì)內(nèi)容鉴分,參考本人的相關(guān)文檔:
點我達(dá)博客:rds數(shù)據(jù)庫本地化改造
微信公眾號:rds數(shù)據(jù)庫本地化改造