Azure App Service 上で動作しているアプリケーションでは、断続的な接続問題によりターゲットサービスへの接続時にエラーが発生することがあります。その問題を特定するためにコードを変更してデプロイするのは手間がかかります。App Service Kudu サイトを使用すれば迅速にテストを行うことができ、その場合コードを変更する必要はありません。
Linux
Kudu サイト(例 : https://<appname>.scm.azurewebsites.net)にログインし、SSH メニューへ移動すると SSH Shell を確認できます。カスタムイメージを使用している場合は、次のドキュメントに従ってSSHを有効にする必要があります:Azure App Service のカスタム コンテナーを構成する
nslookup
nslookup は通常、Linux Kudu イメージに既にインストールされており、FQDN が正しい IP アドレスに解決されているかを確認することができます。 以下では、login.microsoftonline.com に DNS 解決を行っていますが、任意のアドレスに変更することができます。
# nslookup command to test DNS resolution for login.microsoftonline.com, you could change it to other destination nslookup login.microsoftonline.com Server: 127.0.0.11 Address: 127.0.0.11#53
fqdn=$1# get the first parameter max=$2# get the second parameter for ((i = 0 ; i < max ; i++ )); do now=$(date +"%Y-%m-%d %T") echo"$now Progress $i / $max"# show the progress nslookup $fqdn# execute the command sleep 1 # sleep 1 second done
fqdn=$1# get the first parameter max=$2# get the second parameter for ((i = 0 ; i < max ; i++ )); do now=$(date +"%Y-%m-%d %T") echo"$now Progress $i / $max"# show the progress dig $fqdn# execute the command sleep 1 # sleep 1 second done
import sys import socket import time import datetime
fqdn = sys.argv[1] total = int(sys.argv[2])
defget_ipv4_by_hostname(hostname): # see `man getent` `/ hosts ` # see `man getaddrinfo`
returnlist( i # raw socket structure [4] # internet protocol info [0] # address for i in socket.getaddrinfo( hostname, 0# port, required ) if i[0] is socket.AddressFamily.AF_INET # ipv4
# ignore duplicate addresses with other socket types and i[1] is socket.SocketKind.SOCK_RAW ) for i inrange(0, total): now = datetime.datetime.now() print(str(now) + " testing " + fqdn) print(get_ipv4_by_hostname(fqdn)) time.sleep(1)
apt-get update apt-get install bc apt-get install tcptraceroute cd /usr/bin wget http://www.vdberg.org/~richard/tcpping chmod 755 tcpping
以下のコマンドで接続をテストします。
1 2 3 4 5 6 7 8 9 10
tcpping login.microsoftonline.com 443 # 以下のようなレスポンスが確認できます。 seq 0: tcp response from 20.190.144.161 [open] 67.911 ms seq 1: tcp response from 20.190.163.20 [open] 2.130 ms seq 2: tcp response from 20.190.144.161 [open] 70.361 ms seq 3: tcp response from 20.190.144.137 [open] 68.137 ms seq 4: tcp response from 20.190.148.163 [open] 69.158 ms seq 5: tcp response from 40.126.35.19 [open] 1.443 ms seq 6: tcp response from 20.190.148.162 [open] 69.235 ms seq 7: tcp response from 20.190.144.139 [open] 69.703 ms
fqdn=$1# get the fqdn parameter port=$2# get the port parameter max=$3# get the loop count
for ((i = 0 ; i < max ; i++ )); do now=$(date +"%Y-%m-%d %T") echo"$now Progress $i / $max"# show the progress curl -v $fqdn$port# execute the command sleep 1 # sleep 1 second done
# 応答例 tcpping login.microsoftonline.com:443 Connected to login.microsoftonline.com:443, time taken: 139ms Connected to login.microsoftonline.com:443, time taken: 74ms Connected to login.microsoftonline.com:443, time taken: 62ms Connected to login.microsoftonline.com:443, time taken: 78ms Complete: 4/4 successful attempts (100%). Average success time: 88.25ms
# 失敗応答例1 tcpping xxxxxxxxxx.redis.cache.windows.net:6380 Connection attempt failed: No such host is known Connection attempt failed: No such host is known Connection attempt failed: No such host is known Connection attempt failed: No such host is known Complete: 0/4 successful attempts (0%). Average success time: 0ms