Java アプリケーションがインターネットへの直接アクセスが制限されたネットワーク環境で実行される場合、Application Real-Time Monitoring Service (ARMS) エージェントから ARMS バックエンドへモニタリングデータを中継するために、NGINX を転送プロキシとして使用します。
転送プロキシを使用するタイミング
ARMS アプリケーションモニタリングでは、ARMS エージェントと ARMS バックエンド間のネットワーク接続性が必須です。データセンターまたはサードパーティのクラウド環境にデプロイされたアプリケーションは、通常、インターネットまたは Express Connect 回線を経由して接続されます。詳細については、「アプリケーションモニタリングの概要」をご参照ください。
金融システムやセキュリティ要件の厳しいデータセンターなど、ネットワークが制限された環境では、一部のホストがインターネットに直接アクセスできないことがあります。このような場合は、DMZ 内に NGINX を転送プロキシとしてデプロイし、分離されたアプリケーションネットワークと ARMS バックエンド間のデータ中継を行います。
アーキテクチャ
データは以下の 3 段階を経て流れます:
ARMS エージェントが Java アプリケーションからトレース、メトリック、プロファイリングデータ、およびメタデータを収集します。
エージェントは、ARMS バックエンドに直接送信する代わりに、DMZ 内の NGINX にすべてのデータを送信します。
NGINX は、各データタイプをインターネット経由で対応する ARMS エンドポイントに転送します。
この構成を実現するには、以下の 2 つのコンポーネントを設定します:
NGINX — トレース、メトリック、プロファイリング、メタデータといった各データタイプを、対応する ARMS エンドポイントに転送するプロキシルール。
ARMS エージェント — データ報告先を NGINX にリダイレクトするエンドポイント設定。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
NGINX がインストール済みで、インターネットアクセス可能な状態です。インストール手順については、「NGINX 公式ドキュメント」をご参照ください。
ご利用の Alibaba Cloud リージョンに対応する ARMS エンドポイントおよび ACM エンジンの IP アドレス。詳細については、「Java 向け ARMS エージェントが要件とするネットワーク構成」をご参照ください。
Alibaba Cloud アカウント ID。詳細については、「Alibaba Cloud アカウントの ID を確認する方法」をご参照ください。
NGINX の設定
/etc/nginx/site-available/default を編集し、以下の server ブロックを追加します。各ブロックは、特定のデータタイプを対応する ARMS エンドポイントにプロキシします。
プレースホルダーの値は、前述の「前提条件」で取得したエンドポイントおよびアカウント ID に置き換えてください。
# --- トレースおよび継続的プロファイリング(ポート 80) ---
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name arms-service;
ignore_invalid_headers off;
# 継続的プロファイリング:<account-id> を Alibaba Cloud アカウント ID に置き換え、
# URL をご利用のリージョンに対応する継続的プロファイリングエンドポイントに更新してください。
location /<account-id> {
proxy_pass http://arms-profiling-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com;
}
# トレース:URL をご利用のリージョンのトレースエンドポイントに更新してください。
location / {
proxy_pass http://arms-dc-sz.aliyuncs.com;
}
}
# --- メタデータ(ポート 9990) ---
server {
listen 9990;
server_name arms-meta;
ignore_invalid_headers off;
# メタデータ:URL をご利用のリージョンのトレースエンドポイント(ポート 9990)に更新してください。
location / {
proxy_pass http://arms-dc-sz.aliyuncs.com:9990;
}
}
# --- メトリック(ポート 80) ---
server {
listen 80;
server_name arms-metrics;
ignore_invalid_headers off;
# メトリック:URL をご利用のリージョンのメトリックエンドポイントに更新してください。
location / {
proxy_pass http://cn-shenzhen.arms.aliyuncs.com;
}
}
# --- ACM エンジン検出(ポート 8080) ---
server {
listen 8080;
server_name arms-acm;
ignore_invalid_headers off;
# ACM エンジン検出用にサーバーの IP アドレスを返却します。
location / {
return 200 $server_addr;
}
}
# --- ACM エンジン(ポート 8848) ---
server {
listen 8848;
server_name arms-acm;
ignore_invalid_headers off;
# ACM エンジン:IP アドレスをご利用のリージョンの ACM エンジン IP アドレスに置き換えてください。
location / {
proxy_pass http://139.196.XX.XX:8848;
}
}以下の表は、ポートとデータタイプの対応関係をまとめています。
| ポート | サーバー名 | データの型 | プロキシ先 |
|---|---|---|---|
| 80 | arms-service | トレース + 継続的プロファイリング | トレースエンドポイントおよびプロファイリング OSS エンドポイント |
| 9990 | arms-meta | メタデータ | トレースエンドポイント(ポート 9990) |
| 80 | arms-metrics | メトリック | メトリックエンドポイント |
| 8080 | arms-acm | ACM エンジン検出 | NGINX サーバー IP アドレスを返却 |
| 8848 | arms-acm | ACM エンジン | ACM エンジン IP アドレス(ポート 8848) |
| 9092 | (stream ブロック) | 診断チャネル | トレースエンドポイント(ポート 9092) |
次に、/etc/nginx/nginx.conf を編集し、診断チャネルの転送用に以下の stream ブロックを追加します。
# --- 診断チャネル(ポート 9092) ---
stream {
upstream arms-arthas {
# URL をご利用のリージョンのトレースエンドポイントに更新してください。
server arms-dc-sz.aliyuncs.com:9092;
}
server {
listen 9092;
proxy_pass arms-arthas;
}
}NGINX と ARMS バックエンド間の通信は HTTP を使用します。セキュリティポリシーにより、ARMS エージェントと NGINX 間の通信に暗号化が必要な場合は、NGINX で TLS を設定し、エージェントのエンドポイント設定を適宜更新してください。
ARMS エージェントの設定
NGINX の実行が確認できたら、ARMS エージェントのデータ報告先を、パブリックな ARMS エンドポイントから NGINX にリダイレクトします。この転送プロキシモードは、手動でインストールしたエージェントおよび Kubernetes 環境で自動的にインストールされたエージェントの両方で動作します。インストール手順については、「ARMS エージェントの手動インストール」および「オープンソース Kubernetes クラスターへの ARMS エージェントの自動インストール」をご参照ください。
ご使用のエージェントバージョンおよびインストール方法に該当するセクションを選択してください。
以下の表は、両バージョンで使用されるエージェントエンドポイントパラメーターの一覧です。
| パラメーター | 値 | データの型 |
|---|---|---|
profiler.collector.trace.endpoint | arms-service | トレース |
profiler.collector.metric.endpoint | arms-metrics | メトリック |
profiler.collector.meta.endpoint | arms-meta | メタデータ |
profiler.collector.endpoint | arms-service | 一般コレクション |
profiler.acm.endpoint | arms-acm | ACM エンジン |
profiler.oss.endpoint | arms-service | 継続的プロファイリング(V3.2.0+) |
エージェント V4.x 以降
手動インストール
ステップ 1:ホストエントリの追加
アプリケーションが実行されるサーバーの /etc/hosts に以下のエントリを追加します。ただし、10.0.0.201 は、ご利用の NGINX サーバーの IP アドレスに置き換えてください。
10.0.0.201 arms-service
10.0.0.201 arms-metrics
10.0.0.201 arms-meta
10.0.0.201 arms-acm
# cn-shanghai をご利用の Alibaba Cloud リージョンコードに置き換えてください。
10.0.0.201 arms-profiling-cn-shanghai.arms-serviceARMS エージェントは、バックエンドへの接続時にエンドポイントのホスト名を解決します。/etc/hosts にこれらのホスト名を NGINX の IP アドレスにマッピングすることで、コード変更なしにエージェントが NGINX へデータを送信できます。
ステップ 2:エージェントエンドポイント設定の更新
以下のいずれかの方法を使用してください。
方法 1:設定ファイル(推奨)
エージェントのルートディレクトリに arms-agent.config ファイルを作成し、以下のパラメーターを記述します。
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service以下の JVM 起動パラメーターを追加し、エージェントがこのファイルを参照するように指定します。
-Darms.config.file=/path/to/arms-agent.config/path/to/arms-agent.config は、実際の設定ファイルの絶対パスに置き換えてください。
方法 2:JVM 起動パラメーター
すべてのエンドポイント設定を、JVM パラメーターとして直接渡します。
-Dprofiler.collector.trace.endpoint=arms-service -Dprofiler.collector.metric.endpoint=arms-metrics -Dprofiler.collector.meta.endpoint=arms-meta -Dprofiler.collector.endpoint=arms-service -Dprofiler.acm.endpoint=arms-acm -Dprofiler.oss.endpoint=arms-service設定ファイル(方法 1)は、複数のアプリケーションで共通利用する場合の保守性が高く、JVM パラメーター(方法 2)は、迅速なテストや単一アプリケーション向けのデプロイに適しています。
Kubernetes 環境での自動インストール
自動インストール済みのエージェントに対して転送プロキシを設定する前に、エージェントを V3.2.0 以降に更新してください。
ステップ 1:現在のエージェント設定の取得
ARMS エージェントがインストールされている Pod にログインし、/home/admin/.opt/ArmsAgent/arms-agent.config の設定ファイルの内容をコピーします。
ステップ 2:ConfigMap の作成
コピーした設定ファイル内で、エンドポイントの値を NGINX プロキシのホスト名に置き換えます。
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service変更後の設定から ConfigMap を作成します。
apiVersion: v1
kind: ConfigMap
metadata:
name: arms-agent-proxy-mode.config
data:
arms-agent.config: |-
### ここに変更後の設定を貼り付けてください。
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service
### ここに変更後の設定を貼り付けてください。ステップ 3:ワークロードの Deployment の更新
Deployment YAML を編集し、ConfigMap のマウントおよびホストエイリアスの追加を行います。カスタマイズが必要な値を強調表示するインラインコメントに注意してください。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-boot-demo
name: spring-boot-demo
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-demo
template:
metadata:
labels:
app: spring-boot-demo
armsPilotAutoEnable: "on"
armsPilotCreateAppName: spring-boot-demo
spec:
hostAliases:
# IP アドレスをご利用の NGINX サーバーの IP アドレスに置き換えてください。
- ip: "192.168.172.171"
hostnames:
- "arms-service"
- "arms-metrics"
- "arms-meta"
- "arms-acm"
# cn-shenzhen をご利用の Alibaba Cloud リージョンコードに置き換えてください。
- "arms-profiling-cn-shenzhen.arms-service"
containers:
- env:
# エージェントがプロキシモードの設定ファイルを参照するよう指定します。
- name: ARMS_CONFIG_FILE
value: /home/admin/.opt/ArmsAgent/arms-agent-proxy-mode.config
image: >-
registry.cn-hangzhou.aliyuncs.com/ahas_apsara_adp/spring-boot-demo:wt-test
imagePullPolicy: Always
name: spring-boot-demo
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 512Mi
volumeMounts:
# プロキシモードの設定をエージェントディレクトリにマウントします。
- mountPath: /home/admin/.opt/ArmsAgent/
name: arms-agent-proxy-mode
imagePullSecrets:
- name: wt-test
volumes:
# ConfigMap をボリュームとしてマッピングします。
- configMap:
name: arms-agent-proxy-mode.config
name: arms-agent-proxy-modeエージェント V3.x 以前
手動インストール
ステップ 1:ホストエントリの追加
アプリケーションが実行されるサーバーの /etc/hosts に以下のエントリを追加します。ただし、10.0.0.201 は、ご利用の NGINX サーバーの IP アドレスに置き換えてください。
10.0.0.201 arms-service
10.0.0.201 arms-metrics
10.0.0.201 arms-meta
10.0.0.201 arms-acm
# cn-shanghai をご利用の Alibaba Cloud リージョンコードに置き換えてください。
10.0.0.201 arms-profiling-cn-shanghai.arms-serviceステップ 2:エージェント設定ファイルの編集
エージェントのディレクトリにある arms-agent.config を開き、以下のパラメーターを更新します。
# すべてのエージェントバージョンに存在する 5 つのパラメーター:
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
# エージェント V3.2.0 以降で追加されたパラメーター:
profiler.oss.endpoint=arms-serviceKubernetes 環境での自動インストール
自動インストール済みのエージェントに対して転送プロキシを設定する前に、エージェントを V3.2.0 以降に更新してください。
ステップ 1:現在のエージェント設定の取得
ARMS エージェントがインストールされている Pod にログインし、/home/admin/.opt/ArmsAgent/arms-agent.config の設定ファイルの内容をコピーします。
ステップ 2:ConfigMap の作成
コピーした設定ファイル内で、エンドポイントの値を NGINX プロキシのホスト名に置き換えます。
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service変更後の設定から ConfigMap を作成します。
apiVersion: v1
kind: ConfigMap
metadata:
name: arms-agent-proxy-mode.config
data:
arms-agent.config: |-
### ここに変更後の設定を貼り付けてください。
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service
### ここに変更後の設定を貼り付けてください。ステップ 3:ワークロードの Deployment の更新
Deployment YAML を編集し、ConfigMap のマウントおよびホストエイリアスの追加を行います。カスタマイズが必要な値を強調表示するインラインコメントに注意してください。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-boot-demo
name: spring-boot-demo
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-demo
template:
metadata:
labels:
app: spring-boot-demo
armsPilotAutoEnable: "on"
armsPilotCreateAppName: spring-boot-demo
spec:
hostAliases:
# IP アドレスをご利用の NGINX サーバーの IP アドレスに置き換えてください。
- ip: "192.168.172.171"
hostnames:
- "arms-service"
- "arms-metrics"
- "arms-meta"
- "arms-acm"
# cn-shenzhen をご利用の Alibaba Cloud リージョンコードに置き換えてください。
- "arms-profiling-cn-shenzhen.arms-service"
containers:
- env:
# エージェントがプロキシモードの設定ファイルを参照するよう指定します。
- name: ARMS_CONFIG_FILE
value: /home/admin/.opt/ArmsAgent/arms-agent-proxy-mode.config
image: >-
registry.cn-hangzhou.aliyuncs.com/ahas_apsara_adp/spring-boot-demo:wt-test
imagePullPolicy: Always
name: spring-boot-demo
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 512Mi
volumeMounts:
# プロキシモードの設定をエージェントディレクトリにマウントします。
- mountPath: /home/admin/.opt/ArmsAgent/
name: arms-agent-proxy-mode
imagePullSecrets:
- name: wt-test
volumes:
# ConfigMap をボリュームとしてマッピングします。
- configMap:
name: arms-agent-proxy-mode.config
name: arms-agent-proxy-mode設定の確認
ARMS コンソール にログインします。
左側のナビゲーションウィンドウで、アプリケーションモニタリング > アプリケーションリスト を選択します。
アプリケーションを再起動し、約 2 分待ちます。
アプリケーションリスト ページにアプリケーションが表示され、モニタリングデータが正常に報告されていることを確認します。
トラブルシューティング
2 分経過後もアプリケーションが表示されない場合は、以下の項目を確認してください。
| 症状 | 確認事項 | 確認方法 |
|---|---|---|
| NGINX のログにリクエストが記録されていない | NGINX がエージェントからのデータを受信していない | /var/log/nginx/access.log を確認し、着信リクエストが記録されているかを確認します。空欄の場合、エージェントが NGINX に到達できていません。 |
ping arms-service が NGINX の IP アドレスに解決されない | DNS 解決が正しくない | /etc/hosts のエントリ(手動インストール時)または hostAliases 設定(Kubernetes 時)を確認します。 |
| NGINX がリクエストを受信しているが、ARMS にデータが表示されない | NGINX が ARMS バックエンドに到達できない | NGINX ホストから curl -I http://<trace-endpoint> を実行し、インターネット接続性を確認します。 |
| エージェントは起動するが、接続エラーを報告する | エージェントのエンドポイントパラメーターが不正 | エンドポイントパラメーターが arms-service、arms-metrics、arms-meta、および arms-acm を指しているか確認します。 |