我們組最近有個需求, 想要監控 mysql 各個 table 的 row size,
直接讓某台 cron 機器, 開 mysql connection 到各台 mysql 讀 INFORMATION_SCHEMA 是最直覺的,
也有同事說, 讓 mysql server 自己讀自己的 INFORMATION_SCHEMA,
讓別人透過 http 來讀 json 就好, 但是這樣可能就得跑一下 apache 之類的.
後來我研究了一下, 公司內部本來就有一個 package, 可以透過 http 提供 mysql 各項的 metrics,
原本想要稍微修改這個 package, 讓我們想要提供的資料可以套用進去,
更深入研究之後, 發現這個 package 的 desc 寫著 mysql status framework,
Framework 唷, 真厲害, 而他真的就是一套用 perl 寫的簡單 framework,
用了 AnyEvent::HTTPD 做前端, 用了內部的 dbm 當 storage,
只要繼承他的 perl module, 寫一些 callback function,
就可以把怎樣搜集資料, 以及 http handler 都搞定,
立馬就寫了一下, 大概不到一百行就搞定我們要的功能,
也不會有 performance impact,
因為往 mysql 的 query 都不是即時的,
是透過 collector 每多久查一下, 寫到 storage,
前端的 AnyEvent::HTTPD 收到 request, 往 storage 查, 馬上就吐出去.
簡單, 好用, 又讓我覺得很爽.
工程師想要的是什麼? 就是這種偶然遇到的小 hack 得到的喜悅呀.
直接讓某台 cron 機器, 開 mysql connection 到各台 mysql 讀 INFORMATION_SCHEMA 是最直覺的,
也有同事說, 讓 mysql server 自己讀自己的 INFORMATION_SCHEMA,
讓別人透過 http 來讀 json 就好, 但是這樣可能就得跑一下 apache 之類的.
後來我研究了一下, 公司內部本來就有一個 package, 可以透過 http 提供 mysql 各項的 metrics,
原本想要稍微修改這個 package, 讓我們想要提供的資料可以套用進去,
更深入研究之後, 發現這個 package 的 desc 寫著 mysql status framework,
Framework 唷, 真厲害, 而他真的就是一套用 perl 寫的簡單 framework,
用了 AnyEvent::HTTPD 做前端, 用了內部的 dbm 當 storage,
只要繼承他的 perl module, 寫一些 callback function,
就可以把怎樣搜集資料, 以及 http handler 都搞定,
立馬就寫了一下, 大概不到一百行就搞定我們要的功能,
也不會有 performance impact,
因為往 mysql 的 query 都不是即時的,
是透過 collector 每多久查一下, 寫到 storage,
前端的 AnyEvent::HTTPD 收到 request, 往 storage 查, 馬上就吐出去.
簡單, 好用, 又讓我覺得很爽.
工程師想要的是什麼? 就是這種偶然遇到的小 hack 得到的喜悅呀.
沒有留言:
張貼留言