设为首页 收藏本站
查看: 1174|回复: 0

[经验分享] zabbix如何监控mongodb

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-2-18 08:35:22 | 显示全部楼层 |阅读模式
   Mongodb如今越来越火,要做好对mongodb的监控就需要从它的安装配置,到简单的command语句使用,再到对它运行机制以及状态获取方法的掌握。
    mongodb有三种基本的状态获取方式:

    1.mongostat

    2.开启28017的监听端口,curl http://127.0.0.1:28017/_status
    3.进入mongo执行db.serverStatus命令


    我用的是第三种方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
echo "db.serverStatus()" |/usr/local/mongodb/bin/mongo 192.168.1.123:27017/foo --quiet

{
        "host" : "TENCENT64.site", --server的hostname
        "version" : "2.0.5", --mongo版本
        "process" : "mongod", --进程名
        "uptime" : 1238418, --启动时间(单位:S)
        "uptimeEstimate" : 1230730, --基于MongoDB内部粗粒度定时器的运行时间
        "localTime" : ISODate("2012-09-14T09:09:52.657Z"), --server的本地时间
        "globalLock" : {
                "totalTime" : 1238418105923, --全局锁创建的时间(单位:ms 微秒)
                "lockTime" : 75055831911, --全局锁保持的时间(单位:ms 微秒)
                "ratio" : 0.06060621332329477, --lockTime和totalTime的比
                "currentQueue" : {
                        "total" : 0, --等待全局锁的队列中操作数目
                        "readers" : 0, --等待读锁的队列中操作数目
                        "writers" : 0 --等待写锁的队列中操作数目
                },
                "activeClients" : {
                        "total" : 1, --连接到server的当前活动client数目
                        "readers" : 1, --执行读操作的当前活动client数目
                        "writers" : 0 --执行写操作的当前活动client数目
                }
        },
        "mem" : {
                "bits" : 64, --64位机器
                "resident" : 18363, --占用物理内存量。
                "virtual" : 478810, --占用的虚拟内存量
                "supported" : true, --是否支持扩展内存
                "mapped" : 233311, --映射到内存的数据文件大小,很接近于你的所有数据库大小。
                "mappedWithJournal" : 466622,
                "note" : "virtual minus mapped is large. could indicate a memory leak"
        },
        "connections" : {
                "current" : 737, --当前活动连接量。连接到server的当前活跃连接数目
                "available" : 82 --剩余空闲连接量。剩余的可用连接数目
        },
        "extra_info" : {
                "note" : "fields vary by platform",
                "heap_usage_bytes" : 3838448, --此过程中所有的堆字节数目。仅适用于Linux
                "page_faults" : 31058356 --此过程中访问内存中页面失败的总次数。仅适用于Linux
        },
        "indexCounters" : {
                "btree" : {
                        "accesses" : 68229146, --Btree索引的访问次数(索引被访问量)
                        "hits" : 68229146, --内存中的Btree页的数目。(索引命中量)
                        "misses" : 0, --内存中不存在的Btree也数目。(索引偏差量)(索引内存访问失败次数)
                        "resets" : 0, --索引计数器被重置为0的次数
                        "missRatio" : 0 --索引偏差率(未命中率)
                }
        },
        "backgroundFlushing" : {
                "flushes" : 20640, --数据库刷新写到磁盘的次数
                "total_ms" : 2453287, --数据库刷新数据到磁盘花费的微秒数
                "average_ms" : 118.8608042635659, --执行单次刷新花费的平均微秒数
                "last_ms" : 1, --最后一次执行完成刷新数据到磁盘花费的微秒数
                "last_finished" : ISODate("2012-09-14T09:09:35.656Z") --当最后一次刷新数据完成时的时间戳
        },
        "cursors" : {
                "totalOpen" : 0, --server为client保持的游标(cursor)总数
                "clientCursors_size" : 0, --
                "timedOut" : 24 --server启动以来游标(cursor)超时的总数
        },
        "network" : {
                "bytesIn" : NumberLong("1929833164782"), --发送到数据库的数据总量(bytes)
                "bytesOut" : 553137147925, --数据库发出的数据总量(bytes)
                "numRequests" : 2475184328 --发送到数据库的请求量
        },
        "opcounters" : {
                "insert" : 687531883, --server启动以来总的insert数据量
                "query" : 711010343, --server启动以来总的query数据量
                "update" : 0, --server启动以来总的update数据量
                "delete" : 0, --server启动以来总的delete数据量
                "getmore" : 6484, --server启动以来调用任何游标的getMore总次数
                "command" : 1287537 --server启动以来执行其他命令的总次数
        },
        "asserts" : {
                "regular" : 0, --server启动以来抛出正规断言(assert 类似于异常处理的形式)总数目
                "warning" : 1, --server启动以来抛出的告警总数目
                "msg" : 0, --消息断言数目。服务器内部定义的良好字符串错误
                "user" : 4, --用户断言数目。用户产生的错误,譬如:磁盘空间满;重复键。
                "rollovers" : 0 --server启动以来,assert counters have rolled over的次数
        },
        "writeBacksQueued" : false, --是否有从mongos执行的retry操作
        "dur" : {
                "commits" : 30, --上一间隔journal日志发生commit的次数
                "journaledMB" : 0, --上一间隔写到journal日志的数据量(单位:MB)
                "writeToDataFilesMB" : 0, --上一间隔journal日志写到数据文件的数据量(单位:MB)
                "compression" : 0, --
                "commitsInWriteLock" : 0, --写锁期间发生commits的次数
                "earlyCommits" : 0, --schedule时间前请求commit的次数
                "timeMs" : {
                        "dt" : 3064,
                        "prepLogBuffer" : 0, --准备写journal日志花费的时间
                        "writeToJournal" : 0, --写journal日志花费的实际时间
                        "writeToDataFiles" : 0, --journal日志后写数据文件花费的时间
                        "remapPrivateView" : 0 --The amount of time spent remapping copy-on-write memory mapped views
                }
        },
        "ok" : 1 --serverStatus是否返回正确
}



    以上,我们把所需要的参数抽取出来就可以做成监控项了。

先定义键值:

1
2
3
#mongodb.conf
UserParameter=mongodb_port_discovery,/usr/local/zabbix/exec/mongo_discovery.py
UserParameter=mongodb_stats
  • ,/usr/local/zabbix/exec/mongo_status.sh $1 $2 $3 $4 $5




  • 写mongo_discovery.py脚本(用于端口发现)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import json
    import subprocess

    json_data = {"data":[]}
    net_cmd = '''sudo netstat -nlpt|awk '/mongo/{print $4}'
    '''
    p = subprocess.Popen(net_cmd, shell=True, stdout=subprocess.PIPE)
    net_result = p.stdout.readlines()

    for server in net_result:
        dic_content = {
          "{#MONGO_PORT}" : server.split(':')[1].strip(),
          "{#MONGO_IPADDR}" : server.split(':')[0].strip()
          }
        json_data['data'].append(dic_content)
    result = json.dumps(json_data,sort_keys=True,indent=4)
    print result




    写mongo_status.sh状态检测脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/bash
    ##mongo_status.sh##
    ##wuhf##
    case $# in
      3)
        output=$(/bin/echo "db.serverStatus().$3" |/usr/local/mongodb/bin/mongo $1:$2/foo --quiet)
        ;;
      4)
        output=$(/bin/echo "db.serverStatus().$3.$4" |/usr/local/mongodb/bin/mongo $1:$2/foo --quiet)
        ;;
      5)
        output=$(/bin/echo "db.serverStatus().$3.$4.$5" |/usr/local/mongodb/bin/mongo $1:$2/foo --quiet)
        ;;
    esac

    if [[ "$output" =~ "NumberLong"   ]];then
      echo $output|sed -n 's/NumberLong(//p'|sed -n 's/)//p'
    else
      echo $output
    fi




    权限设置
    1
    2
    3
    4
    5
    chmod 755 /usr/local/zabbix/exec/*
    chown zabbix.zabbix /usr/local/zabbix/exec/*
    chown zabbix.zabbix /usr/local/zabbix/etc/zabbix_agentd.conf.d/*
    echo "zabbix ALL=(root) NOPASSWD:ALL" >> /etc/sudoers
    sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/'  /etc/sudoers





    做MongoDB模板
    定义自动发现规则
    QQ截图20160218083517.jpg
    定义监控项

    wKioL1bEVEOwDpbxAACk8k2f3q4965.jpg
    最后添加触发器和图就完成了
    注意:在mongodb.conf配置文件里定义了键值对应关系后要重启zabbix服务才能生效


    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-179357-1-1.html 上篇帖子: Zabbix trapper processes more than 75% busy 下篇帖子: zabbix-agent脚本安装 监控 如何
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表