障害調査に備えてオンプレミスと AWS 間のネットワーク監視を行う方法を教えてください

2022.02.14

困っていた内容

オンプレミスから AWS へのリクエストがタイムアウトとなる事象が発生し、アプリのログを確認しましたが、原因は判明しませんでした。再発に備えて、より詳細な調査ができるようにネットワーク監視を検討していますが、良い AWS サービス等はありませんか。
AWSサポートにも連携したいので、推奨されるデータ、取得方法だと嬉しいです。

どう対応すればいいの?

AWSSupport-SetupIPMonitoringFromVPCをお試しください。

AWSSupport-SetupIPMonitoringFromVPCは、Systems Manager Automation の Runbook で、パケットロスやレイテンシー等のネットワーク統計を継続的に収集するソリューションを構築します。

具体的には、指定したサブネットに構築した測定用の EC2 インスタンスから、指定したIPアドレスに対して ping や MTR、traceroute を継続的に実行し、その結果を CloudWatch に保管します。結果はログとして CloudWatch Logs に保管されるほか、CloudWatch メトリクスとして可視化され、画像のような CloudWatch ダッシュボードも作成されます。

収集した結果は、AWSサポートに提供するデータとしても利用できます。

AWSSupport-SetupIPMonitoringFromVPC - AWS Systems Manager Automation runbook reference

The data can also be used when opening a case with AWS Support, to help isolate an issue quickly and reduce time to resolution when investigating a network issue.

ただし、エラーとなったリクエストと必ず同じ通信経路を使用するわけではなく、絶対的な証拠とはならないため、AWSSupport-SetupIPMonitoringFromVPCに依存しない別の手段を併用し評価することを推奨します。

やってみた

事前準備としてサブネットを1つ用意します。
オンプレミス(インターネット)に対して実行する場合は、パブリックサブネットなどネットワーク経路があることを確認します。

AWS Systems Manager コンソール を開き、サイドバーから「自動化」を選択します。その後、「オートメーションの実行」をクリックします。

オートメーションドキュメントからAWSSupport-SetupIPMonitoringFromVPCを検索します。

AWSSupport-SetupIPMonitoringFromVPCを選択し「次へ」をクリックします。

準備したサブネットID、対象のIPアドレス※を指定し「実行」をクリックします。

※複数のIPアドレスを指定する場合は、カンマ(,)で区切ります。

自動的にリソースが作成されるため、しばらく待ちます。

全体的なステータスが「成功」になったことを確認します。

実際の表示

「createCloudWatchDashboard.Output」のURLからダッシュボードにアクセスします。

CloudWatch ダッシュボードが表示され、パケットロスやレンテイシーが確認できます。

CloudWatch Logs

ping や MTRの結果は種類毎に CloudWatch Logs に保管されます。

各ログのサンプル

MTR

HOST: ip-10-0-10-174.ap-northeast Loss%   Snt   Last   Avg  Best  Wrst StDev
 1.|-- ???                        0.0%    30    5.1  10.4   0.8  44.6  12.2
 2.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 3.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 4.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 5.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 6.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 7.|-- 100.65.13.161              0.0%    30    0.8   1.9   0.3  15.7   3.3
 8.|-- 15.230.154.174             0.0%    30    2.6   3.9   2.6  11.2   2.0
 9.|-- 15.230.129.20             13.3%    30    7.2   3.7   2.7   7.2   1.0
10.|-- 52.95.31.60                0.0%    30    2.5   3.9   2.5  15.6   3.0
11.|-- 100.91.149.6               0.0%    30   11.7   5.1   3.7  16.8   2.8
12.|-- 100.91.3.217               0.0%    30    3.6   4.6   3.5  17.1   2.6
13.|-- 100.91.147.129             0.0%    30    7.4   4.5   3.4  17.6   2.7
14.|-- 150.222.90.6              53.3%    30    3.2   3.6   3.0   6.3   1.1
15.|-- 52.93.251.240              0.0%    30    5.2   6.2   2.3  43.8   8.8
16.|-- 99.83.91.91                0.0%    30   13.4   5.3   3.0  17.0   4.0
17.|-- 172.70.120.2               0.0%    30   54.6  14.0   2.6  70.8  19.9
18.|-- 1.1.1.1                    0.0%    30    2.6   2.6   2.5   2.9   0.1

ping

--- 1.1.1.1 ping statistics ---
30 packets transmitted, 30 received, 0 packet loss, time 28988ms
rtt min avg max mdev = 2.570 2.673 2.967 0.108 ms

tracepath

 ?: [LOCALHOST]     pmtu 9001
 1:  10.0.10.1       5.765ms pmtu 1500
 1:  no reply
 2:  no reply
 3:  no reply
 4:  no reply
 5:  no reply
 6:  no reply
 7:  100.65.12.193   5.366ms asymm  8 
 8:  15.230.154.186  2.570ms asymm 14 
 9:  15.230.129.20   3.364ms asymm 14 
10:  52.95.31.64     2.538ms asymm 13 
11:  100.91.137.134  3.309ms asymm 18 
12:  150.222.241.93  9.903ms asymm 17 
13:  100.91.135.163  4.698ms asymm 16 
14:  150.222.90.66   5.837ms asymm 19 
15:  52.93.251.244   6.503ms asymm 18 
16:  no reply
17:  no reply
18:  no reply
19:  no reply
20:  no reply
21:  no reply
22:  no reply
23:  no reply
24:  no reply
25:  no reply
26:  no reply
27:  no reply
28:  no reply
29:  no reply
30:  no reply
Resume: pmtu 1500

traceroute

traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  * *
 2  * *
 3  * *
 4  * *
 5  * *
 6  * *
 7  100.65.12.33 [*]  1.211 ms  1.222 ms
 8  15.230.154.184 [AS2588/AS25886/AS15695/AS25951/AS33383/AS7545/AS24130]  1.268 ms 15.230.154.170 [AS2588/AS25886/AS15695/AS25951/AS33383/AS7545/AS24130]  4.648 ms
 9  15.230.129.26 [AS2588/AS25886/AS15695/AS25951/AS33383/AS7545/AS24130]  3.043 ms  3.167 ms
10  15.230.160.44 [AS2588/AS25886/AS15695/AS25951/AS33383/AS7545/AS24130]  2.648 ms 52.93.72.114 [AS16509]  0.425 ms
11  100.91.137.118 [*]  5.324 ms 100.91.137.198 [*]  9.731 ms
12  150.222.240.239 [AS16509]  7.914 ms 150.222.242.0 [AS16509]  5.714 ms
13  100.91.147.35 [*]  4.318 ms 100.91.135.177 [*]  2.139 ms
14  52.93.66.60 [AS16509]  1.548 ms 52.95.30.53 [AS14618/AS16509]  16.777 ms
15  150.222.77.134 [AS16509]  2.491 ms 52.93.251.244 [AS16509]  2.733 ms
16  99.83.91.91 [*]  3.098 ms 99.83.91.103 [*]  3.201 ms
17  172.68.116.4 [AS13335]  2.938 ms 103.22.201.36 [AS13335]  3.659 ms
18  1.1.1.1 [AS13335]  2.543 ms  2.629 ms

リソースの削除

不要になった場合は、CloudWatch ダッシュボードの「Terminate test」からAWSSupport-TerminateIPMonitoringFromVPC Runbook を実行します。

※EC2 インスタンス等は削除されますが CloudWatch Logs に保管されたログは保存期間(デフォルト7日)までは保持されます。

「実行」をクリックします。

自動的にリソースが作成され、全体的なステータスが「成功」になったことを確認します。

参考資料