一. 需求背景 MongoDB資料庫的強大的文檔模型使其成為處理數據的最佳方式。文檔適用於廣泛的流行數據模型,支持各種各樣的場景。文檔模型可以包含鍵值、關係數據集和圖形數據集,當然,還可以包含父子關係、列表/數組以及其他層次關係,它們比傳統的關係型資料庫技術(表格)具有更大的靈活性。由於文檔模型與主 ...
一. 需求背景
MongoDB資料庫的強大的文檔模型使其成為處理數據的最佳方式。文檔適用於廣泛的流行數據模型,支持各種各樣的場景。文檔模型可以包含鍵值、關係數據集和圖形數據集,當然,還可以包含父子關係、列表/數組以及其他層次關係,它們比傳統的關係型資料庫技術(表格)具有更大的靈活性。由於文檔模型與主流面向對象編程語言中的對象直接對應,因此開發人員可以根據現實世界中實體之間的自然關係存儲和組織數據,從而將重點放在以最有意義的方式構建應用程式上,而不是圍繞其資料庫的局限性開展工作。因此,使用文檔模型顯著提高了開發人員的生產效率,使組織機構能夠更快地進行創新。MongoDB CEO 兼總裁Dev Ittycheria稱之為: 文檔即未來。
但是MongoDB通用的監控工具有限,其中又有一部分還是要收費的,通過工具 Percona Monitoring and Management 進行監控,是個不錯的選擇。但在慢查詢收集方面,需要開啟Profiling,對性能方面會有一些侵害,另外,更細粒度的監控項維護起來也不容易。如果不想不開啟Profiling,我們還可以通過收集分析mongodb的運行log來來進行性能監控,並且通過運行日誌還可以獲取更多的運行狀態相關的信息。
今天介紹的就是一款專門用來讀取、分析MongoDB運行日誌的工具--Mtools。
二. Mtools 的介紹
Mtools的工具包和功能可以通過下麵的List來描述。
工具包 | 工具 | 功能概覽 | 實現功能 | 執行的命令(案例) |
mtools | Mlogfilter | mlogfileter可以簡單理解為日誌的過濾器 | 列出日誌文件中所有的slow log(以json格式輸出) | mlogfilter mongod.log --slow 100 --json |
通--from 和 --to 參數限定搜索範圍 | mlogfilter mongod.log --slow 100 --from 2018-12-10T09:32:26 --to 2018-12-10T09:58:26 | |||
上面命令限定範圍 也通過 to 來指定時間段,例如監控10min內的數據 | mlogfilter mongod.log --from 2018-12-10T09:32:26 --to +10min | |||
通過mlogfilter查詢日誌中某個表的slow log(超過100ms的) | mlogfilter --namespace xxx.xx --slow 100 mongod.log | |||
mloginfo | mloginfo可以過濾總結出slow query的情況,以及為日誌中各類最常常出現情況進行統計 | 通過mloginfo統計日誌中connections的來源情況 | mloginfo mongod.log --connections | |
通過mloginfo查看日誌中所記錄的複製集狀態變更(如果有的話) | mloginfo mongod.log --rsstate | |||
通過mloginfo統計查看日誌中慢查詢的分類 | mloginfo --queries mongod.log | |||
通過mloginfo統計日誌中各類信息的distinct | mloginfo mongod.log --distinct | |||
mplotqueries | 用不同類型的圖將日誌文件可視化(需要安裝matplotlib) | 通過mplotqueries進行慢查詢散點分佈圖繪製 | mplotqueries mongod.log --output-file slow01-2.png | |
通過mplotqueries進行慢查詢散點分佈圖繪製,且只返回前10個 | mplotqueries mongod.log --output-file slow01-4.png --logscale --group-limit 10 | |||
僅看日誌中某一個表的慢查詢散點分佈情況 | mlogfilter mongod.log --namespace xx.xxx |mplotqueries --output-file slow01-5.png | |||
通過mplotqueries來對日誌中的慢查詢進行操作類型分佈 | mplotqueries mongod.log --group operation --output-file slow01-6.png | |||
查看每小時的insert情況 | mlogfilter mongod.log --operation insert | mplotqueries --type histogram --bucketsize 3600 --output-file 01-11.png |
註:mongod.log 是MonogoDB 運行時產生的日誌文件名字,也可以是其它日誌文件名。
三. Mtools安裝的詳細步驟
很多同學抱怨安裝比較麻煩,錯誤很多,在這兒,把安裝的詳細步驟梳理如下。
Step 1 下載pip程式包
wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb"
Step 2 解析下載的文件
Step 3 安裝 python setup.py install
此時報錯,提示錯誤信息如截圖
Step 4 針對上述錯誤,需安裝setuptools,python下的setuptools。此程式包帶有一個easy_install的工具,在安裝python的每三方模塊、工具時很有用,。
下載
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz#md5=f07e4b0f4c1c9368fcd980d888b29a65
解壓
Step 5 轉到解析後的文檔中,再次安裝 python setup.py install
安裝成功。
Step 6 安裝 yum -y install python-pip
如果提示錯誤
No package python-pip available.
Error: Nothing to do
請看後面的附註
Step 7 安裝 mtools
執行命令 pip install mtools
Step 8 安裝效果驗證
使用其中的mlogfileter命令,查看日誌超過100ms的慢查詢。
通過mloginfo統計日誌中connections的來源情況
驗證工具安裝OK。
安裝後,工具包所在的文檔位於 /usr/lib/python2.7/site-packages/mtools 下 (自動生成)
四 附錄
A:解決 No package python-pip available的問題。
此錯誤的原因主要是沒有安裝epel。索引, 運行以下命令,安裝epel
安裝 epel-release後,再次安裝 python-pip,不再報錯。
B:運行 mplotqueries 工具 需安裝 python-matplotlib 包,和修改mplotqueries.py文件
否則報錯,具體信息如下:
安裝命令 yum install python-matplotlib
到此,還沒結束,還會報錯,我們還需要修改 /usr/lib/python2.7/site-packages/mtools/mplotqueries/mplotqueries.py 執行文件。
添加 以下指令
import matplotlib as mpl mpl.use('Agg')
添加前
添加後
再次執行 mplotqueries 命令後,看出生成了我們想要的 01-2.png 統計文件
本文版權歸作者所有,未經作者同意不得轉載,謝謝配合!!!