专栏首页MongoDB中文社区MongoDB接入PMM监控之初探

MongoDB接入PMM监控之初探

很早就听说过PMM,Percona开发的一套对MongoDB, MySQL, Postgres建立监控系统的套件。曾经也抽空想试用下,但由于使用上的各种毛病,以及文档欠缺,没成过。最近在Mongo中文社区里听群友谈到已经有PMM2了,迫不及待地搭建一把,看看什么样子,毕竟网络上详细谈PMM搭建的貌似不多,此文抛砖引玉。

PMM

PMM是什么呢?简单说这是Percona开发的用来监控mysql, postgres,mongodb的一揽子方案,即它把该用的组件全部包在一起了,只向外暴露一个pmm-client, 一个pmm-server;里面囊括了cloud-native氛围下大为流行的prometheus, grafana监控工具。

其pmm-client 主要包括各种 exporters(exporter是prometheus中的概念,是一种将服务metrics抓取的第三方工具,供prometheus来scrape),如node_exporter抓取主机metrics信息, mongodb_exporter抓取mongod, mongos metrics信息。

pmm-server内将prometheus,grafana, consul等工具一起打包,以整体方式提供服务;其中prometheus是时序数据库,grafana是监控面板系统,其可配置prometheus为它的一个数据源, consul作为服务发现组件,便于屏蔽后端的节点变更。

且它们都是开源的,见

https://github.com/percona

安装

客户端pmm-client

很多文档说用yum安装,但我没成过,估计是添加yum源的问题。干脆直接rpm安装,下载地址:

https://repo.percona.com/yum/release/7/RPMS/x86_64/pmm2-client-2.5.0-6.el7.x86_64.rpm

(不一定得是2.5,有更高版本也可用)

服务端pmm-server 2

v2版本,而不是v1,貌似很不兼容,曾经搭v1没搭成

此次为方便起见,采用了多数文章建议的方式,docker 容器运行,步骤:

- 创建容器及其volume

dockercreate -v /srv --name pmm-data percona/pmm-server:2 /bin/true

- 启动pmm-server 2

dockerrun -d -p 8080:80 -p 443:443 --volumes-from pmm-data --name pmm-server--restart always percona/pmm-server:2

如果主机不允许docker运行,恐怕得需自行编译了。官方文档似乎并未说清楚该如何自行编译打包安装,有朋友探索过不妨分享下。

注册节点

这里注册节点的意思就是指把各个mongos, mongod节点加入到监控中。这是通过pmm-client来做的。

首先,pmm-client要感知到pmm-server:

# pmm-admin config --server-insecure-tls--server-url=https://admin:admin@<ip>

- admin,admin是默认的用户、密码,<ip> 是pmm-server 的ip地址

- 如果下次想重置,可以用 --force

此命令的输出其实是每台 pmm-client机器上启动了 pmm-agent进程,用以采集各service的数据

然后,加入mongod 节点,

# pmm-admin add mongodb --cluster"cluster1" --replication-set "cluster1_0" --username xxx--password xxx <ip>:<port> <ip>:<port>

命令格式我们可以随时用pmm-admin addmongodb -h 来查看。有些选项含义是显而易见的,可以知道第一个ip:port指 service name, 第二个是service address。我习惯让service name取值为service address,好处是在grafana的 Service Name下拉框里会显示 ip:port,这样我们更易区分同一机器上的不同节点(默认时取为主机名,非常不适合标识同一机器上的不同节点!)。如下图所示:

另外,我并未按照官方文档

https://www.percona.com/doc/percona-monitoring-and-management/conf-mongodb.html

中说的先创建 mongodb_exporter,分配clusterMonitor权限来做,直接用一个有足够权限的用户也可以;当然单独分配一个用户应该更安全;

如果是添加mongos节点,和mongod差不多,不过需移除 --replica-set 选项

将mongod, mongos加入后,我们可通过 pmm-admin list发现,服务节点已经注册了:

如果进入到pmm-server容器中去看, 会发现,在 /etc/prometheus.yml中已经加入了多个targets,

然后去<host>/prometheus/targets,我们会发现,所有的targets都UP状态,如果有不是UP状态的,看看是否是网络故障或配置问题:

效果图

下面以我的本地一主二从的副本集集群 1p2s 举例,YCSB以insert ops=100 load

集群指标

框住部分表明是在做 insert ops=100

副本集指标

实例指标

WiredTiger指标

主机指标

可见指标是多么地集中、丰富!对于分析定位问题,抓住因果关系,是非常有利的。

结语

相信看到这里,大家能明白,PMM其实是一套可以快速建立mongo监控系统的工具,非常适合于迭代开发、测试过程。当然由于其各个组件被bundle在一起,可能存在以下的缺陷:

1. 无法灵活扩展,节点多了后,一个pmm server能撑住吗?

2. 如果是云服务,可能需要重新考虑架构,负载均衡,自动化配置等

3. 不容易定制。pmm-client, pmm-server是不是暴露了足够多的功能供调用呢?特别是如果我们想定制grafana 的template 变量,label不满足需求怎么办?

4. 面板中的metrics计算是否都准确?很多指标需要熟悉

当然我们也可以选择单独部署各个组件,毕竟PMM证明了可行性。比如我们考虑把无状态的服务如exporter, grafana 放到k8s集群里,其管理由k8s负责;甚至prometheus带有 data目录的组件也可放进去,毕竟是时序数据库,可以允许一定时间的rotation。这样好处就是灵活,管理也不复杂,交给k8s,但配置会略微麻烦,得很懂 prometheus.yml的语法。最终可怎么用,看我们的需求了。

作者:陈仕

一名热衷和专职于数据库、分布式、存储技术的技术人,对linux内核、微处理器架构也颇有兴趣。工作初接触redis/couchbase/scylladb等NoSQL数据库,现在腾讯做mongo云数据库开发。业余时间喜欢爬山,研究论文,学习人文。

References

[1]https://www.percona.com/blog/2019/07/23/pmm-for-mongodb-start-guide/

[2]https://www.percona.com/blog/2019/09/19/installing-percona-monitoring-and-management-pmm-2-for-the-first-time/

[3]https://www.jianshu.com/p/ed2bf649a43f

[4]https://www.jianshu.com/p/dffe5b2d29c2

[5]https://jira.percona.com/browse/PMM-3980

[6]https://www.percona.com/doc/percona-monitoring-and-management/2.x/manage/client-config.html

[7]https://forums.percona.com/discussion/47945

[8]https://www.percona.com/doc/percona-monitoring-and-management/2.x/conf-mongodb.html

[9]https://www.percona.com/doc/percona-monitoring-and-management/pmm-admin.html

[10]https://www.percona.com/blog/2018/01/17/troubleshooting-percona-monitoring-and-management-pmm-metrics/

[11]https://www.percona.com/blog/2018/07/05/configuring-pmm-monitoring-mongodb-cluster/

本文分享自微信公众号 - Mongoing中文社区(mongoing-mongoing),作者:陈仕

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MongoDB事务模型分析

    在了解写操作的事务性之前,需要先了解mongo层的每一个table,是如何与wiredtiger层的table(btree)对应的。mongo层一个最简单的ta...

    MongoDB中文社区
  • 基准测试:要做就做到最好

    在不知道如何运行某个数据库的情况下,请不要在该数据库上运行基准测试。本篇案例很好的解释了原因。

    MongoDB中文社区
  • Studio 3T中的新功能:支持SQL SELECT DISTINCT,WHERE子句中的JSON对象及更多

    并将DISTINCT与JOIN,SELECT,GROUP BY,HAVING和ORDER BY语句相结合。

    MongoDB中文社区
  • 更加安全的密钥生成方法Diffie-Hellman

    之前我们谈到了密钥配送的问题,这个世界是如此的危险, 一不小心通信线路就会被监听,那么我们怎么在这种不安全的线路中传递密钥呢?

    程序那些事
  • (翻译)LearnVSXNow! #10 创建我们第一个工具集-重用代码

    我们在第6和第7篇创建的Calculate小工具窗还有很多可以改进的地方,所以在这篇文章里,我们不会开发新的功能,而是重构我们的代码,封装出可以重用的...

    明年我18
  • 是时候让大家看看你用django写出来

    博客的基础功能已经开发的差不多了,虽然还有很多地方可以完善,但我们还是希望早点把博客部署到服务器上,让他人可以通过外网访问。至于有待完善的地方,可以等部署完后一...

    py3study
  • WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html

    跟着阿笨一起玩NET
  • 很火的抖音视频,微信朋友圈动态封面背景的做法

    就是这样的效果嘛,抖音爆出后很多人都觉得挺酷的,那柚子就分享这个方法给大家。(时间关系没有做那么多效果图谅解)

    IT小侠公社
  • 「R」使用forestplot绘制森林图

    森林图常见于元分析,但其使用绝不仅如此,比如我现在想要研究的对象有诸多HR结果,我想要汇总为一张图,森林图就是个非常好的选择。ggpubr包提供的森林图是针对变...

    王诗翔呀
  • 朋友圈遇到乱码后怎么办

    最近,在朋友圈里,经常会看到这样的乱码,举个例子: මම ඔබට කියන්න අවශ්ය, මම ඔයාට ආදරෙයි ไม่ว่าจะเกิดอะไรขึ...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券