官术网_书友最值得收藏!

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
主站蜘蛛池模板: 亚东县| 鄂托克前旗| 揭东县| 花莲县| 温州市| 霍城县| 怀仁县| 徐闻县| 宝应县| 临潭县| 江西省| 灵璧县| 镇康县| 泸西县| 南部县| 浮山县| SHOW| 西丰县| 兴安盟| 古浪县| 山东省| 马山县| 贵德县| 仁化县| 施甸县| 沐川县| 高邑县| 五家渠市| 莱阳市| 贡山| 安平县| 朝阳区| 宁阳县| 凌云县| 区。| 香河县| 淮安市| 长白| 张家港市| 明星| 镇远县|