2014年9月18日 星期四

MongoDB 監控:使用 MongoDB Management Service

MongoDB 官方有提供 MongoDB Management Service (MMS) 這個服務
可以用來監控指定的 MongoDB 資料庫,並且畫出還蠻詳細的曲線圖供使用者分析自己的資料庫運作狀況。


MMS 主要有提供監控和備援的能力,其中監控的部份是免費的、備援則是必須付費。
同時 MMS 提供了雲端版的服務和獨立安裝版,前者可以直接把統計資料送到 MongoDB 營運的 MMS 服務,後者則是自己維護一台自有的 MMS 主機。
對前者來說,使用者只需要註冊一個 MMS 的帳號,然後在能夠存取想監控的 MongoDB 的一台主機上安裝監控的代理人程式即可。
不過如果有些監控的功能想使用(例如 profiling 功能,會送出每個 MongoDB 接受的指令到 MMS 上),但又不希望這些資料被送上雲端
就可以改用後者,自己安裝自己的 MMS 囉。

這篇主要是建置一個自有的 MMS 環境的簡易教學。

1. 安裝 MMS 服務
安裝的環境為 ubuntu 12.04.4,官方的安裝教學可以參考 [2],其實也就是幾個簡單的指令而已!

首先先去官方網站上下載安裝用的 debian 套件,我這裡下載下來的檔名是「mongodb-mms_1.5.0.130-1_x86_64.deb」
接著執行 dpkg 把 MMS 服務安裝到系統上。
sudo dpkg --install mongodb-mms_1.5.0.130-1_x86_64.deb

安裝完的 MMS 服務會放在 /opt/mongodb/mms/ 這個路徑,可以依照 [2] 的說明去設置設定檔 /opt/mongodb/mms/conf/conf-mms.properties
主要好像只是一些路徑跟 E-mail 的設定而已。
mms.centralUrl=http://<public_ip>:8080
mms.backupCentralUrl=http://<public_ip>:8081

mms.fromEmailAddr=mms-admin@example.net
mms.replyToEmailAddr=mms-admin@example.net
mms.adminFromEmailAddr=mms-admin@example.net
mms.adminEmailAddr=mms-admin@example.net
mms.bounceEmailAddr=mms-admin@example.net

mongo.mongoUri=mongodb://<mms_mongod_ip>:27017/
mongo.replicaSet=rs0

最後把 MMS 啟動就可以了(真是簡單..)
sudo service mongodb-mms start

2. 安裝 MMS 代理人程式
MMS 服務本身不會主動做監控,而是交給另一個獨立的代理人程式去負責監控
因此最重要的一件事是代理人程式必須能夠存取到要監控的 MongoDB 主機。

在我的環境中,為了簡單起見,我直接把 MMS 跟監控的代理人程式裝在同一台主機上。

在安裝之前,首先要先進入 MMS 的介面(例如 http://<public_ip>:8080)並登入(還沒註冊的話當然要先註冊帳號)
登入後選擇 Settings -> Monitoring Agent -> ubuntu (12.04+),就會彈出一個小視窗教導怎麼安裝監控的代理人程式。

用以下的指令下載並安裝代理人程式:
curl -OL http://<public_ip>:8080/download/agent/monitoring/mongodb-mms-monitoring-agent_2.4.2.113-1_amd64.deb
sudo dpkg -i mongodb-mms-monitoring-agent_2.4.2.113-1_amd64.deb

安裝完之後,編輯 /etc/mongodb-mms/monitoring-agent.config 這個檔案,在上面設定 mmsApiKey 和 mmsBaseUrl 兩個參數
其中 mmsApiKey 要用 MMS 介面上顯示的那串 API 金鑰,因為每個 MMS 安裝完以後金鑰應該都是不同的,所以請自行查看自己的金鑰吧
mmsBaseUrl 則是 MMS 服務的位置,預設填寫的位置是 MongoDB 官方營運的雲端版 MMS,這裡應該要改成自己的 MMS 位置。

全部設定完以後,重新啟動監控的代理人程式即可。
sudo start mongodb-mms-monitoring-agent

想要驗證代理人程式的運作狀況的話,可以直接進入 MMS 介面中的 Monitoring -> Monitoring Agent 頁面查看狀態。
如果在新的主機上安裝監控代理人程式,舊的主機想把代理人程式移除
只需要直接把欲移除的代理人程式移除,然後等一天後 MMS 上自動就會把無效的代理人程式的資料移除了。

3. 將欲監控的 MongoDB 節點加入 MMS 的監控清單
進入 MMS 介面的 Monitoring -> Deployment 頁面,然後點選右上角的 Add Host 就可以增加監控的主機了
不過要注意的是,如果目標主機本身沒有固定的 DNS 域名的話,雖然在 Add Host 處可以用 IP 代替
但 MMS 最後好像還是會自動換成主機的主機名稱
這時安裝代理人程式的主機就必須要設定對應的 /etc/hosts,如此一來代理人程式才能正確地存取資料。

例如我想監控的主機的 IP 是 192.168.1.100,主機本身的主機名稱是 ubuntu
就必須在安裝代理人程式的主機上編輯 /etc/hosts,寫上這樣一行資料:
192.168.1.100 ubuntu
這樣代理人程式才能夠一直正確地存取到 192.168.1.100 這台主機
(因為它好像加入一段時間之後會自動從 192.168.1.100:27017 變成改用 ubuntu:27017 的方式在存取)

4. 設定硬體監控
在 MMS 的介面上應該可以注意到有個頁籤是 Hardware,可以監控像是 CPU 使用率、記憶體或者是磁碟 I/O 等資料
要收集到這些資料,必須要在被監控的 MongoDB 主機(即 192.168.1.100)上安裝 munin 的套件 [3]。

sudo apt-get install munin-node

用上述指令安裝完之後,預設 munin 是只能被本機存取 [4],必須改成能被外部存取,因此要去編輯 /etc/munin/munin-node.conf,把 allow 的內容註解掉並改成如下面的內容:
#allow ^127\.0\.0\.1$
cidr_allow 0.0.0.0/0
改完後直接重新啟動 munin 即可。
service munin-node restart
接著稍微小等一段時間,應該就可以在 MMS 上看到硬體監控的結果了。

5. 設定 MongoDB Profiler
MongoDB 本身有提供 query profiling 的功能,雖然會導致 query 效率稍微低落一點,但可以協助檢查是不是有哪些 query 效率不佳。
這個功能預設是沒有開啟的,想打開的話可以透過 shell 進入 MongoDB,在想要被 profiling 的資料庫內執行以下的指令:
db.setProfilingLevel(2)
詳情可以參閱官方文件 [5]。

Profiler 打開之後,就可以在 MMS 介面上的 Profile Data 頁籤中看到一些 profiling 的資料了。


參考資料
1、MongoDB Management Service (MMS)
2、Install or Upgrade the On-Prem MMS Monitoring with deb Packages
3、Configure Hardware Monitoring with munin-node
4、Diagnostic and Troubleshooting Guide
5、Analyze Performance of Database Operations

沒有留言: