基于zabbix3.2对mongodb的监控


脚本:


calendar timegm
time gmtime
urllib.parse

pymongo MongoClient, errors

MongoDB():
    ():
        .mongo_host = .mongo_port = .mongo_db = [, ]
        .mongo_user = urllib.parse.quote_plus()
        .mongo_password = urllib.parse.quote_plus()
        .__conn = .__dbnames = .__metrics = []

    connect():
        .__conn :
            .mongo_user :
                :
                    .__conn = MongoClient(%
                                              (.mongo_host,
                                               .mongo_port))
                errors.PyMongoError py_mongo_error:
                    (%
                          (py_mongo_error))
            :
                :
                    .__conn = MongoClient(%
                                              (.mongo_user,
                                               .mongo_password,
                                               .mongo_host,
                                               .mongo_port))
                errors.PyMongoError py_mongo_error:
                    (%
                          (py_mongo_error))

    add_metrics(, k, v):
        dict_metrics = {}
        dict_metrics[] = k
        dict_metrics[] = v
        .__metrics.append(dict_metrics)

    print_metrics():
        metrics = .__metrics
        metric metrics:
            zabbix_item_key = (metric[])
            zabbix_item_value = (metric[])
            (+ zabbix_item_key + + zabbix_item_value)

    get_db_names():
        .__conn :
            .connect()
        db_handler = .__conn[.mongo_db[]]

        master = db_handler.command()[]
        dict_metrics = {}
        dict_metrics[] = master:
            dict_metrics[] = db_names = .__conn.database_names()
            .__dbnames = db_names
        :
            dict_metrics[] = .__metrics.append(dict_metrics)

    get_mongo_db_lld():
        .__dbnames :
            db_names = .get_db_names()
        :
            db_names = .__dbnames
        dict_metrics = {}
        db_list = []
        dict_metrics[] = dict_metrics[] = {: db_list}
        db_names :
            db_name db_names:
                dict_lld_metric = {}
                dict_lld_metric[] = db_name
                db_list.append(dict_lld_metric)
            dict_metrics[] = {: db_list}
        .__metrics.insert(, dict_metrics)

    get_oplog():
        .__conn :
            .connect()
        db_handler = .__conn[]

        coll = db_handler.oplog.rs

        op_first = (coll.find().sort(, ).limit())
        op_last = (coll.find().sort(, -).limit())

        op_first.count() > op_last.count() > :
            op_fst = (op_first.next())[].time
            op_last_st = op_last[][]
            op_lst = (op_last.next())[].time

            status = ((op_lst - op_fst), )
            .add_metrics(, status)

            current_time = timegm(gmtime())
            oplog = ((((op_last_st).split())[].split())[])
            .add_metrics(, (current_time - oplog))


    get_maintenance():
        .__conn :
            .connect()
        db_handler = .__conn

        fsync_locked = (db_handler.is_locked)
        .add_metrics(, fsync_locked)

        :
            config = db_handler.admin.command(, )
            connstring = (.mongo_host + + (.mongo_port))

            i (, (config[][])):
                connstring config[][][i][]:
                    priority = config[][][i][]
                    hidden = (config[][][i][])

                    .add_metrics(, priority)
                    .add_metrics(, hidden)
        errors.PyMongoError:
            ()

    get_server_status_metrics():
        .__conn :
            .connect()
        db_handler = .__conn[.mongo_db[]]
        ss = db_handler.command()

        .add_metrics(, ss[])
        .add_metrics(, ss[][])
        .add_metrics(, (ss[]))
        .add_metrics(, (ss[]))

        k, v ss[].items():
            .add_metrics(+ k, v)

        k, v ss[].items():
            .add_metrics(+ k, v)

        k [, , , ]:
            .add_metrics(+ k, ss[][k])

        k, v ss[].items():
            .add_metrics(+ k, v)

        k, v ss[].items():
            .add_metrics(+ k, v)

        .add_metrics(,
                         ss[][])

        ss[][] == :
            .add_metrics(,
                             ss[][]
                             [])
            .add_metrics(,
                             ss[][]
                             [])
            .add_metrics(,
                             ss[][]
                             [])

        lock_total_time = ss[][]
        .add_metrics(, lock_total_time)
        k, v ss[][].items():
            .add_metrics(+ k, v)
        k, v ss[][].items():
            .add_metrics(+ k, v)

    get_db_stats_metrics():
        .__conn :
            .connect()
        .__dbnames :
            .get_db_names()
        .__dbnames :
            mongo_db .__dbnames:
                db_handler = .__conn[mongo_db]
                dbs = db_handler.command()
                k, v dbs.items():
                    k [, , , ,
                             , , ,
                             , , ,
                             ]:
                        .add_metrics(+ k +
                                         + mongo_db + , (v))
    close():
        .__conn :
            .__conn.close()

__name__ == :
    mongodb = MongoDB()
    mongodb.get_db_names()
    mongodb.get_mongo_db_lld()
    mongodb.get_oplog()
    mongodb.get_maintenance()
    mongodb.get_server_status_metrics()
    mongodb.get_db_stats_metrics()
    mongodb.print_metrics()
    mongodb.close()

#!/bin/bash


get_MongoDB_metrics(){

python /usr/local/zabbix/scripts/zabbix-mongodb.py

}


# Send the results to zabbix server by using zabbix sender

result=$(get_MongoDB_metrics | /usr/local/zabbix/bin/zabbix_sender -vv -c /usr/local/zabbix/conf/zabbix_agentd.conf -i - 2>&1)

response=$(echo "$result" | awk -F ';' '$1 ~ /^info/ && match($1,/[0-9].*$/) {sum+=substr($1,RSTART,RLENGTH)} END {print sum}')

if [ -n "$response" ]; then

        echo "$response"

else

        echo "$result"

fi


模版:

    3.2

    2017-08-14T15:50:26Z

   

       

            Templates

       

   

   

       

   

   

       

            {Template MongoDB:mongodb.fsync-locked.last()}=1

and {Template MongoDB:mongodb.hidden.last()}=1

and {Template MongoDB:mongodb.priority.last()}=0

            0

           

            Locked, hidden and priority 0 on {HOST.NAME}

            0

           

           

            0

            2

            The database is locked, hidden and priority set to 0

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.fsync-locked.last()}=1

and {Template MongoDB:mongodb.hidden.last()}=1

and {Template MongoDB:mongodb.priority.last()}=1

            0

           

            Locked, hidden and priority 1 on {HOST.NAME}

            0

           

           

            0

            4

            The database is locked, hidden and priority set to 1

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.fsync-locked.last()}=1

and {Template MongoDB:mongodb.hidden.last()}=0

and {Template MongoDB:mongodb.priority.last()}=0

            0

           

            Locked, not hidden and priority 0 on {HOST.NAME}

            0

           

           

            0

            4

            The database is locked, hidden and priority set to 0

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.fsync-locked.last()}=1

and {Template MongoDB:mongodb.hidden.last()}=0

and {Template MongoDB:mongodb.priority.last()}=1

            0

           

            Locked, not hidden and priority 1 on {HOST.NAME}

            0

           

           

            0

            4

            The database is locked, not hidden and priority set to 1

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.oplog.last()}<259200

            1

            {Template MongoDB:mongodb.oplog.last()}>259320

            MongoDB Oplog length 3 days on {HOST.NAME}

            0

           

           

            0

            4

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.oplog.last()}<604800 and not {Template MongoDB:mongodb.oplog.last()}<259200

            1

            {Template MongoDB:mongodb.oplog.last()}>604920

            MongoDB Oplog length 7 days on {HOST.NAME}

            0

           

           

            0

            2

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.oplog-sync.last()}>=60 and not {Template MongoDB:mongodb.oplog-sync.last()}>=300

            1

            {Template MongoDB:mongodb.oplog-sync.last()}<30

            MongoDB Oplog Sync 1 minute on {HOST.NAME}

            0

           

           

            0

            2

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.oplog-sync.last()}>=300

            1

            {Template MongoDB:mongodb.oplog-sync.last()}<240

            MongoDB Oplog Sync 5 minute on {HOST.NAME}

            0

           

           

            0

            4

           

            0

            0

           

           

       

       

            {Template MongoDB:proc.num[mongod].count(#3,0)}=3

            0

           

            MongoDB process is not running on {HOST.NAME}

            0

           

           

            0

            4

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.okstatus.count(#3,0)}=3

            0

           

            MongoDB server status is not OK

            0

           

           

            0

            3

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.used-cache-p.last()}>=90 and {Template MongoDB:mongodb.used-cache-p.last()}<95

            0

           

            MongoDB Wired Tiger Used cache 90% on  {HOST.NAME}

            0

           

           

            0

            2

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.used-cache-p.last()}>=95

            0

           

            MongoDB Wired Tiger Used cache 95% on  {HOST.NAME}

            0

           

           

            0

            4

           

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.fsync-locked.last()}=0

and {Template MongoDB:mongodb.hidden.last()}=1

and {Template MongoDB:mongodb.priority.last()}=0

            0

           

            Not locked, but is hidden and priority 0 on {HOST.NAME}

            0

           

           

            0

            2

            The database is not locked, but is hidden and priority set to 0

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.fsync-locked.last()}=0

and {Template MongoDB:mongodb.hidden.last()}=1

and {Template MongoDB:mongodb.priority.last()}=1

            0

           

            Not locked, is hidden and priority 1 on {HOST.NAME}

            0

           

           

            0

            4

            The database is not locked, is hidden and priority set to 1

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.fsync-locked.last()}=0

and {Template MongoDB:mongodb.hidden.last()}=0

and {Template MongoDB:mongodb.priority.last()}=0

            0

           

            Not locked or hidden, but priority 0 on {HOST.NAME}

            0

           

           

            0

            2

            The database is not locked or hidden, but priority set to 0

            0

            0

           

           

       

       

            {Template MongoDB:mongodb.page.faults.min(#3)}>{$PAGE_FAULT_TH_WARN}

            0

           

            Page faults detected on {HOST.NAME} (LV={ITEM.VALUE})

            0

           

           

            0

            2

           

            0

            0

           

           

       

   

   

       

            MongoDB::asserts

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.asserts.msg

                   

               

               

                    1

                    0

                    F63100

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.asserts.regular

                   

               

               

                    2

                    0

                    2774A4

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.asserts.rollovers

                   

               

               

                    3

                    0

                    A54F10

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.asserts.user

                   

               

               

                    4

                    0

                    FC6EA3

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.asserts.warning

                   

               

           

       

       

            MongoDB::connections

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    4

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.connection.available

                   

               

               

                    1

                    5

                    F63100

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.connection.current

                   

               

           

       

       

            MongoDB::global lock::active clients

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    F63100

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.globalLock.activeClients.total

                   

               

               

                    1

                    0

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.globalLock.activeClients.readers

                   

               

               

                    2

                    0

                    2774A4

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.globalLock.activeClients.writers

                   

               

           

       

       

            MongoDB::global lock::current queue

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    F63100

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.globalLock.currentQueue.total

                   

               

               

                    1

                    0

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.globalLock.currentQueue.readers

                   

               

               

                    2

                    0

                    2774A4

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.globalLock.currentQueue.writers

                   

               

           

       

       

            MongoDB::memory

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    2774A4

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.memory.virtual

                   

               

               

                    1

                    0

                    FC6EA3

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.memory.mappedWithJournal

                   

               

               

                    2

                    0

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.used-cache

                   

               

           

       

       

            MongoDB::network

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.network.bytesIn

                   

               

               

                    1

                    0

                    F63100

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.network.bytesOut

                   

               

               

                    2

                    0

                    2774A4

                    1

                    7

                    0

                   

                        Template MongoDB

                        mongodb.network.numRequests

                   

               

           

       

       

            MongoDB::operations

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    1A7C11

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.operation.command

                   

               

               

                    1

                    0

                    F63100

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.operation.delete

                   

               

               

                    2

                    0

                    2774A4

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.operation.getmore

                   

               

               

                    3

                    0

                    A54F10

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.operation.insert

                   

               

               

                    4

                    0

                    FC6EA3

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.operation.query

                   

               

               

                    5

                    0

                    6C59DC

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.operation.update

                   

               

           

       

       

            MongoDB::OplogLength

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    1A7C11

                    0

                    2

                    0

                   

                        Template MongoDB

                        mongodb.oplog

                   

               

           

       

       

            MongoDB::OplogSync

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    1A7C11

                    0

                    2

                    0

                   

                        Template MongoDB

                        mongodb.oplog-sync

                   

               

           

       

       

            MongoDB::page faults

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    DD0000

                    0

                    7

                    0

                   

                        Template MongoDB

                        mongodb.page.faults

                   

               

           

       

       

            Wired Tiger Memory Usage

            900

            200

            0.0000

            100.0000

            1

            1

            0

            1

            0

            0.0000

            0.0000

            0

            0

            0

            0

           

               

                    0

                    0

                    1A7C11

                    0

                    2

                    0

                   

                        Template MongoDB

                        mongodb.total-cache

                   

               

               

                    1

                    0

                    F63100

                    0

                    2

                    0

                   

                        Template MongoDB

                        mongodb.used-cache

                   

               

               

                    2

                    0

                    2774A4

                    0

                    2

                    0

                   

                        Template MongoDB

                        mongodb.dirty-cache

                   

               

               

                    3

                    0

                    A54F10

                    1

                    2

                    0

                   

                        Template MongoDB

                        mongodb.used-cache-p

                   

               

           

       

   

   

       

            MongoDB ismaster status

           

               

                    0

                    False

               

               

                    1

                    True

               

           

       

       

            MongoDB ok status

           

               

                    0

                    False

               

               

                    1

                    True

               

           

       

   


zabbix_config:

# mongodb stats

UserParameter=mongodb.zabbix.sender, /usr/local/zabbix/scripts/mongodb-stats.sh


注释:

python脚本中引用的Module  pymongo  3.6版本,注意不同版本可能引发的方法变更