Zabbix应用八:Zabbix监控MongoDB

利用Zabbix监控MongoDB

 

一、首先介绍mongodb采集到的数据含义:

1、状态采集命令:

>db.serverStatus();

2、输出内容:

{
    "host" : "localhost",
    "version" : "2.2.6",
    "process" : "mongod",  
    "pid" : 55123,
    "uptime" : 18654536,
    "uptimeMillis" : NumberLong("18654536224"),
    "uptimeEstimate" : 18407100,
    "localTime" : ISODate("2017-07-10T08:06:17.628Z"),
    "locks" : {
        "." : {
            "timeLockedMicros" : {
                "R" : NumberLong(1203), #所有库全局读锁总微秒数
                "W" : NumberLong(1607)  #所有全库局写锁总微妙数
            },
            "timeAcquiringMicros" : {
                "R" : NumberLong(168),  #所有库全局读锁的锁等待总微秒数
                "W" : NumberLong(41)    #所有库全局写锁的锁等待总微秒数
            }
        },
        "admin" : {
            "timeLockedMicros" : {      
                
            },
            "timeAcquiringMicros" : {
                
            }
        },
        "local" : {
            "timeLockedMicros" : {
                "r" : NumberLong(4118711),
                "w" : NumberLong(0)
            },
            "timeAcquiringMicros" : {
                "r" : NumberLong(2191541),
                "w" : NumberLong(0)
            }
        },
        "org_center" : {
            "timeLockedMicros" : {
                "r" : NumberLong("13835793898"),
                "w" : NumberLong("20466120642")
            },
            "timeAcquiringMicros" : {
                "r" : NumberLong(352664878),
                "w" : NumberLong("29283950076")
            }
        },
        "org_centr" : {
            "timeLockedMicros" : {
                "r" : NumberLong(124236),
                "w" : NumberLong(180)
            },
            "timeAcquiringMicros" : {
                "r" : NumberLong(10119),
                "w" : NumberLong(10)
            }
        },
        "shopProduct" : {
            "timeLockedMicros" : {
                "r" : NumberLong(134997),
                "w" : NumberLong(0)
            },
            "timeAcquiringMicros" : {
                "r" : NumberLong(14241),
                "w" : NumberLong(0)
            }
        },
        "tb_shop" : {
            "timeLockedMicros" : {
                "r" : NumberLong(1405192),
                "w" : NumberLong(0)
            },
            "timeAcquiringMicros" : {
                "r" : NumberLong(146122),
                "w" : NumberLong(0)
            }
        },
        "test" : {
            "timeLockedMicros" : {
                "r" : NumberLong(3090622),
                "w" : NumberLong(2170)
            },
            "timeAcquiringMicros" : {
                "r" : NumberLong(414040),
                "w" : NumberLong(130)
            }
        }
    },
    "globalLock" : {
        "totalTime" : NumberLong("18654536224000"),
        "lockTime" : NumberLong(1607),
        "currentQueue" : {
            "total" : 0,
            "readers" : 0,
            "writers" : 0
        },
        "activeClients" : {
            "total" : 0,
            "readers" : 0,
            "writers" : 0
        }
    },
    "mem" : {
        "bits" : 64,         #64位操作系统
        "resident" : 238,    #共占用屋里内存M
        "virtual" : 448,     #占用虚拟内存
        "supported" : true,
        "mapped" : 256       #映射内存
    },
    "connections" : {
        "current" : 16,      #当前活跃连接数
        "available" : 803    #剩余空闲连接数
    },
    "extra_info" : {
        "note" : "fields vary by platform",
        "heap_usage_bytes" : 30607592,
        "page_faults" : 200
    },
    "indexCounters" : {
        "btree" : {
            "accesses" : 24067164,  #索引被访问次数
            "hits" : 24067164,      #索引命中量
            "misses" : 0,
            "resets" : 0,
            "missRatio" : 0
        }
    },
    "backgroundFlushing" : {
        "flushes" : 310905,                   #数据库刷新写到磁盘的次数
        "total_ms" : 214212,                  #数据库刷新数据到磁盘花费的微秒数
        "average_ms" : 0.688995030636368,     #执行单次刷新花费的平均微秒数
        "last_ms" : 5,
        "last_finished" : ISODate("2017-07-10T08:05:26.598Z")
    },
    "cursors" : {
        "totalOpen" : 0,
        "clientCursors_size" : 0,
        "timedOut" : 60
    },
    "network" : {
        "bytesIn" : 5150258135,       #流入数据库总量
        "bytesOut" : 10535203727,     #从数据库流出总量
        "numRequests" : 32203604      #数据库总请求数
    },
    "opcounters" : {
        "insert" : 6010564,       #总insert数据量
        "query" : 7507450,        #总query数据量
        "update" : 573085,        #总update数据量
        "delete" : 2563194,       #总delete数据量
        "getmore" : 308,          #游标调用的getMore总次数
        "command" : 16077462      #执行命令的总次数
    },
    "asserts" : {
        "regular" : 0,
        "warning" : 0,
        "msg" : 0,
        "user" : 37,
        "rollovers" : 0
    },
    "writeBacksQueued" : false,
    "recordStats" : {
        "accessesNotInMemory" : 0,
        "pageFaultExceptionsThrown" : 0,
        "org_center" : {
            "accessesNotInMemory" : 0,
            "pageFaultExceptionsThrown" : 0
        },
        "tb_shop" : {
            "accessesNotInMemory" : 0,
            "pageFaultExceptionsThrown" : 0
        },
        "test" : {
            "accessesNotInMemory" : 0,
            "pageFaultExceptionsThrown" : 0
        }
    },
    "ok" : 1
}

 zabbix监控页面的主要数据开源就是这里。 

 3、利用zabbix用户自定义监控功能 userparameter 来监控MongoDB:

   3.1、修改zabbix_agentd.conf,允许接受自定义参数:

UnsafeUserParameters=1

  3.2、定义数据采集命令:

UserParameter=MongoDB.status[*],/bin/echo "db.serverStatus().$1" |/data/mongodb/bin/mongo admin | grep "$2" | awk -F ':' '{print $$2}' | awk -F ',' '{print $$1}'

  注意:不同环境,请注意主机ip和端口号等。

4、zabbix监控页面新建监控模版、添加监控项、生成图形:

创建模版:Template App MongoDB(已经手动创建完毕,并创建监控项,需要者可自行下载)

由于监控项众多,本例只贴出其中一个监控项的配置,如下图:

需要注意的是 键值 项,需和 UserParameter 中定义的格式一致。

5、模版创建完成后,套用到被监控的主机即可。

最终效果如下图:

 

posted @ 2017-07-10 16:05  ahaii  阅读(5321)  评论(2编辑  收藏  举报