采集企業(yè)內(nèi)網(wǎng)服務(wù)器日志
本文以Nginx為例,介紹配置正向代理服務(wù)器以及通過代理模式將企業(yè)內(nèi)網(wǎng)服務(wù)器日志采集到日志服務(wù)的解決方案。
前提條件
已創(chuàng)建Project和Logstore。具體操作,請參見創(chuàng)建項目Project和創(chuàng)建Logstore。
已在服務(wù)器上安裝Linux Logtail 1.5.0及以上版本或Window Logtail 1.5.0.0及以上版本。具體操作,請參見安裝Logtail(Linux系統(tǒng))、安裝Logtail(Windows系統(tǒng))。
背景信息
如果您的多臺服務(wù)器部署在企業(yè)內(nèi)網(wǎng)中且沒有公網(wǎng)訪問權(quán)限,但您希望將這些服務(wù)器的日志采集到日志服務(wù)進(jìn)行查詢與分析,您可以通過代理模式,由具備公網(wǎng)訪問權(quán)限的內(nèi)網(wǎng)服務(wù)器將其他內(nèi)網(wǎng)服務(wù)器上的日志發(fā)送到日志服務(wù)。您可以通過任何方式將具備公網(wǎng)訪問權(quán)限的內(nèi)網(wǎng)服務(wù)器配置為正向代理服務(wù)器。
工作原理
Logtail與日志服務(wù)交互的數(shù)據(jù)主要包括管控數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)和監(jiān)控數(shù)據(jù)。其中,管控數(shù)據(jù)包括Logtail配置下發(fā)及鑒權(quán)等信息。通信協(xié)議包括HTTP和HTTPS,默認(rèn)使用HTTP協(xié)議發(fā)送業(yè)務(wù)數(shù)據(jù)和監(jiān)控數(shù)據(jù)。因此,代理服務(wù)器必須能夠同時代理HTTP協(xié)議數(shù)據(jù)和HTTPS協(xié)議數(shù)據(jù)。
Nginx是一款開源的高性能HTTP代理服務(wù)器,本身支持代理HTTP協(xié)議數(shù)據(jù),但由于鑒權(quán)等原因并不能直接代理HTTPS協(xié)議數(shù)據(jù)。為此,需要為Nginx配置HTTPS補丁,從而使其能夠代理HTTPS協(xié)議數(shù)據(jù)。
步驟一:配置代理服務(wù)器
使用Nginx將一臺具有公網(wǎng)訪問權(quán)限的企業(yè)內(nèi)網(wǎng)服務(wù)器配置為正向代理服務(wù)器。
登錄待配置為正向代理服務(wù)器的機器。
下載Nginx及HTTPS補丁。
下載HTTPS補丁。
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
下載并解壓Nginx。
其中,${version}表示Nginx版本,請根據(jù)實際情況替換。最新版本,請參見nginx: download。
wget http://nginx.org/download/nginx-${version}.tar.gz tar -xzvf nginx-${version}.tar.gz cd nginx-${version}/
添加HTTPS補丁到Nginx。
其中,${patchfile}為文件路徑,請根據(jù)Nginx版本選擇對應(yīng)的文件。更多信息,請參見Select patch。
patch -p1 < ../ngx_http_proxy_connect_module/patch/${patchfile}.patch
安裝Nginx。
./configure --add-module=../ngx_http_proxy_connect_module make && make install
在nginx.conf文件中添加如下配置。
其中,${代理服務(wù)器監(jiān)聽端口}和${DNS服務(wù)器地址},請根據(jù)實際情況替換。
server { listen ${代理服務(wù)器監(jiān)聽端口}; resolver ${DNS服務(wù)器地址}; # 用于指定非HTTP請求的代理。 proxy_connect; proxy_connect_allow 443; proxy_connect_connect_timeout 10s; proxy_connect_data_timeout 10s; # 用于指定HTTP請求的代理。 location / { proxy_pass http://$host; proxy_set_header Host $host; } }
啟動Nginx服務(wù)器。
步驟二:設(shè)置網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量
Linux系統(tǒng)
您可以通過如下兩種方案設(shè)置網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量。
方案 | 優(yōu)點 | 缺點 | 使用場景 |
方案一 | 配置僅對Logtail進(jìn)程生效,影響較小。 | 配置方式相對復(fù)雜。 | 適用于服務(wù)器使用者,對服務(wù)器整體網(wǎng)絡(luò)情況不太了解。 |
方案二 | 配置方式簡單。 | 配置對整臺服務(wù)器生效,影響較大。 | 適用于服務(wù)器管理員,對服務(wù)器上所有進(jìn)程的網(wǎng)絡(luò)請求狀況較為了解。 |
方案一
登錄某臺企業(yè)內(nèi)網(wǎng)服務(wù)器。
打開
/etc/init.d/ilogtaild
文件,在start()
函數(shù)中增加如下環(huán)境變量,然后保存文件。關(guān)于環(huán)境變量的更多信息,請參見附錄:網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量。
start() { cd $BIN_DIR umask $UMASK # 在$BIN_DIR/ilogtail前新增代理相關(guān)環(huán)境變量。 # 這里以ALL_PROXY為例,假設(shè)代理服務(wù)器地址為192.168.1.0,監(jiān)聽端口為9000。 # 內(nèi)網(wǎng)服務(wù)器與代理服務(wù)器之間通過HTTP協(xié)議進(jìn)行通信。 ALL_PROXY=http://192.168.1.0:9000 $BIN_DIR/ilogtail RETVAL=$? }
執(zhí)行如下命令重啟Logtail。
/etc/init.d/ilogtaild restart
重復(fù)執(zhí)行步驟1~3,為其他內(nèi)網(wǎng)服務(wù)器設(shè)置代理相關(guān)的環(huán)境變量。
方案二
如果您需要對內(nèi)網(wǎng)服務(wù)器上的所有網(wǎng)絡(luò)請求進(jìn)行代理,或者您僅需要對Logtail的網(wǎng)絡(luò)請求進(jìn)行代理,但您完全了解服務(wù)器上其他進(jìn)程的網(wǎng)絡(luò)請求發(fā)送地址,您可以考慮此方案。否則,請使用方案一。
登錄某臺企業(yè)內(nèi)網(wǎng)服務(wù)器。
使用
export
命令在啟動文件~/.bash_profile
或/etc/profile
中添加網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量。關(guān)于環(huán)境變量的更多信息,請參見附錄:網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量。
執(zhí)行如下命令使環(huán)境變量生效。
此處,以
~/.bash_profile
啟動文件為例。source ~/.bash_profile
執(zhí)行如下命令,重啟Logtail。
/etc/init.d/ilogtaild restart
重復(fù)執(zhí)行步驟1~4,為其他內(nèi)網(wǎng)服務(wù)器配置代理相關(guān)的環(huán)境變量。
Windows系統(tǒng)
打擊運行窗口,輸入regedit,然后單擊確定。
在注冊表編輯器窗口中,搜索計算機\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\LogtailDaemon,然后單擊LogtailDaemon。
單擊右鍵,選擇
,然后命名該新值為Environment。雙擊Environment,在數(shù)值數(shù)據(jù)文本框中,輸入代理相關(guān)的環(huán)境變量,然后單擊確定。
例如以ALL_PROXY為例,代理服務(wù)器地址為192.168.1.0,監(jiān)聽端口為9000,內(nèi)網(wǎng)服務(wù)器與代理服務(wù)器之間通過HTTP協(xié)議進(jìn)行通信。關(guān)于環(huán)境變量的更多信息,請參見附錄:網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量。
打擊運行窗口,輸入services.msc,然后單擊確定。
在服務(wù)窗口中,選擇Logtail對應(yīng)的服務(wù)。
如果是Logtail 0.x.x.x版本,選擇LogtailWorker服務(wù)。
如果是Logtail 1.0.0.0及以上版本,選擇LogtailDaemon服務(wù)。
單擊右鍵,選擇重新啟動。
步驟三:驗證網(wǎng)絡(luò)
登錄某臺企業(yè)內(nèi)網(wǎng)服務(wù)器。
執(zhí)行如下命令。
下述命令中的${region}為目標(biāo)Project所在地域,${project_name}為目標(biāo)Project名稱,請根據(jù)實際情況替換。
curl http://logtail.${region}.log.aliyuncs.com curl https://logtail.${region}.log.aliyuncs.com curl http://${project_name}.${region}.log.aliyuncs.com curl http://ali-${region}-sls-admin.${region}.log.aliyuncs.com
如果系統(tǒng)返回如下類似信息,表示網(wǎng)絡(luò)正常。
{"Error":{"Code":"OLSInvalidMethod","Message":"The script name is invalid : /","RequestId":"62591BC7C08B7BD4AA99FCD4"}}
重復(fù)執(zhí)行步驟1和2,驗證其他企業(yè)內(nèi)網(wǎng)服務(wù)器的網(wǎng)絡(luò)。
附錄:網(wǎng)絡(luò)代理相關(guān)的環(huán)境變量
環(huán)境變量的配置說明如下:
下述環(huán)境變量均支持小寫模式,但優(yōu)先級低于大寫模式。
如果將HTTP和HTTPS協(xié)議數(shù)據(jù)全部發(fā)送給同一臺代理服務(wù)器,可添加環(huán)境變量
ALL_PROXY
。ALL_PROXY:${正向代理服務(wù)器的地址}
如果將HTTP和HTTPS協(xié)議數(shù)據(jù)分別發(fā)送至不同的代理服務(wù)器上,可添加環(huán)境變量
HTTP_PROXY
和HTTPS_PROXY
。HTTP_PROXY:${代理HTTP協(xié)議數(shù)據(jù)的服務(wù)器地址} HTTPS_PROXY:${代理HTTPS協(xié)議數(shù)據(jù)的服務(wù)器地址}
其中,代理服務(wù)器的地址需滿足
[協(xié)議://[用戶名:密碼@]]地址[:端口]
格式。協(xié)議(可選):指定了當(dāng)前服務(wù)器和代理服務(wù)器之間的通信協(xié)議,可設(shè)置為http、https或socks5。如果不設(shè)置,默認(rèn)使用http。
用戶名和密碼(可選):登錄代理服務(wù)器的用戶名和密碼。
地址(必選):代理服務(wù)器的IP地址。
端口(可選):設(shè)置為您在nginx.conf文件中配置的代理服務(wù)器監(jiān)聽端口。更多信息,請參見配置代理服務(wù)器中的步驟5。如果不設(shè)置,默認(rèn)使用80。
另外,您還可以額外增加NO_PROXY環(huán)境變量,該變量指定發(fā)往哪些地址的數(shù)據(jù)不需要經(jīng)過代理服務(wù)器,多個地址之間可以用半角逗號(,)連接,支持的地址形式包括:
IP地址
域名(可以以半角句號(.)開頭,支持匹配當(dāng)前域名及其子域名。)
*(禁用代理服務(wù)器)