MongoDB之监控
1. PMM监控MongoDB
1. PMM架构图

2. Server组件
Query Analytics 用来搜集指令并作性能分析的
QAN API 作为percona-qan-agent后端存储和读取Query资料用
QAN App 提供图形化分析界面
Metrics Monitor
Prometheus 监控软件
Consul 提供一个PMM客户端可以远程列出,添加或删除prometheus主机的API
Grafana 展示工具
Percona Dashboards 用于Grafana的仪表板
3. Client组件
pmm-admin 用于管理PMM Client的命令行工具
pmm-mysql-queries-0 管理QAN代理的服务,从mysql收集查询性能数据并将其发送到PMM服务器上的QAN API
pmm-mongodb-queries-0 管理QAN代理的服务,从mongodb收集查询性能数据并将其发送到PMM服务器上的QAN API
node_exporter 用于收集系统信息
mysqld_exporter 收集mysql信息
mongodb_exporter 收集mongodb信息
proxysql_exporter 收集proxysql信息
4. 创建PMM数据容器
docker pull percona/pmm-server:1.17.4 拉取镜像
docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server:latest /bin/true
docker run -d -p 80:80 --volumes-from pmm-data --name pmm-server -e SERVER_USER=admin -e SERVER_PASSWORD=admin --restart always percona/pmm-server:latest
http://192.168.1.203 账号密码: admin
5. 安装客户端
在所要监控的mongodb服务器上,安装客户端
yum install -y https://downloads.percona.com/downloads/percona-release/percona-release-0.1-6/redhat/percona-release-0.1-6.noarch.rpm
yum install pmm-client -y
pmm-admin config --server 192.168.1.203 --server-user admin --server-password admin 连接
6. 添加mongodb实例
pmm-admin add mongodb --cluster mongodb-zhengshi --uri mongodb://192.168.1.125:16535
pmm-admin add mongodb --cluster mongodb-zhengshi --uri mongodb://192.168.1.16:16535
pmm-admin add mongodb --cluster mongodb-zhengshi --uri mongodb://192.168.1.12:16535
2. 使用命令在shell监控
1. 服务器级别
1. 登录到服务器中,输入指令 db.serverStatus();
会输出很多内容。
2. 常用的函数
db.serverStatus().host; 主机名
db.serverStatus().locks; 锁信息
db.serverStatus().globalLock; 全局锁信息
db.serverStatus().mem 内存信息
{
"bits" : 64,
"resident" : 4254, //物理内存消耗,单位M
"virtual" : 5791, //虚拟内存消耗,单位M
"supported" : true,
"mapped" : 0,
"mappedWithJournal" : 0
}
db.serverStatus().connections 连接数信息
{
"current" : 55, //当前连接数
"available" : 52373, //可用连接数
"totalCreated" : 75760, //截止目前为止总共创建的连接数75760
"active" : 2
}
db.serverStatus().extra_info 额外信息
db.serverStatus().indexCounters 索引统计信息
db.serverStatus().backgroundFlushing 后台刷新信息
db.serverStatus().cursors 游标信息
db.serverStatus().network 网络信息
db.serverStatus().repl 副本集信息
db.serverStatus().opcountersRepl 副本集的操作计数器
{
"insert" : 32619505,
"query" : 0,
"update" : 28,
"delete" : 25070432,
"getmore" : 0,
"command" : 13
}
db.serverStatus().opcounters
db.serverStatus().asserts
db.serverStatus().writeBacksQueued
2. 数据库级别
db.stats();
3. collection级别
db.student.stats();
3. 使用mongostat实时监控
[root@mongodb-125 bin]# ./mongostat -h 192.168.1.12:16535
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn set repl time
*0 4 *0 *0 1 10|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.73k 113k 64 zhenpin-zhengshi PRI Aug 8 14:32:28.053
*0 3 *0 *0 0 7|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.60k 111k 64 zhenpin-zhengshi PRI Aug 8 14:32:29.055
*0 4 *0 *0 1 10|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.73k 113k 64 zhenpin-zhengshi PRI Aug 8 14:32:30.054
*0 3 *0 *0 1 9|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 2.80k 113k 64 zhenpin-zhengshi PRI Aug 8 14:32:31.054
*0 3 *0 *0 0 11|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.84k 114k 64 zhenpin-zhengshi PRI Aug 8 14:32:32.055
*0 4 *0 *0 1 12|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.83k 114k 64 zhenpin-zhengshi PRI Aug 8 14:32:33.054
*0 4 *0 *0 1 9|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.67k 112k 64 zhenpin-zhengshi PRI Aug 8 14:32:34.053
*0 3 *0 *0 0 8|0 0.0% 79.8% 0 3.43G 1.92G 0|0 1|0 1.66k 112k 64 zhenpin-zhengshi PRI Aug 8 14:32:35.055
*0 5 *0 *0 3 14|0 0.6% 79.8% 0 3.43G 1.92G 0|0 1|0 6.39k 115k 64 zhenpin-zhengshi PRI Aug 8 14:32:36.053
*0 2 *0 *0 0 8|0 0.6% 79.8% 0 3.43G 1.92G 0|0 1|0 1.50k 112k 64 zhenpin-zhengshi PRI Aug 8 14:32:37.054
- inserts/s 每秒插入次数
- query/s 每秒查询次数
- update/s 每秒更新次数
- delete/s 每秒删除次数
- getmore/s 每秒执行getmore次数
- command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
- dirty 脏数据字节的缓存百分比
- used 正在使用中的缓存百分比
- flushs/s 每秒执行fsync将数据写入硬盘的次数。
- vsize 虚拟内存使用量,单位MB
- res 物理内存使用量,单位MB
- vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序狂吃内存
- qr 客户端等待从MongoDB实例读数据的队列长度
- qw 客户端等待从MongoDB实例写入数据的队列长度
- ar 执行读操作的活跃客户端数量
- aw 执行写操作的活跃客户端数量
- 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
- netIn MongoDB实例的网络进流量
- netOut MongoDB实例的网络出流量
-
conn: 打开连接的总数,是qr,qw,ar,aw的总和
注:MongoDB为每一个连接创建一个线程,线程的创建与释放也会有开销,所以尽量要适当配置连接数的启动参数,maxIncomingConnections,阿里工程师建议在5000以下,基本满足多数场景 - time 时间戳
4. 使用命令mongotop监控
mongotop --host 192.168.2.232:16535 默认每一秒刷新一次
ns total read write 2022-08-31T09:56:42+08:00
local.oplog.rs 4ms 4ms 0ms
admin.$cmd.aggregate 0ms 0ms 0ms
admin.system.keys 0ms 0ms 0ms
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
config.system.sessions 0ms 0ms 0ms
config.transactions 0ms 0ms 0ms
local.replset.election 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.replset.oplogTruncateAfterPoint 0ms 0ms 0ms
mongotop --host 192.168.2.232:16535 5 每5秒刷新一次
5. 使用HTTPconsole监控
需要在配置文件中添加:httpinterface=true,这样才允许使用28017端口
一般为了安全考虑,不会开启http接口

浙公网安备 33010602011771号