supervisor管理efk+kafka高并发日志收集系统

参考文章:https://www.toutiao.com/i6722608406672179724/

提示:

本教程是延续上一节部署efk+kafka高并发日志收集系统,上一节自己编写的脚本来管理不这么方便,此处采用supervisor来管理较为方便,以单台系统演示


第一节pip的安装

[root@elk212 ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

[root@elk212 ~]# python2.7 get-pip.py

[root@elk212 ~]# which pip

/usr/bin/pip

第二节安装supervisor

[root@elk212 ~]# pip install supervisor

[root@elk212 ~]# mkdir /etc/supervisor/supervisord.d/ -p

[root@elk212 ~]# echo_supervisord_conf > /etc/supervisor/supervisord.conf

[root@elk212 ~]#vim  /etc/supervisor/supervisord.conf

[unix_http_server]

file=/var/run/supervisor.sock  ; the path to the socket file

[inet_http_server]        ; inet (TCP) server disabled by default

port=192.168.68.212:9001        ; ip_address:port specifier, *:port for all iface

[supervisord]

logfile=/var/log/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

pidfile=/var/run/supervisord.pid ; supervisord pidfile; default supervisord.pid

nodaemon=false              ; start in foreground if true; default false

minfds=1024                  ; min. avail startup file descriptors; default 1024

minprocs=200                ; min. avail process descriptors;default 200

user=root            ; setuid to this UNIX account at startup; recommended if root

[rpcinterface:supervisor]

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]

serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket

serverurl=http://192.168.68.212:9001 ; use an http:// url to specify an inet socket

[include]

files = /etc/supervisor/supervisord.d/*.conf

[root@elk212 ~]# supervisord -c /etc/supervisor/supervisord.conf

[root@elk212 ~]# ss -tunlp | grep :9001

tcp    LISTEN    0      128    192.168.68.212:9001                  *:*                  users:(("supervisord",pid=1235,fd=4))

第三节配置efk+kafka

配置elasticsearch

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/elasticsearch.conf

[program:es]

command=/usr/local/es/bin/elasticsearch

;directory=/opt/C9019/webapps # 在哪个目录下启动程序

autostart = false    ; 在 supervisord 启动的时候不启动,实际中建议true

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 3    ; 启动失败自动重试次数,默认是 3

user = log          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/es/logs/es.log

loglevel=info

[root@elk212 ~]# supervisorctl reload

Restarted supervisord

[root@elk212 ~]# supervisorctl status

es                              STOPPED  Not started

配置kibana

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/kibana.conf

[program:kibana]

command=/usr/local/kibana/bin/kibana

autostart = false    ; 在 supervisord 启动的时候不启动

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 3    ; 启动失败自动重试次数,默认是 3

user = log          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/kibana/kibana.log

loglevel=info

[root@elk212 ~]# supervisorctl reload

[root@elk212 ~]# supervisorctl status

es                                  STOPPED Not started

kibana                          STOPPED  Not started

配置logstash

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/logstash.conf

[program:logstash]

command=/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

autostart = false    ; 在 supervisord 启动的时候不启动

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 3    ; 启动失败自动重试次数,默认是 3

user = log          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/logstash/logstash.log

loglevel=info

[root@elk212 ~]# supervisorctl reload

[root@elk212 ~]# supervisorctl status

es                              STOPPED  Not started

kibana                          STOPPED  Not started

logstash                        STOPPED  Not started

配置kafka

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/kafka.conf

[program:kafka]

command=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties

autostart = false    ; 在 supervisord 启动的时候不自动启动

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 3    ; 启动失败自动重试次数,默认是 3

user = root          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/kafka/logs/kafka.log

loglevel=info

[root@elk212 ~]# supervisorctl reload

[root@elk212 ~]# supervisorctl status

es                              STOPPED  Not started

kafka                            STOPPED  Not started

kibana                          STOPPED  Not started

logstash                        STOPPED  Not started

配置zookeeper

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/zookeeper.conf

[program:zookeeper]

command=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties

autostart = false    ; 在 supervisord 启动的时候不动启动

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 0    ; 启动失败自动重试次数,默认是 3

user = root          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/kafka/logs/zookeeper.log

loglevel=info

[root@elk212 ~]# supervisorctl reload

[root@elk212 ~]# supervisorctl status

es                              STOPPED  Not started

kafka                            STOPPED  Not started

kibana                          STOPPED  Not started

logstash                        STOPPED  Not started

zookeeper                        STOPPED  Not started

第四节配置elasticsearch插件cerebro

[root@elk212 ~]#wget https://github.com/lmenezes/cerebro/releases/download/v0.8.4/cerebro-0.8.4.tgz

[root@elk212 ~]# tar -xvf cerebro-0.8.4

[root@elk212 ~]# mv cerebro-0.8.4 /usr/local/es/

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/cerebro.conf

[program:cerebro]

command=/usr/local/es/cerebro-0.8.4/bin/cerebro

autostart = false    ; 在 supervisord 启动的时候不启动

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 3    ; 启动失败自动重试次数,默认是 3

user = log          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/es/logs/cerebro.log

loglevel=info

[root@elk212 ~]# supervisorctl reload

Restarted supervisord

[root@elk212 ~]# supervisorctl status

cerebro                          STOPPED  Not started

es                              STOPPED  Not started

kafka                            STOPPED  Not started

kibana                          STOPPED  Not started

logstash                        STOPPED  Not started

zookeeper                        STOPPED  Not started

[root@elk212 ~]# supervisorctl start all

tomcat: started

zookeeper: started

cerebro: started

kibana: started

kafka: started

logstash: started

es: started

[root@elk212 ~]# supervisorctl status

cerebro                          RUNNING  pid 5342, uptime 0:00:47

es                              RUNNING  pid 5348, uptime 0:00:47

kafka                            RUNNING  pid 5344, uptime 0:00:47

kibana                          RUNNING  pid 5343, uptime 0:00:47

logstash                        RUNNING  pid 5347, uptime 0:00:47

tomcat                          RUNNING  pid 5340, uptime 0:00:47

zookeeper                        RUNNING  pid 5341, uptime 0:00:47

浏览器访问192.168.68.212:9000

提示:由于我只是在虚拟机弄,配置更不上,我已经改成了单机版,正常情况,这里应该显示三个es节点

第五节supervisor管理工具

基本命令

[root@elk212 ~]# supervisorctl status   查看所有服务

[root@elk212 ~]# supervisorctl start all  启动所有

[root@elk212 ~]# supervisorctl start 服务1 服务2 .....

[root@elk212 ~]# supervisorctl reload  重启supervisor

页面管理supervisor

浏览器输入http://192.168.68.212:9001

在上面基本都是傻瓜式操作了,就不介绍了。


常见错误1

log [06:15:49.692] [fatal][root] { [Error: EACCES: permission denied, stat '*/translations/en.json']

  errno: -13,

  code: 'EACCES',

  syscall: 'stat',

  path: '*/translations/en.json' }

FATAL  Error: EACCES: permission denied, stat '*/translations/en.json'

解决办法:修改启动用户为root

[root@elk212 ~]# vim /etc/supervisor/supervisord.d/kibana.conf

[program:kibana]

command=/usr/local/kibana/bin/kibana --allow-root

autostart = false    ; 在 supervisord 启动的时候不启动

startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了

autorestart = true  ; 程序异常退出后自动重启

startretries = 3    ; 启动失败自动重试次数,默认是 3

user = root          ; 用哪个用户启动

redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile_maxbytes = 50MB  ; stdout 日志文件大小,默认 50MB

stdout_logfile_backups = 20    ; stdout 日志文件备份数

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建>日志文件)

stdout_logfile = /usr/local/kibana/kibana.log

loglevel=info


结束语:


更多精彩内容持续更新中,关注微信公众号,有你更精彩。

你可能感兴趣的:(supervisor管理efk+kafka高并发日志收集系统)