说说痛点, elasticsearch,kafka,zookeeper,kibana,elasticsearch-head,logstash,logstash 是需要经常重启的, 你上了点过滤规则或者修改点啥的, 每次都尼玛杀进程, 再 nohup , 还看不到日志, 这太不符合人性了, 人性的优点之一就是懒惰. 打开 web 界面, 点一下鼠标解决问题岂不是棒棒哒, 还能通过 web 界面看看后台日志, perfect! 子曰:"工欲善其事, 必先利其器." 开搞!
Supervisor 简介:
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
Supervisor 是个 c/s 架构的系统, 它允许用户在类 Unix 系统上管理和监控一定数量的程序运行;
你有没有很多源码安装的程序? 你怎么启动这些程序? nohup 是不是? 还是 screen? 还是 & 后台? 还是自练神功, 写一堆启动脚本呢? 即使是这样你的程序因为 bug 或者其它原因 down 了呢? 还是需要你手动去启动是不?
当你了解 supervisor 之后你就知道, 什么叫磨刀不误砍柴工了! supervisor 有哪几个 niubility 的功能呢?
1, 程序启动, 停止, 重启统一管理, 提供 web 和命令行方式;
2, 程序 down 掉自动拉起;
3, 可以指定启动用户, 安全方面杠杠滴;
4, 可以定义 group 重启, 和启动;
5,web 界面管理非常方便, 毕竟点点鼠标就搞定了的事情, 谁不愿意呢?
- #supervisor 是用 Python 写的程序, 所以可以通过 easy_install 来安装, 也可以用 pip 来安装, 这个看自己了;
- # 我习惯用 pip 装东西, 所以用 easy_install 安装 pip
- easy_install pip
- # 之后通过 pip 安装 supervisor
- pip install supervisor
- # 为 supervisor 创建工作目录与配置文件目录并且赋予该目录 755 的权限;
- mkdir -m 755 -p /etc/supervisor/conf.d
- # 通过 supervisor 提供的 echo_supervisord_conf 命令生成默认配置文件,
- echo_supervisord_conf> /etc/supervisor/supervisord.conf
- # 通过 cat 命令查看配置文件是否生成;
- cat /etc/supervisor/supervisord.conf |grep -v "^;" |grep -v "^$"
- [unix_http_server]
- file=/tmp/supervisor.sock ; the path to the socket file
- [inet_http_server] ; inet (TCP) server disabled by default #是否开启 web 管理界面
- port=ip:9001 ; ip_address:port specifier, :port for all iface #web 访问端口;
- username=user ; default is no username (open server) #web 界面访问用户名;
- password=password ; default is no password (open server) #web 界面访问密码;
- [supervisord]
- logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log #日志存放路径
- logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB #日志大小
- logfile_backups=10 ; # of main logfile backups; 0 means none, default 10 #日志滚动多少次
- loglevel=info ; log level; default info; others: debug,warn,trace #log 级别
- pidfile={$52
}supervisord.pid ; supervisord pidfile; default supervisord.pid #pid 文件
- nodaemon=false ; start in foreground if true; default false #是否在前台启动, 默认是 false, 即以 daemon 的方式启动
- minfds=1024 ; min. avail startup file descriptors; default 1024 #可以打开的文件描述符的最小值, 默认 1024
- minprocs=200 ; min. avail process descriptors;default 200 #可以打开的进程数的最小值, 默认 200
- [rpcinterface:supervisor]
- supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
- [supervisorctl]
- serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket #通过 UNIX socket 连接 supervisord, 路径与 unix_http_server 部分的 file 一致
- [include]
- files =/etc/supervisor/conf.d/.conf #引入额外的配置文件
- # 放到 conf 的配置文件
- [program:logstash-pack] #是被管理的进程配置参数, xx 是进程的名称, 通过 supervisorctl 管理程序的时候和 web 界面使用
- command = /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstashx.conf
- [program:kafka]
- command = /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
- [program:kibana]
- command = /usr/local/kibana/bin/kibana
- [program:elasticsearch]
- command = /usr/local/elasticsearch/bin/elasticsearch
- autostart = true # 被管理程序在 supervisord 启动的时候也自动启动
- autorestart = true #程序退出后自动重启, 可选值:[unexpected,true,false], 默认为 unexpected, 表示进程意外杀死后才重启
- startsecs = 5 #启动 5 秒后没有异常退出, 就表示进程正常启动了, 默认为 1 秒
- startretries = 3 #启动失败重试几次, 默认 3 次
- user = elk #启动用户这个是为了安全起见
- redirect_stderr = true #把 stderr 重定向到 stdout, 默认 false
- stdout_logfile=/data/logs/elk/logstash-shipper-std.log #stdout 日志文件大小, 默认 50MB 需要手动创建目录, 并且赋予 elk 的权限
- stderr_logfile=/data/logs/elk/logstash-shipper-err.log #stdout 日志文件备份数, 默认是 10 需要手动创建目录, 并且赋予 elk 的权限
- # 配置文件搞定了, 可以启动 supervisor 了
- supervisord -c /etc/supervisor/supervisord.conf
- #supervisor 的管理是通过 supervisorctl 管理, 可以通过命令带参数形式例如: suervervisorctl shutdown , 也可以通过进入交互模式进行管理, 例如 supervisorctl 回车, 之后执行命令即可;
- # 参考启动的程序
- supervisor status
第一行是自定义的名字; 第二个是运行状态, 第三是 pid , 第三行是启动时间
- # 关闭 supervisor
- supervisorctl shutdown
- # 重新载入 supervisor, 重新载入 supervisor, 在这里相当于重启 supervisor 服务, 里面的服务也会跟着重新启动
- supervisor reload
- # 添加 / 删除 要管理服务, 当你修改了配置文件, 可以直接通过 update 方式升级即可
- supervisor update
- # 通过命令方式启动所有服务或者单个服务
- supervisorctl start all
- supervisorctl start service_name
- # 关闭服务
- supervisorctl stop all
- supervisorctl stop service_name
- # 重启所有服务或者单个服务
- supervisorctl restart all
- supervistorctl restart service_name
看图说话 web 管理界面:
来源: http://blog.51cto.com/seekerwolf/2107118