このトピックでは、Nginx をフォワードプロキシサーバーとして使用し、プロキシモードを利用してオンプレミスサーバーから Simple Log Service (SLS) にログを収集する方法を説明します。
前提条件
-
プロジェクトと Logstore が作成されている必要があります。 詳細については、「プロジェクトの管理」および「基本的な Logstore の作成」をご参照ください。
-
Linux サーバーには Logtail 1.5.0 以降が、Windows サーバーには Logtail 1.5.0.0 以降がインストールされている必要があります。 詳細については、「Linux サーバーへの Logtail のインストール」および「Windows サーバーへの Logtail のインストール」をご参照ください。
背景情報
パブリックインターネットにアクセスできないオンプレミスサーバーからログを収集するには、プロキシモードを使用します。 このモードでは、パブリックインターネットにアクセスできるサーバーをフォワードプロキシとして動作させ、他のサーバーからのログを SLS に転送できます。
仕組み
Logtail は、制御、サービス、監視データを SLS とやり取りします。 制御データには、Logtail の設定配信や認証などの情報が含まれます。 この通信には HTTP と HTTPS が使用され、デフォルトではサービスデータと監視データは HTTP で送信されます。 したがって、プロキシサーバーは HTTP と HTTPS 両方のトラフィックをプロキシする必要があります。
Nginx は、高性能なオープンソースの HTTP プロキシサーバーです。 ネイティブで HTTP トラフィックのプロキシをサポートしていますが、認証などの要因により、HTTPS トラフィックを直接プロキシすることはできません。 HTTPS のプロキシを有効にするには、Nginx に HTTPS パッチを適用する必要があります。
ステップ1:プロキシサーバーの設定
Nginx を使用して、パブリックインターネットにアクセスできるオンプレミスサーバーをフォワードプロキシサーバーとして設定します。
-
フォワードプロキシサーバーとして動作するマシンにログインします。
-
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}/
-
-
Nginx に HTTPS パッチを適用します。
コマンド内の ${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_server_listening_port} と ${dns_server_address} を実際の値に置き換えてください。
server { listen ${proxy_server_listening_port}; resolver ${dns_server_address}; # 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 サーバーを起動します。
ステップ2:プロキシ関連の環境変数の設定
Linux システム
プロキシ関連の環境変数を設定するには、2つの方法があります。
|
方法 |
利点 |
欠点 |
ユースケース |
|
方法1 |
設定は Logtail プロセスにのみ影響するため、影響は最小限です。 |
設定が比較的複雑です。 |
サーバー全体のネットワーク設定に精通していないユーザーに最適です。 |
|
方法2 |
設定が簡単です。 |
サーバー全体の設定であるため、影響範囲が広くなります。 |
サーバー上のすべてのプロセスのネットワークリクエストパターンを完全に理解しているサーバー管理者に最適です。 |
方法1
-
オンプレミスサーバーにログインします。
-
/etc/init.d/ilogtaildファイルを開き、必要な環境変数をstart()関数に追加してファイルを保存します。環境変数の詳細については、「付録:プロキシ環境変数」をご参照ください。
start() { cd $BIN_DIR umask $UMASK # $BIN_DIR/ilogtail の前にプロキシ関連の環境変数を追加します。 # この例では ALL_PROXY を使用します。 プロキシサーバーの IP アドレスが 192.168.1.0 で、リッスンポートが 9000 であると仮定します。 # オンプレミスサーバーは HTTP 経由でプロキシサーバーと通信します。 ALL_PROXY=http://192.168.1.0:9000 $BIN_DIR/ilogtail RETVAL=$? } -
次のコマンドを実行して Logtail を再起動します。
/etc/init.d/ilogtaild restart
方法2
この方法は、オンプレミスサーバー上のすべてのネットワークリクエストをプロキシする場合、または Logtail のリクエストのみをプロキシし、サーバー上の他のプロセスのネットワーク動作を完全に理解している場合にのみ使用してください。 それ以外の場合は、方法1を使用してください。
-
オンプレミスサーバーにログインします。
-
exportコマンドを使用して、プロキシ関連の環境変数を~/.bash_profileまたは/etc/profile起動スクリプトに追加します。環境変数の詳細については、「付録:プロキシ環境変数」をご参照ください。
-
次のコマンドを実行して環境変数を適用します。
この例では、
~/.bash_profile起動スクリプトを使用します。source ~/.bash_profile -
次のコマンドを実行して Logtail を再起動します。
/etc/init.d/ilogtaild restart
Windows システム
-
実行 ウィンドウを開き、「regedit」と入力して、OK をクリックします。
-
[レジストリ エディター] ウィンドウで、[Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\LogtailDaemon] に移動し、[LogtailDaemon] をクリックします。
-
右クリックして の順に選択し、新しい値に Environment という名前を付けます。
-
Environment をダブルクリックします。 [値のデータ] テキストボックスにプロキシ関連の環境変数を入力し、OK をクリックします。
この例では ALL_PROXY を使用します。 プロキシサーバーの IP アドレスは 192.168.1.0、リッスンポートは 9000 です。 オンプレミスサーバーは HTTP 経由でプロキシサーバーと通信します。 環境変数の詳細については、「付録:プロキシ環境変数」をご参照ください。 たとえば、「
ALL_PROXY=http://192.168.1.0:9000」と入力します。 -
実行 ウィンドウを開き、「services.msc」と入力して、OK をクリックします。
-
サービス ウィンドウで、Logtail サービスを見つけます。
-
Logtail 0.x.x.x の場合は、LogtailWorker サービスを選択します。
-
Logtail 1.0.0.0 以降の場合は、LogtailDaemon サービスを選択します。
-
-
サービスを右クリックし、[再起動] を選択します。
ステップ3:ネットワーク接続性の検証
-
オンプレミスサーバーにログインします。
-
次のコマンドを実行します。
次のコマンドの ${region} はプロジェクトのリージョン、${project_name} はプロジェクトの名前です。 これらを実際の値に置き換えてください。
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 トラフィックを同じプロキシサーバーに送信するには、
ALL_PROXY環境変数を追加します。ALL_PROXY=${address_of_the_forward_proxy_server} -
HTTP および HTTPS トラフィックを異なるプロキシサーバーに送信するには、
HTTP_PROXYおよびHTTPS_PROXY環境変数を追加します。HTTP_PROXY=${address_of_the_server_that_proxies_HTTP_traffic} HTTPS_PROXY=${address_of_the_server_that_proxies_HTTPS_traffic}プロキシサーバーのアドレスは、
[protocol://[username:password@]]address[:port]形式で指定します。-
protocol (オプション):オンプレミスサーバーとプロキシサーバー間の通信プロトコルを指定します。 有効な値は http、https、socks5 です。 このパラメーターを設定しない場合、デフォルトでは http が使用されます。
-
username と password (オプション):プロキシサーバーにログインするための認証情報。
-
address (必須):プロキシサーバーの IP アドレス。
-
port (オプション):nginx.conf ファイルで設定したプロキシサーバーのリッスンポート。 詳細については、「ステップ1:プロキシサーバーの設定」の手順 5 をご参照ください。 このパラメーターを省略した場合、デフォルトではポート 80 が使用されます。
NO_PROXY 環境変数を追加して、プロキシサーバーをバイパスする宛先を指定することもできます。 複数のアドレスはカンマ (,) で区切ります。 サポートされている形式は次のとおりです。
-
IP アドレス
-
先頭のピリオド (.) は、ドメインとそのサブドメインに一致します。
-
* (すべての宛先に対してプロキシを無効にします)
-