本文以Nginx為例,介紹配置正向 Proxy伺服器以及通過代理模式將企業內網伺服器日誌採集到Log Service的解決方案。
前提條件
已建立Project和Logstore。具體操作,請參見建立專案Project和建立Logstore。
已在伺服器上安裝Linux Logtail 1.5.0及以上版本或Window Logtail 1.5.0.0及以上版本。具體操作,請參見安裝Logtail(Linux系統)、安裝Logtail(Windows系統)。
背景資訊
如果您的多台伺服器部署在企業內網中且沒有公網存取權限,但您希望將這些伺服器的日誌採集到Log Service進行查詢與分析,您可以通過代理模式,由具備公網存取權限的內網伺服器將其他內網伺服器上的日誌發送到Log Service。您可以通過任何方式將具備公網存取權限的內網伺服器配置為正向 Proxy伺服器。
工作原理
Logtail與Log Service互動的資料主要包括管控資料、業務資料和監控資料。其中,管控資料包括Logtail配置下發及鑒權等資訊。通訊協定包括HTTP和HTTPS,預設使用HTTP協議發送業務資料和監控資料。因此,Proxy 伺服器必須能夠同時代理HTTP協議資料和HTTPS協議資料。
Nginx是一款開源的高效能HTTPProxy 伺服器,本身支援代理HTTP協議資料,但由於鑒權等原因並不能直接代理HTTPS協議資料。為此,需要為Nginx配置HTTPS補丁,從而使其能夠代理HTTPS協議資料。
步驟一:配置Proxy 伺服器
使用Nginx將一台具有公網存取權限的企業內網伺服器配置為正向 Proxy伺服器。
登入待配置為正向 Proxy伺服器的機器。
下載Nginx及HTTPS補丁。
下載HTTPS補丁。
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
下載並解壓Nginx。
其中,${version}表示Nginx版本,請根據實際情況替換。最新版本,請參見nginx: download。
wget http://nginx.org/download/nginx-${version}.tar.gz tar -xzvf nginx-${version}.tar.gz cd nginx-${version}/
添加HTTPS補丁到Nginx。
其中,${patchfile}為檔案路徑,請根據Nginx版本選擇對應的檔案。更多資訊,請參見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檔案中添加如下配置。
其中,${Proxy 伺服器監聽連接埠}和${DNS伺服器位址},請根據實際情況替換。
server { listen ${Proxy 伺服器監聽連接埠}; resolver ${DNS伺服器位址}; # 用於指定非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伺服器。
步驟二:設定網路代理程式相關的環境變數
Linux系統
您可以通過如下兩種方案設定網路代理程式相關的環境變數。
方案 | 優點 | 缺點 | 使用情境 |
方案一 | 配置僅對Logtail進程生效,影響較小。 | 配置方式相對複雜。 | 適用於伺服器使用者,對伺服器整體網路情況不太瞭解。 |
方案二 | 配置方式簡單。 | 配置對整台伺服器生效,影響較大。 | 適用於伺服器管理員,對伺服器上所有進程的網路請求狀況較為瞭解。 |
方案一
登入某台企業內網伺服器。
開啟
/etc/init.d/ilogtaild
檔案,在start()
函數中增加如下環境變數,然後儲存檔案。關於環境變數的更多資訊,請參見附錄:網路代理程式相關的環境變數。
start() { cd $BIN_DIR umask $UMASK # 在$BIN_DIR/ilogtail前新增代理相關環境變數。 # 這裡以ALL_PROXY為例,假設Proxy 伺服器地址為192.168.1.0,監聽連接埠為9000。 # 內網伺服器與Proxy 伺服器之間通過HTTP協議進行通訊。 ALL_PROXY=http://192.168.1.0:9000 $BIN_DIR/ilogtail RETVAL=$? }
執行如下命令重啟Logtail。
/etc/init.d/ilogtaild restart
方案二
如果您需要對內網伺服器上的所有網路請求進行代理,或者您僅需要對Logtail的網路請求進行代理,但您完全瞭解伺服器上其他進程的網路請求發送地址,您可以考慮此方案。否則,請使用方式情節一。
登入某台企業內網伺服器。
使用
export
命令在開機檔案~/.bash_profile
或/etc/profile
中添加網路代理程式相關的環境變數。關於環境變數的更多資訊,請參見附錄:網路代理程式相關的環境變數。
執行如下命令使環境變數生效。
此處,以
~/.bash_profile
開機檔案為例。source ~/.bash_profile
執行如下命令,重啟Logtail。
/etc/init.d/ilogtaild restart
Windows系統
打擊運行視窗,輸入regedit,然後單擊確定。
在登錄編輯程式視窗中,搜尋電腦\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\LogtailDaemon,然後單擊LogtailDaemon。
單擊右鍵,選擇
,然後命名該新值為Environment。雙擊Environment,在數值資料文字框中,輸入代理相關的環境變數,然後單擊確定。
例如以ALL_PROXY為例,Proxy 伺服器地址為192.168.1.0,監聽連接埠為9000,內網伺服器與Proxy 伺服器之間通過HTTP協議進行通訊。關於環境變數的更多資訊,請參見附錄:網路代理程式相關的環境變數。
打擊運行視窗,輸入services.msc,然後單擊確定。
在服務視窗中,選擇Logtail對應的服務。
如果是Logtail 0.x.x.x版本,選擇LogtailWorker服務。
如果是Logtail 1.0.0.0及以上版本,選擇LogtailDaemon服務。
單擊右鍵,選擇重新啟動。
步驟三:驗證網路
登入某台企業內網伺服器。
執行如下命令。
下述命令中的${region}為目標Project所在地區,${project_name}為目標Project名稱,請根據實際情況替換。
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
如果系統返回如下類似資訊,表示網路正常。
{"Error":{"Code":"OLSInvalidMethod","Message":"The script name is invalid : /","RequestId":"62591BC7C08B7BD4AA99FCD4"}}
附錄:網路代理程式相關的環境變數
環境變數的配置說明如下:
下述環境變數均支援小寫入模式,但優先順序低於大寫入模式。
如果將HTTP和HTTPS協議資料全部發送給同一台Proxy 伺服器,可添加環境變數
ALL_PROXY
。ALL_PROXY:${正向 Proxy伺服器的地址}
如果將HTTP和HTTPS協議資料分別發送至不同的Proxy 伺服器上,可添加環境變數
HTTP_PROXY
和HTTPS_PROXY
。HTTP_PROXY:${代理HTTP協議資料的伺服器位址} HTTPS_PROXY:${代理HTTPS協議資料的伺服器位址}
其中,Proxy 伺服器的地址需滿足
[協議://[使用者名稱:密碼@]]地址[:連接埠]
格式。協議(可選):指定了當前伺服器和Proxy 伺服器之間的通訊協定,可設定為http、https或socks5。如果不設定,預設使用http。
使用者名稱和密碼(可選):登入Proxy 伺服器的使用者名稱和密碼。
地址(必選):Proxy 伺服器的IP地址。
連接埠(可選):設定為您在nginx.conf檔案中配置的Proxy 伺服器監聽連接埠。更多資訊,請參見配置Proxy 伺服器中的步驟5。如果不設定,預設使用80。
另外,您還可以額外增加NO_PROXY環境變數,該變數指定發往哪些地址的資料不需要經過Proxy 伺服器,多個地址之間可以用半形逗號(,)串連,支援的地址形式包括:
IP地址
網域名稱(可以以半形句號(.)開頭,支援匹配當前網域名稱及其子網域名稱。)
*(禁用Proxy 伺服器)