博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《ELK Stack权威指南(第2版)》一1.5 长期运行方
阅读量:6715 次
发布时间:2019-06-25

本文共 2065 字,大约阅读时间需要 6 分钟。

本节书摘来自华章出版社《ELK Stack权威指南(第2版)》一书中的第1章,第1.5节,作者 饶琛琳  更多章节内容可以访问云栖社区“华章计算机”公众号查看。 

1.5 长期运行方式

完成上一节的初次运行后,你可能会发现一点:一旦你按下Ctrl+C,停下标准输入输出,Logstash进程也就随之停止了。作为一个肯定要长期运行的程序,应该怎么处理呢?

本章节问题对于一个运维来说应该属于基础知识,鉴于ELK用户很多其实不是运维,添加这段内容。

办法有很多种,下面介绍四种最常用的办法。

1.标准的service方式

采用RPM、DEB发行包安装的读者,推荐采用这种方式。发行包内,都自带有sysV或者systemd风格的启动程序/配置,你只需要直接使用即可。以RPM为例,/etc/init.d/logstash脚本中,会加载/etc/init.d/functions库文件,利用其中的daemon函数,将Logstash 进程作为后台程序运行。

所以,你只需把自己写好的配置文件统一放在/etc/logstash/目录下(注意目录下所有配置文件都应该是.conf结尾,且不能有其他文本文件存在,因为logstash agent启动的时候是读取全文件夹的),然后运行service logstash start命令即可。

2.最基础的nohup方式

这是最简单的方式,也是Linux新手们很容易搞混淆的一个经典问题:

command

command > /dev/null

command > /dev/null 2>&1

command &

command > /dev/null &

command > /dev/null 2>&1 &

command &> /dev/null

nohup command &> /dev/null

请回答以上命令的异同……

具体不一一解释了。直接说答案,想要维持一个长期后台运行的Logstash,你需要同时在命令前面加nohup,后面加&。

3.更优雅的screen方式

screen算是Linux运维一个中高级技巧。通过screen命令创建的环境下运行的终端命令,其父进程不是sshd登录会话,而是screen。这样就可以既避免用户退出进程消失的问题,又随时能重新接管回终端继续操作。

创建独立的screen命令如下:

screen -dmS elkscreen_1

连接进入已创建的elkscreen_1的命令如下:

screen -r elkscreen_1

然后你可以看到一个一模一样的终端,运行Logstash之后,不要按Ctrl+C,而是按Ctrl+A+D键,断开环境。想重新接管,依然用screen -r elkscreen_1即可。

如果创建了多个screen,查看列表命令如下:

screen -list

4. 最推荐的daemontools方式

不管是nohup还是screen,都不是可以很方便管理的方式,在运维管理一个ELK集群的时候,必须寻找一种尽可能简洁的办法。所以,对于需要长期后台运行的大量程序(注意大量,如果就一个进程,还是学习一下怎么写init脚本吧),推荐大家使用一款daemontools工具。

daemontools是一个软件名称,不过配置略复杂。所以这里我其实是用其名称来指代整个同类产品,包括但不限于Python实现的supervisord,Perl实现的ubic,Ruby实现的god等。

以supervisord为例,因为这个出来得比较早,可以直接通过EPEL仓库安装。

yum -y install supervisord --enablerepo=epel

在/etc/supervisord.conf配置文件里添加内容,定义你要启动的程序,如下所示:

[program:elkpro_1]

environment=LS_HEAP_SIZE=5000m

directory=/opt/logstash

command=/opt/logstash/bin/logstash -f /etc/logstash/pro1.conf -w 10 -l /var/log/logstash/pro1.log

[program:elkpro_2]

environment=LS_HEAP_SIZE=5000m

directory=/opt/logstash

command=/opt/logstash/bin/logstash -f /etc/logstash/pro2.conf -w 10 -l /var/

log/logstash/pro2.log

然后启动service supervisord start 即可。

Logstash会以supervisord子进程的身份运行,你还可以使用supervisorctl命令,单独控制一系列 Logstash 子进程中某一个进程的启停操作:

supervisorctl stop elkpro_2

 

 

 

 

转载地址:http://wxrlo.baihongyu.com/

你可能感兴趣的文章
Java学习lesson 08
查看>>
MarkDown入门
查看>>
项目经理 与 敏捷开发
查看>>
安卓软件开发你知道需要学什么吗,看这里?
查看>>
必读的Python入门书籍,你都看过吗?(内有福利)
查看>>
alibaba.fastjson 乱序问题
查看>>
django 反向关联--blog.entry_set.all()查询
查看>>
网工之路
查看>>
linux 查看发行版本信息
查看>>
数据结构之二叉树遍历
查看>>
Linux rpm 命令参数使用详解[介绍和应用]
查看>>
tr的使用详解
查看>>
CentOS 6.4下PXE+Kickstart无人值守安装操作系统
查看>>
2.5 alias命令
查看>>
arp
查看>>
小博浅谈MVC
查看>>
前端技术学习之选择器(四)
查看>>
Ubuntu与windows的远程控制/远程桌面
查看>>
2016年4月4日中项作业
查看>>
ARP欺骗
查看>>