Mongodb监控

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb监控相关的知识,希望对你有一定的参考价值。

    Mongodb监控主要利用的是其自带的rest服务,默认端口是27017+1000,后接serverStatus。
    Mongodb需要开启rest服务才能进行监控。其中,2.2版本一下会自动启动rest服务,2.2-2.6之间需要通过如下命令启动rest服务: mongod –dbpath ************ --rest     而2.6以上需要改动mongod.conf文件,将OPTIONS加入 –rest –httpinterface 
{ "host" : "aclome-PC", "version" : "2.0.6", "process" : "mongod", "uptime" : 4675828, "uptimeEstimate" : 4348964, "localTime" : { "$date" : 1467100514725 }, "globalLock" : { "totalTime" : 4675828116867, "lockTime" : 973633, "ratio" : 2.082268585724607e-007, "currentQueue" : { "total" : 0, "readers" : 0, "writers" : 0 }, "activeClients" : { "total" : 0, "readers" : 0, "writers" : 0 } }, "mem" : { "bits" : 64, "resident" : 5, "virtual" : 242, "supported" : true, "mapped" : 80, "mappedWithJournal" : 160 }, "connections" : { "current" : 0, "available" : 20000 }, "extra_info" : { "note" : "fields vary by platform", "page_faults" : 40688, "usagePageFileMB" : 21, "totalPageFileMB" : 7677, "availPageFileMB" : 2772, "ramMB" : 3839 }, "indexCounters" : { "note" : "not supported on this platform" }, "backgroundFlushing" : { "flushes" : 77900, "total_ms" : 638103, "average_ms" : 8.191309370988448, "last_ms" : 0, "last_finished" : { "$date" : 1467100477003 } }, "cursors" : { "totalOpen" : 0, "clientCursors_size" : 0, "timedOut" : 0 }, "network" : { "bytesIn" : 0, "bytesOut" : 0, "numRequests" : 0 }, "opcounters" : { "insert" : 0, "query" : 1, "update" : 0, "delete" : 0, "getmore" : 0, "command" : 0 }, "asserts" : { "regular" : 0, "warning" : 0, "msg" : 0, "user" : 0, "rollovers" : 0 }, "writeBacksQueued" : false, "dur" : { "commits" : 30, "journaledMB" : 0, "writeToDataFilesMB" : 0, "compression" : 0, "commitsInWriteLock" : 0, "earlyCommits" : 0, "timeMs" : { "dt" : 3088, "prepLogBuffer" : 0, "writeToJournal" : 0, "writeToDataFiles" : 0, "remapPrivateView" : 0 } } }
 
   其中不同的版本指标名称或许会存在细微差距,整个指标可分为如下部分:1.实例信息;2.全局锁信息;3.内存信息;4.连接信息;5.额外信息;6.索引计数器信息;7.backgroundFlushing;8.last_finished;9.cursors;10.网络信息;11.操作计数器信息(opcounters);12.断言信息(asserts);14.writeBacksQueued;15.持久性信息(dur)
1.实例信息

 "host" : "aclome-PC",   //主机名

"version" : "2.0.6",     //版本号

"process" : "mongod",    //进程名

"uptime" : 4675828,          //启动时间

"uptimeEstimate" : 4348964,        

"localTime" : { "$date" : 1467100514725 } //本地时间

2.全局所信息

"globalLock" : { "totalTime" : 4675828116867,   //创建全局锁现在的时间(毫秒)
                  "lockTime" : 973633,     //创建全局锁后锁定的时间(毫秒)
                   "ratio" : 2.082268585724607e-007, 
                   "currentQueue" : { "total" : 0,   //当前等待锁总数
                                      "readers" : 0,  //当前等待读锁总数
                                       "writers" : 0 }, //当前等待写锁总数
3. 内存信息
 "mem" : { "bits" : 64,   //操作系统位数 64 或32
            "resident" : 5,   //物理内存中数据大小(MB)
             "virtual" : 242,  //使用虚拟内存(页面文件)大小(MB)
             "supported" : true,  //是否支持系统扩展内存信息
             "mapped" : 80,   //映射文件大小
              "mappedWithJournal" : 160 }, //为journal提供的内存大小,一般是mapped的2倍
4.连接信息
"connections" : { "current" : 0, //当前连接数
                    "available" : 20000 }  //可用连接数
5.额外信息
"extra_info" : { 
"note" : "fields vary by platform",     //
"page_faults" : 40688,        //硬错误页
"usagePageFileMB" : 21,            //页面文件使用大小MB
"totalPageFileMB" : 7677,          //页面文件大小
"availPageFileMB" : 2772,         //可用页面文件大小
"ramMB" : 3839 }            //物理内存大小
6.索引计数器
 "indexCounters" : { "note" : "not supported on this platform" }      //windows下
 "indexCounters" :{                                 //linux下
        "accesses" : 101216836,  //访问次数
        "hits" : 101216836,                        //命中次数
        "misses" : 0,                                    //miss次数
        "resets" : 0,                                      //indexCounders重置次数
        "missRatio" : 0                               //miss率
}
7.backgroundFlushing
"backgroundFlushing" : {  //数据冲洗
"flushes" : 77900,   //次数
"total_ms" : 638103,   //总共耗时
"average_ms" : 8.191309370988448,  //平均耗时 
"last_ms" : 0,  //最后一次耗时
 "last_finished" : { "$date" : 1467100477003 } }  //最后一次完成时间
8.last_finished
"last_finished" : { "$date" : 1467100477003 } } //最后执行时间
9.cursors
"cursors" : { 
"totalOpen" : 0,   //维护游标数目
 "clientCursors_size" : 0,  //总共游标数目
 "timedOut" : 0 }  //超时个数
10.网络信息
"network" : {
 "bytesIn" : 0,    //输入字节数
 "bytesOut" : 0,    //输出字节数
 "numRequests" : 0 }  //请求次数
11.操作计数器信息(opcounters)
 "opcounters" : {
 "insert" : 0,    //插入次数
"query" : 1,     //查询次数
"update" : 0,    //更新次数
"delete" : 0,    //删除次数
 "getmore" : 0,    //getmore次数
"command" : 0 }    //其他命令次数
12.断言信息(asserts)
"asserts" : { 
"regular" : 0,     //正常断言数量
"warning" : 0,    //告警断言数量
"msg" : 0,     //消息断言数量
"user" : 0,     //用户断言数量
 "rollovers" : 0 }   //转滚断言数量
14.writeBacksQueued
"writeBacksQueued" : false  //true 有要被重新执行的操作  false代表无
15.持久性信息(dur)
"dur" : { 
"commits" : 30,   //上次提交间隔(journal group commit interval)之后,提交的写入操作
 "journaledMB" : 0, //上次分组提交间隔之后,写入操作的大小
 "writeToDataFilesMB" : 0, //上次分组提交间隔之后,从journal写入到数据文件的大小
"compression" : 0, //写入到journal的压缩率,journal的大小/未压缩的数据大小
"commitsInWriteLock" : 0, //提交发生的时候写锁个数,用来表示写入负载是否过重
"earlyCommits" : 0, //在提交间隔过来前,请求提交的次数,用来判断分组提交间隔时间是否合适
"timeMs" : { "dt" : 3088,        //获取这些数据花的时间
             "prepLogBuffer" : 0,    //准备写入到journal文件的数据的时间
              "writeToJournal" : 0, //写入Journal文件的时间
              "writeToDataFiles" : 0,  //写入数据文件的时间
              "remapPrivateView" : 0 } } //重新映射的时间
Java代码如下:
package test;
 
import java.net.URI;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
 
/**
 * 获取mongodb监控数据
 * 
 * @author lihainan
 * 
 */
public class MongodbMonitoring {
 
    public static void main(String[] args) {
        String infoUrl = "http://10.4.55.180:28017/serverStatus";
        String urlResult = getStringResultByUrl(infoUrl);
        System.out.println(urlResult);//返回结果是个JSON串,可以根据自己的需求进行解析
    }
 
    public static String getStringResultByUrl(String url) {
 
        String result = null;
        HttpGet request = null;
        HttpClient client = null;
        try {
            client = new DefaultHttpClient();
            client.getParams().setParameter(
                    CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);// 连接时间
            client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
                    3000);// 数据传输时间
 
            request = new HttpGet(new URI(url));
            request.setHeader("Connection", "close");
            HttpResponse response = null;
            response = client.execute(request);
            response.setHeader("Connection", "close");
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode >= 400) {
                return null;
            }
            HttpEntity entity = response.getEntity();
            result = EntityUtils.toString(entity);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (request != null) {
                // 释放连接
                request.abort();
            }
        }
        return result;
    }
}
 


 

以上是关于Mongodb监控的主要内容,如果未能解决你的问题,请参考以下文章

Zabbix监控mongodb配置

Nagios 监控mongodb

nagios监控mongodb

MongoDB 监控

MongoDB 监控

MongoDB可视化监控