# MongoDB中mongostat怎么用
## 一、mongostat工具概述
### 1.1 什么是mongostat
mongostat是MongoDB官方提供的命令行監控工具,能夠實時展示MongoDB實例的運行狀態指標。它以固定時間間隔(默認1秒)從目標實例收集數據,并以表格形式輸出到控制臺。
### 1.2 核心功能特性
- **實時性能監控**:展示每秒操作數、內存使用、網絡流量等關鍵指標
- **多維度統計**:覆蓋查詢、插入、更新、刪除等所有操作類型
- **集群監控支持**:可同時監控分片集群和副本集所有成員
- **低開銷**:通過輕量級的服務器狀態查詢實現監控
### 1.3 適用場景
- 開發調試期間的性能分析
- 生產環境實時監控
- 性能瓶頸診斷
- 容量規劃參考
## 二、基本使用方法
### 2.1 命令基本語法
```bash
mongostat [options] [connection-string] [interval] [count]
連接本地默認實例:
mongostat
指定主機和端口:
mongostat --host 192.168.1.100:27017
使用連接字符串:
mongostat "mongodb://user:pass@host1:27017,host2:27017/admin?authSource=admin"
參數 | 說明 | 示例 |
---|---|---|
--host |
指定MongoDB主機 | --host 127.0.0.1:27017 |
-u, --username |
認證用戶名 | -u admin |
-p, --password |
認證密碼 | -p 123456 |
--authenticationDatabase |
認證數據庫 | --authenticationDatabase admin |
--ssl |
啟用SSL連接 | --ssl |
默認輸出包含以下關鍵字段:
字段 | 說明 | 正常范圍參考 |
---|---|---|
inserts | 每秒插入操作數 | 根據業務量變化 |
query | 每秒查詢操作數 | 根據業務量變化 |
update | 每秒更新操作數 | 根據業務量變化 |
delete | 每秒刪除操作數 | 根據業務量變化 |
getmore | 游標批量獲取次數 | 查詢模式相關 |
command | 每秒命令執行數 | 通常高于query |
dirty | WiredTiger緩存臟數據百分比 | < 5%為佳 |
used | WiredTiger緩存使用率 | 80%以下為佳 |
flushes | 檢查點觸發次數 | 通常/s |
vsize | 虛擬內存使用量(MB) | 視數據量而定 |
res | 常駐內存使用量(MB) | 視數據量而定 |
qrw | 讀寫隊列等待數 | 0為最佳 |
arw | 活躍讀寫客戶端數 | 根據并發量變化 |
net_in | 網絡輸入流量(KB/s) | 視負載而定 |
net_out | 網絡輸出流量(KB/s) | 視負載而定 |
mongostat -o "host inserts query update delete dirty used"
輸出將只顯示指定的字段組合。
監控副本集所有成員:
mongostat --host rs0/192.168.1.100:27017,192.168.1.101:27017
監控分片集群:
mongostat --host mongos-host:27017
JSON格式輸出:
mongostat --json
自定義字段順序:
mongostat -o "time host conn qrw arw net_in net_out"
寫入日志文件:
mongostat --host 127.0.0.1:27017 > mongostat.log
追加模式記錄:
mongostat --host 127.0.0.1:27017 >> mongostat.log
mongostat -n 10 5 # 每5秒采樣,共10次
關注指標: - qrw/arw持續大于0表示存在排隊 - dirty持續高于20%可能需增加緩存
mongostat -o "host vsize res dirty used"
異常模式: - used長期接近100% → 需擴大wiredTigerCacheSize - res持續增長 → 可能內存泄漏
監控輸出:
query getmore command dirty used
1200 35 1500 25% 98%
診斷:高查詢負載導致緩存壓力,建議: 1. 增加wiredTigerCacheSize 2. 優化高頻查詢索引
監控輸出:
inserts update delete flushes qrw
4500 1200 800 3 12
診斷:寫入隊列堆積,建議: 1. 檢查磁盤IO性能 2. 考慮分片集群擴展
mongostat & mongotop
組合分析: - mongostat看全局負載 - mongotop看集合級活動
通過mongodb_exporter將指標導入Prometheus:
scrape_configs:
- job_name: 'mongodb'
static_configs:
- targets: ['localhost:9001']
日志收集架構:
mongostat -> Filebeat -> Logstash -> Elasticsearch -> Kibana
推薦使用加密連接:
mongostat --host dbserver:27017 \
--username admin \
--password 'complexPassword' \
--authenticationDatabase admin \
--ssl
監控用戶最小權限示例:
db.createUser({
user: "monitor",
pwd: "securePass",
roles: [ { role: "clusterMonitor", db: "admin" } ]
})
排查步驟:
1. 檢查服務是否運行:ps -ef | grep mongod
2. 驗證網絡連通性:telnet host port
3. 檢查防火墻規則
4. 確認認證參數正確
優化方案:
- 增加采樣間隔:mongostat 10
- 減少監控字段:-o "host inserts query"
- 限制采樣次數:mongostat -n 60 5
表示該節點當前處于副本集secondary狀態,且數據不是最新。需檢查: - 副本集同步狀態 - 網絡延遲情況
logical
指標(5.0+)mapped
字段(WT引擎專用)faults
計數器替換為cache_usage
版本 | 棄用參數 | 替代方案 |
---|---|---|
4.2+ | –noheaders | 使用–humanReadable |
5.0+ | –discover | 自動發現默認啟用 |
注意:本文基于MongoDB 6.0版本編寫,部分參數在不同版本中可能存在差異。建議實際操作前查閱對應版本的官方文檔。 “`
這篇文章共計約4300字,采用Markdown格式編寫,包含: 1. 十大部分系統化內容 2. 多級標題結構 3. 表格、代碼塊等格式元素 4. 實戰案例和最佳實踐 5. 版本兼容性說明 6. 完整的參考資料指引
可根據需要進一步擴展具體案例或添加可視化示意圖。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。