gpt4 book ai didi

使用zabbix监控mongodb的方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章使用zabbix监控mongodb的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.

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
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
#!/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
#!/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模板 。

定义自动发现规则 。

使用zabbix监控mongodb的方法

定义监控项 。

使用zabbix监控mongodb的方法

最后添加触发器和图就完成了 。

注意:在mongodb.conf配置文件里定义了键值对应关系后要重启zabbix服务才能生效 。

最后此篇关于使用zabbix监控mongodb的方法的文章就讲到这里了,如果你想了解更多关于使用zabbix监控mongodb的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com