天天看點

《ELK Stack權威指南(第2版)》一1.5 長期運作方

本節書摘來自華章出版社《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

/dev/null 2>&1

command &

/dev/null &

/dev/null 2>&1 &

&> /dev/null

nohup command

請回答以上指令的異同……

具體不一一解釋了。直接說答案,想要維持一個長期背景運作的logstash,你需要同時在指令前面加nohup,後面加&。

3.更優雅的screen方式

screen算是linux運維一個中進階技巧。通過screen指令建立的環境下運作的終端指令,其父程序不是sshd登入會話,而是screen。這樣就可以既避免使用者退出程序消失的問題,又随時能重新接管回終端繼續操作。

建立獨立的screen指令如下:

screen -dms

elkscreen_1

連接配接進入已建立的elkscreen_1的指令如下:

screen -r

然後你可以看到一個一模一樣的終端,運作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]

-f /etc/logstash/pro2.conf -w 10 -l /var/

log/logstash/pro2.log

然後啟動service supervisord start 即可。

logstash會以supervisord子程序的身份運作,你還可以使用supervisorctl指令,單獨控制一系列 logstash 子程序中某一個程序的啟停操作:

supervisorctl

stop elkpro_2