进程监控工具supervisor 启动Mongodb

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

进程监控工具supervisor 启动Mongodb

一什么是supervisor

Superviosr是一个UNIX-like系统上的进程监控工具。 Supervisor是一个Python开发的client/server系统,可以管理和监控*nix上面的进程。不过同daemontools一样,它也不能监控daemon进程

官网:http://supervisord.org/

二为啥用supervisor

部署简单 : 为啥简单呢?因为咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/reload功能的脚本,然后丢到/etc/init.d/下面。这么做有很多不好的地方,第一我们要编写这个脚本,这就很耗时耗力了。第二,当这个进程挂掉的时候,linux不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本。而,supervisor则可以完美的解决这些问题。好,怎么解决的呢,其实supervisor管理进程,就是通过fork/exec的方式把这些被管理的进程,当作supervisor的子进程来启动。这样的话,我们只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去就OK了。这样就省下了我们如同linux管理进程的时候,自己写控制脚本的麻烦了。第二,被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启了,当然重启还是不重启,也要看你的配置文件里面有木有设置autostart=true了,这是后话。

集中管理: supervisor管理的进程,进程组信息,全部都写在一个ini格式的文件里就OK了。而且,我们管理supervisor的时候的可以在本地进行管理,也可以远程管理,而且supervisor提供了一个web界面,我们可以在web界面上监控,管理进程。 当然了,本地,远程和web管理的时候,需要调用supervisor的xml_rpc接口,这个也是后话。

supervisor管理的进程,进程组信息,全部都写在一个ini格式的文件里就OK了。而且,我们管理supervisor的时候的可以在本地进行管理,也可以远程管理,而且supervisor提供了一个web界面,我们可以在web界面上监控,管理进程。 当然了,本地,远程和web管理的时候,需要调用supervisor的xml_rpc接口,这个也是后话。

精确

为啥说精确呢?因为linux对进程状态的反馈,有时候不太准确。为啥不准确?这个楼主也不知道啊,官方文档是这么说的,知道的告诉楼主一下吧,感激不尽。而supervisor监控子进程,得到的子进程状态无疑是准确的。

进程组

supervisor可以对进程组统一管理,也就是说咱们可以把需要管理的进程写到一个组里面,然后我们把这个组作为一个对象进行管理,如启动,停止,重启等等操作。而linux系统则是没有这种功能的,我们想要停止一个进程,只能一个一个的去停止,要么就自己写个脚本去批量停止。

权限

大伙都知道linux的进程,特别是侦听在1024端口之下的进程,一般用户大多数情况下,是不能对其进行控制的。想要控制的话,必须要有root权限。而supervisor提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程了。

不过这功能,用不用就看大伙自己的环境了

三 supervisor结构

Supervisord :主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时内置web server和XML-RPC Interface,轻松实现进程管理。

Supervisorctl: 管理client,用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。

Web server: superviosr提供了web server功能,可通过web控制进程。

XML-RPC interface: XML-RPC接口,提供XML-RPC服务来对子进程进行管理,监控

四安装部署

为了统一python版本和各种依赖库,推荐使用pyrun代替系统的python进行部署,同时需要在pyrun安装pip,将安装包下载至pkg目录,执行如下命令:

/data/pyrun/bin/pip install --no-index -f pkg meld3==1.0.0

/data/pyrun/bin/pip install --no-index -f pkg elementtree==1.2.6-20050316

/data/pyrun/bin/pip install --no-index -f pkg supervisor==3.2.0

如果机器无法联网,可以源码安装:

1) 依赖 python,可将python版本升级

2) 需要第三方包 meld3、setuptools、ElementTree

setuptools (latest) from http://pypi.python.org/pypi/setuptools.

meld3 (latest) from http://www.plope.com/software/meld3/.

elementtree (latest) from http://effbot.org/downloads#elementtree.

3) root解压相关包,批量安装。

五配置

Supervisor 的配置文件命名为 supervisord.conf,它为 supervisord(Supervisor 的主服务命令) 和 supervisorctl(Supervisor 的监控管理命令) 提供配置选项设置。 Supervisor 并不规定配置文件 supervisord.conf 的存放位置,Supervisor 服务启动的时候默认会在:

$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf

这几个目录位置查找配置文件 supervisord.conf。

Supervisor 也提供参数 "-c" 来指定配置文件的目录路径。
在终端输入 "echo_supervisord_conf" 命令可查看 Supervisor 的默认配置的内容。

生成一份默认的配置文件:

echo_supervisord_conf > /etc/supervisord.conf

supervisor配置比较简单,以下几个配置项满足基本的需求,更多配置项请参考官方配置说明

[supervisord]
nodeamon = false #以deamon方式启动进程

[supervisorctl] #使用系统默认配置项

[inet_http_server] #web管理页面的端口和用户密码
port = 8080

username = user

password = pwd

[rpcinterface:supervisor] #xml-rpc接口相关配置
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:mongodb]

command=/data1/mongodb_2.4.7_build/mongod -config /data1/mongodbrs/config/mongodb.conf --directoryperdb --quiet --profile 1 --slowms 1000 --noprealloc --shardsvr

directory=/data1/mongodb_2.4.7_build

autostart=false

user=root

注意默认配置文件的最后几行

你可以在supervisord.conf文件相同目录下supervisord.d目录内添加.ini文件分开配置

[include]

files = supervisord.d/*.ini

注意:被监控的进程要以非daemon方式运行,以mongodb为例,需要去掉mongodb进程启动命令里的--fork 参数

六使用

#   启动supervisor

   python /usr/bin/supervisord

#  启动监控的进程

    supervisorctl start all

#  关闭监控的进程

      supervisorctl stop all

#  查看状态

      supervisorctl status

# 重新加载配置文件:

supervisorctl reload

其实,可以通过supervisorctl打开supervisor的命令行控制台,然后输入help可以查看看用的命令,然后help+命令可以查看每个命令的具体功能

七 web控制

在 supervisord.conf中配置[inet_http_server],

[inet_http_server]

port = 0.0.0.0:8080 #IP和绑定端口

username = admin #管理员名称

password = 123456 #管理员密码

这样,在浏览器中输入配置中写的地址和端口号,输入配置好的用户名和密码,便可以看到基于网页的控制台界面。从中,可以察看supervisor监控的>信息,可以察看进程的日志等。

浏览器访问:http://10.14.4.84:8080/,(这里的IP为部署supervisor的IP)


510-20151225140329812-1547590097.png

八、监控告警

如果需求只是自动拉起crash的进程,通过命令行对进程进行管理,以上内容足矣。supervisor 3.0版本引入了事件,利用这个特性我们实现实时监控进程状态并告警。

首先了解一下supervisor提供的事件,supervisor通过子进程对应用程序进行管理,监控程序同样作为一个子进程运行,子进程的stdin、stdout、stderr都已经被重定向。事件处理过程如下:

作为监听程序的子进程向stdout写入READYn
事件发生时,supervisor会选择一个处于Ready状态的子进程的stdin写入事件内容
该子进程事件处理完毕后向stdout写入OKn或FAILn,反馈处理结果
重复上述操作
supervisor提供的多种事件类型,包括:进程状态事件、supervisor状态事件、定时事件、xmlrpc调用事件、进程日志事件等等。我们主要关注进程状态相关事件。supervisor对进程定义了如下状态,每个状态的切换都会触发相应的事件。


510-20151225140330952-2137362041.png

监控程序可以使用任何语言编写,只要按照supervisor的协议格式正确的处理事件消息即可。推荐使用python作为监控程序,supervisor提供了一个childutils模块使编写处理程序更简单。

九、延伸阅读

 github上2个基于supervisor二次开发的集中进程管理工具,可在一个页面下管理多台机器的进程。

https://github.com/mlazarov/supervisord-monitor

https://github.com/TAKEALOT/nodervisor

本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
Prometheus 监控 Cloud Native
使用supervisor守护Prometheus进程
使用supervisor守护Prometheus进程
|
2月前
|
消息中间件 网络协议 Python
工具人逆袭!掌握Python IPC,让你的进程从此告别单打独斗
【9月更文挑战第9天】你是否曾遇到多个Python程序像孤岛般无法通信,导致数据孤立、任务难协同的问题?掌握进程间通信(IPC)技术,可助你打破这一僵局。IPC是不同进程间传递数据或信号的机制,在Python中常用的方法有管道、消息队列、共享内存及套接字等。其中,管道适用于父子或兄弟进程间简单数据传递;套接字则不仅限于本地,还能在网络间实现复杂的数据交换。通过学习IPC,你将能设计更健壮灵活的系统架构,成为真正的编程高手。
26 3
|
3月前
使用supervisor守护freeswitch进程
使用supervisor守护freeswitch进程
|
3月前
|
消息中间件 网络协议 Python
工具人逆袭!掌握Python IPC,让你的进程从此告别单打独斗
【8月更文挑战第3天】你是否苦恼于Python程序间的“信息孤岛”现象?进程间通信(IPC)技术能助你打破壁垒。IPC是使不同进程共享数据或信号的方法。因全局解释器锁(GIL),多进程配合IPC成为高效处理数据的选择。Python提供管道、消息队列、共享内存等多种IPC手段。例如,管道适合简单父子或兄弟进程通信;套接字不仅限于网络通信,还能实现本地进程间复杂数据交换。掌握IPC,让你的进程协同作战,构建更强大灵活的系统。
23 0
|
5月前
|
NoSQL Linux MongoDB
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
117 6
|
5月前
|
NoSQL 数据可视化 关系型数据库
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
52 3
|
5月前
|
NoSQL 数据可视化 前端开发
MongoDB可视化工具Robo 3T的下载、安装与使用介绍
【6月更文挑战第3天】该文介绍了如何下载和安装MongoDB的图形化工具Robo 3T。首先,建议在开始之前安装MongoDB。然后,访问Robo 3T官网下载安装包,接受条款并选择适合的操作系统版本(此处以Windows 64位为例)。下载后,运行安装程序,依次点击"Next",选择安装路径,等待安装完成。安装后,启动Robo 3T,同意用户协议,免费激活并登录或注册账号。最后,按照提示完成配置步骤。
399 1
|
4月前
|
Ubuntu Unix Linux
如何使用 Supervisor 管理你的进程
**Supervisor** 是一款Python编写的进程管理工具,用于类Unix系统,确保应用服务持续运行。常用命令包括:`reload`(重新加载配置)、`status`(查看进程状态)、`shutdown`(关闭所有进程)、`start`和`stop`(控制单个进程)。在CentOS上安装Supervisor用`yum install -y supervisor`,配置文件通常在`/etc/supervisord.conf`。
68 0
|
4月前
|
NoSQL MongoDB 数据库
MongoDB的GUI工具——Robo 3T连接远程数据库MongoDB
MongoDB的GUI工具——Robo 3T连接远程数据库MongoDB
362 0