概要
- AppServiceを立てた
- スロット作った
- スロットのswapしてみた
- 片方のスロットだけ動かなくなった
- 絶望
詳細な構成
アプリケーション
アプリケーションの詳細な構成
- ASP .NET Core 3.1.0
- Entity Framework Core 3.1.0
- ASP .NET Core Identity Entity Framework 3.1.0
- Pomelo Entity Framework Core 3.1.0
- DBへの接続文字列はappsettings.jsonに記載
namespace Web
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// 中略
services.AddDbContextPool<HogeDbContext>(options =>
{
options.UseMySql(Configuration.GetConnectionString("Database"), builder =>
{
builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
});
options.UseLazyLoadingProxies();
}, poolSize: 50);
// 中略
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment() || env.IsStaging())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSession();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
// 中略
});
}
}
}
Azure AppService
App Serviceの詳細な設定
- App Service プラン
- S1:1(Windows)
- 構成
- アプリケーション設定
- ASPNETCORE_ENVIRONMENT
- Staging
- デプロイスロットの設定
- WEBSITE_TIME_ZONE
- Tokyo Standard Time
- デプロイスロットの設定
- DIAGNOSTICS_AZUREBLOBCONTAINERSASURL
- 診断設定で自動的に設定された値
- デプロイスロットの設定
- DIAGNOSTICS_AZUREBLOBRETENTIONINDAYS
- 診断設定で自動的に設定された値
- デプロイスロットの設定
- ASPNETCORE_ENVIRONMENT
- 全般設定
- スタック
- .NET Core
- プラットフォーム
- 32Bit
- マネージドパイプラインバージョン
- 統合
- FTPの状態
- 無効
- HTTPバージョン
- 2.0
- Webソケット
- オフ
- 常時接続
- オン
- ARRアフィニティ
- オフ
- リモートデバッグ
- オフ
- 着信証明書が必要です
- オフ
- スタック
- ネットワーク
- VNet 統合
- ほげVNetのふがSubnet
- VNet 統合
- アプリケーション設定
- デプロイスロット
- 構成
- アプリケーション設定
- ASPNETCORE_ENVIRONMENT
- Staging
- デプロイスロットの設定
- WEBSITE_TIME_ZONE
- Tokyo Standard Time
- デプロイスロットの設定
- ASPNETCORE_ENVIRONMENT
- アプリケーション設定
- 全般設定
- スタック
- .NET Core
- プラットフォーム
- 32Bit
- マネージドパイプラインバージョン
- 統合
- FTPの状態
- 無効
- HTTPバージョン
- 2.0
- Webソケット
- オフ
- 常時接続
- オン
- ARRアフィニティ
- オフ
- リモートデバッグ
- オフ
- 自動スワップが有効
- オフ
- 着信証明書が必要です
- オフ
- スタック
- ネットワーク
- VNet 統合
- ほげVNetのふがSubnet
- VNet 統合
- 構成
Azure Database for MySQL
Azure Database for MySQLの詳細
- パフォーマンス構成
- 汎用目的、2 個の仮想コア、50 GB
- 接続のセキュリティ
- Azureサービスへのアクセスを許可
- オフ
- ほげVNetのふがSubnetが取れる範囲のIPアドレス全許可
- VNETルール
- ほげVNetのふがSubnet追加
- Azureサービスへのアクセスを許可
- サーバーパラメーター
- max_connections
- 600
- max_user_connections
- 0
- max_connections
やったこと
- Azure DevOpsのPipelineにてビルドしてデプロイスロットにリリース
- デプロイスロットで動くことを確認
- Azure DevOpsのPipelineにてデプロイスロットをSwap
- 運用スロットで動くことを確認
- デプロイスロットがデフォルトページになっていることを確認
- Azure DevOpsのPipelineにてデプロイスロットにリリース
- 運用スロット、デプロイスロットの両方で動いていることを確認
- 何度かデプロイ、Swapを実行して双方のスロットが動いていることを確認
- 数日後にSwap
- 運用スロットだけ動かない
現象
MySQLにうまくつなげない模様
Stack trace
An unhandled exception occurred while processing the request.
OperationCanceledException: The operation was canceled.
System.Threading.CancellationToken.ThrowOperationCanceledException()
MySqlException: Connect Timeout expired. All pooled connections are in use.
MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs, line 670
RetryLimitExceededException: Maximum number of retries (5) exceeded while executing database operations with 'MySqlRetryingExecutionStrategy'. See inner exception for the most recent failure.
Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync<TState, TResult>(Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, TState state, CancellationToken cancellationToken)
OperationCanceledException: The operation was canceled.
System.Threading.CancellationToken.ThrowOperationCanceledException()
System.Threading.SemaphoreSlim.WaitUntilCountOrTimeoutAsync(TaskNode asyncWaiter, int millisecondsTimeout, CancellationToken cancellationToken)
MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, IOBehavior ioBehavior, CancellationToken cancellationToken) in ConnectionPool.cs
MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs
MySqlException: Connect Timeout expired. All pooled connections are in use.
MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs
MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs
Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(bool errorsExpected, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(bool errorsExpected, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, bool errorsExpected)
Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.OpenAsync(CancellationToken cancellationToken, bool errorsExpected)
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable<T>+AsyncEnumerator.InitializeReaderAsync(DbContext _, bool result, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync<TState, TResult>(Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, TState state, CancellationToken cancellationToken)
原因調査
DBの接続設定が間違っていないか調査
運用スロットとデプロイスロットのConnectionStringsが間違っていないか、他のを読んでいないかと指摘を受けたので、一応念のために検証しました。
- 両スロットの構成 -> アプリケーション設定 -> 接続文字列 にConnectionStringsを直接書く
- それぞれのスロットにアクセスする
- なぜか運用スロットが正常にうごいてデプロイスロットで上記エラーが出るようになる
- 運用スロットとデプロイスロットでDBへログインするユーザーを別々で設定する
- 手元の端末からDBに直接アクセスし
show processlist;
してみる - 運用スロットとデプロイスロットのユーザーがアクセスしていることが分かった
- エラーを吐いているデプロイスロットのユーザーが大量にコネクションを張っていることも分かった(しかもすべてのInfoがnull)
接続情報が間違っているわけではなさそう
DBの設定が間違っていないか調査
DBの設定が怪しかったのでもう1台DBを立てて検証した
- 運用スロットのDB接続先が運用DBであることを確認
- デプロイスロットのDB接続先を新規で作成したデプロイ用DBに設定
- 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認
- 手元の端末からそれぞれのDBに直接アクセスし、それぞれのDBにそれぞれのスロットからアクセスがあることを確認
- 運用スロットのDB接続先をデプロイ用DBに設定
- デプロイスロットのDB接続先を運用DBに設定
- 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認
DBの設定が悪ければ、DB接続先を入れ替えた時にエラーが発生するスロットも変わるはずなのでこれでもなさそう
デプロイしているソースコードに差分が無いか調査
同じコードで検証しているつもりになっている可能性があるので次の手順で検証
- AppServiceのポータルからスロットスワップを実施
- 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認
- もう一度スロットスワップを実施
- 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認
Swapしているので同じソースコードで検証しているためこれでもなさそう
VMにMySQLを立ててクエリログを引っ張ってみる(2020/01/23追記)
MySQLがどのような挙動をしているのか調査するためにVM上にMySQLを立て、問題の発生しているスロットのDB接続先をVM上のMySQLにしてみた
- VMにMySQLを立てる
- デプロイスロットが接続できない状態なのでデプロイスロットのDB接続先をVMのMySQLに変更
- MySQLのクエリログを取ってみる
2020-01-23T12:18:17.471261Z 9 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:18.164572Z 9 Query SET NAMES utf8mb4
2020-01-23T12:18:18.480101Z 9 Query SELECT `t`.`id`, クエリ以下略
2020-01-23T12:18:19.899904Z 9 Query SET NAMES utf8mb4
2020-01-23T12:18:19.911427Z 10 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911476Z 11 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911438Z 12 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911739Z 13 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911760Z 14 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911920Z 16 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911968Z 15 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.912109Z 17 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.912271Z 18 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919228Z 18 Query SET NAMES utf8mb4
2020-01-23T12:18:19.919255Z 19 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919398Z 20 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919423Z 21 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919596Z 22 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919645Z 23 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920017Z 24 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920060Z 26 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920221Z 27 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920275Z 32 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920222Z 25 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920420Z 28 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920648Z 30 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921293Z 33 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921330Z 29 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921303Z 31 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921408Z 34 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.929648Z 35 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.959218Z 71 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.148043Z 36 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247394Z 39 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247494Z 37 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247727Z 40 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247758Z 38 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247727Z 41 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248091Z 43 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248181Z 42 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248314Z 45 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248395Z 44 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248689Z 46 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248729Z 47 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248955Z 49 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.249378Z 51 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.249384Z 48 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.250856Z 53 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.255575Z 53 Query SET NAMES utf8mb4
2020-01-23T12:18:20.255709Z 50 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256024Z 55 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256033Z 54 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256200Z 52 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256237Z 57 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256502Z 59 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256507Z 58 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256706Z 56 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256816Z 61 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256831Z 60 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257239Z 62 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257445Z 63 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257579Z 64 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257865Z 65 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257906Z 66 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.258184Z 67 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.258329Z 68 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.258603Z 69 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.317143Z 70 Connect hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.318519Z 9 Query SELECT `t`.`id`, クエリ以下略
2020-01-23T12:18:20.327938Z 13 Query SET NAMES utf8mb4
2020-01-23T12:18:20.327977Z 14 Query SET NAMES utf8mb4
2020-01-23T12:18:20.327945Z 11 Query SET NAMES utf8mb4
2020-01-23T12:18:20.328082Z 12 Query SET NAMES utf8mb4
2020-01-23T12:18:20.328049Z 10 Query SET NAMES utf8mb4
2020-01-23T12:18:20.328242Z 16 Query SET NAMES utf8mb4
2020-01-23T12:18:20.328251Z 15 Query SET NAMES utf8mb4
2020-01-23T12:18:20.328370Z 17 Query SET NAMES utf8mb4
2020-01-23T12:18:20.328480Z 19 Query SET NAMES utf8mb4
なんかすごい接続しにきている・・・
show processlist;
を実行してみた結果
+-----+----------------------+----------------------------------------------+--------------------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+----------------------+----------------------------------------------+--------------------+---------+------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 617 | Waiting on empty queue | NULL |
| 133 | hoge | 122-223-58-229.aichi.fdn.vectant.ne.jp:31353 | NULL | Query | 0 | starting | show processlist |
| 134 | hoge | 23.100.98.124:22084 | hoge_production | Sleep | 1 | | NULL |
| 135 | unauthenticated user | 23.100.98.124:22080 | NULL | Connect | 2 | Receiving from client | NULL |
| 136 | unauthenticated user | 23.100.98.124:22081 | NULL | Connect | 2 | Receiving from client | NULL |
| 137 | unauthenticated user | 23.100.98.124:22083 | NULL | Connect | 2 | Receiving from client | NULL |
| 138 | unauthenticated user | 23.100.98.124:30912 | NULL | Connect | 2 | Receiving from client | NULL |
| 139 | unauthenticated user | 23.100.98.124:30913 | NULL | Connect | 2 | Receiving from client | NULL |
| 140 | unauthenticated user | 23.100.98.124:22085 | NULL | Connect | 2 | Receiving from client | NULL |
| 141 | unauthenticated user | 23.100.98.124:22086 | NULL | Connect | 2 | Receiving from client | NULL |
| 142 | unauthenticated user | 23.100.98.124:22087 | NULL | Connect | 2 | Receiving from client | NULL |
| 143 | unauthenticated user | 23.100.98.124:22088 | NULL | Connect | 2 | Receiving from client | NULL |
| 144 | unauthenticated user | 23.100.98.124:22089 | NULL | Connect | 2 | Receiving from client | NULL |
| 145 | unauthenticated user | 23.100.98.124:22090 | NULL | Connect | 2 | Receiving from client | NULL |
| 146 | unauthenticated user | 23.100.98.124:22091 | NULL | Connect | 2 | Receiving from client | NULL |
| 147 | unauthenticated user | 23.100.98.124:22092 | NULL | Connect | 2 | Receiving from client | NULL |
| 148 | unauthenticated user | 23.100.98.124:22094 | NULL | Connect | 2 | Receiving from client | NULL |
| 149 | unauthenticated user | 23.100.98.124:22103 | NULL | Connect | 2 | Receiving from client | NULL |
| 150 | unauthenticated user | 23.100.98.124:22104 | NULL | Connect | 2 | Receiving from client | NULL |
| 151 | unauthenticated user | 23.100.98.124:22105 | NULL | Connect | 2 | Receiving from client | NULL |
| 152 | unauthenticated user | 23.100.98.124:22106 | NULL | Connect | 2 | Receiving from client | NULL |
| 153 | unauthenticated user | 23.100.98.124:22107 | NULL | Connect | 2 | Receiving from client | NULL |
| 154 | unauthenticated user | 23.100.98.124:22108 | NULL | Connect | 2 | Receiving from client | NULL |
| 155 | unauthenticated user | 23.100.98.124:22109 | NULL | Connect | 2 | Receiving from client | NULL |
| 156 | unauthenticated user | 23.100.98.124:22110 | NULL | Connect | 2 | Receiving from client | NULL |
| 157 | unauthenticated user | 23.100.98.124:22111 | NULL | Connect | 2 | Receiving from client | NULL |
| 158 | unauthenticated user | 23.100.98.124:22112 | NULL | Connect | 2 | Receiving from client | NULL |
| 159 | unauthenticated user | 23.100.98.124:22113 | NULL | Connect | 2 | Receiving from client | NULL |
| 160 | unauthenticated user | 23.100.98.124:22114 | NULL | Connect | 2 | Receiving from client | NULL |
| 161 | unauthenticated user | 23.100.98.124:22115 | NULL | Connect | 2 | Receiving from client | NULL |
| 162 | unauthenticated user | 23.100.98.124:22116 | NULL | Connect | 2 | Receiving from client | NULL |
| 163 | unauthenticated user | 23.100.98.124:22117 | NULL | Connect | 2 | Receiving from client | NULL |
| 164 | unauthenticated user | 23.100.98.124:22118 | NULL | Connect | 2 | Receiving from client | NULL |
| 165 | unauthenticated user | 23.100.98.124:22119 | NULL | Connect | 2 | Receiving from client | NULL |
| 166 | unauthenticated user | 23.100.98.124:22120 | NULL | Connect | 2 | Receiving from client | NULL |
| 167 | unauthenticated user | 23.100.98.124:22121 | NULL | Connect | 2 | Receiving from client | NULL |
| 168 | unauthenticated user | 23.100.98.124:22122 | NULL | Connect | 2 | Receiving from client | NULL |
| 169 | unauthenticated user | 23.100.98.124:22123 | NULL | Connect | 2 | Receiving from client | NULL |
| 170 | unauthenticated user | 23.100.98.124:22124 | NULL | Connect | 2 | Receiving from client | NULL |
| 171 | unauthenticated user | 23.100.98.124:22125 | NULL | Connect | 2 | Receiving from client | NULL |
| 172 | unauthenticated user | 23.100.98.124:22126 | NULL | Connect | 2 | Receiving from client | NULL |
| 173 | unauthenticated user | 23.100.98.124:22127 | NULL | Connect | 2 | Receiving from client | NULL |
| 174 | unauthenticated user | 23.100.98.124:22128 | NULL | Connect | 2 | Receiving from client | NULL |
| 175 | unauthenticated user | 23.100.98.124:22129 | NULL | Connect | 2 | Receiving from client | NULL |
| 176 | unauthenticated user | 23.100.98.124:22130 | NULL | Connect | 2 | Receiving from client | NULL |
| 177 | unauthenticated user | 23.100.98.124:22131 | NULL | Connect | 2 | Receiving from client | NULL |
| 178 | unauthenticated user | 23.100.98.124:22132 | NULL | Connect | 2 | Receiving from client | NULL |
| 179 | unauthenticated user | 23.100.98.124:22133 | NULL | Connect | 2 | Receiving from client | NULL |
| 180 | unauthenticated user | 23.100.98.124:22134 | NULL | Connect | 2 | Receiving from client | NULL |
| 181 | unauthenticated user | 23.100.98.124:22135 | NULL | Connect | 2 | Receiving from client | NULL |
| 182 | unauthenticated user | 23.100.98.124:22136 | NULL | Connect | 2 | Receiving from client | NULL |
| 183 | unauthenticated user | 23.100.98.124:22137 | NULL | Connect | 2 | Receiving from client | NULL |
| 184 | unauthenticated user | 23.100.98.124:22138 | NULL | Connect | 2 | Receiving from client | NULL |
| 185 | unauthenticated user | 23.100.98.124:22139 | NULL | Connect | 2 | Receiving from client | NULL |
| 186 | unauthenticated user | 23.100.98.124:22140 | NULL | Connect | 2 | Receiving from client | NULL |
| 187 | unauthenticated user | 23.100.98.124:22141 | NULL | Connect | 2 | Receiving from client | NULL |
| 188 | unauthenticated user | 23.100.98.124:22142 | NULL | Connect | 2 | Receiving from client | NULL |
| 189 | unauthenticated user | 23.100.98.124:30914 | NULL | Connect | 2 | Receiving from client | NULL |
| 190 | unauthenticated user | 23.100.98.124:22143 | NULL | Connect | 2 | Receiving from client | NULL |
| 191 | unauthenticated user | 23.100.98.124:30915 | NULL | Connect | 2 | Receiving from client | NULL |
| 192 | unauthenticated user | 23.100.98.124:30916 | NULL | Connect | 2 | login | NULL |
| 193 | unauthenticated user | 23.100.98.124:30917 | NULL | Connect | 2 | login | NULL |
| 194 | unauthenticated user | 23.100.98.124:30918 | NULL | Connect | 2 | login | NULL |
| 195 | unauthenticated user | 23.100.98.124:30919 | NULL | Connect | 2 | login | NULL |
| 196 | unauthenticated user | 23.100.98.124:30920 | NULL | Connect | 2 | login | NULL |
| 197 | unauthenticated user | 23.100.98.124:30921 | NULL | Connect | 2 | login | NULL |
| 198 | unauthenticated user | 23.100.98.124:30922 | NULL | Connect | 2 | login | NULL |
| 199 | unauthenticated user | 23.100.98.124:30923 | NULL | Connect | 2 | login | NULL |
| 200 | unauthenticated user | 23.100.98.124:30924 | NULL | Connect | 2 | login | NULL |
| 201 | unauthenticated user | 23.100.98.124:30925 | NULL | Connect | 2 | login | NULL |
| 202 | unauthenticated user | 23.100.98.124:30926 | NULL | Connect | 2 | login | NULL |
| 203 | unauthenticated user | 23.100.98.124:30927 | NULL | Connect | 2 | login | NULL |
| 204 | unauthenticated user | 23.100.98.124:30928 | NULL | Connect | 2 | login | NULL |
| 205 | unauthenticated user | 23.100.98.124:30929 | NULL | Connect | 2 | login | NULL |
| 206 | unauthenticated user | 23.100.98.124:30930 | NULL | Connect | 2 | login | NULL |
| 207 | unauthenticated user | 23.100.98.124:30931 | NULL | Connect | 2 | login | NULL |
| 208 | unauthenticated user | 23.100.98.124:30932 | NULL | Connect | 2 | login | NULL |
| 209 | unauthenticated user | 23.100.98.124:30933 | NULL | Connect | 2 | login | NULL |
| 210 | unauthenticated user | 23.100.98.124:30934 | NULL | Connect | 2 | login | NULL |
| 211 | unauthenticated user | 23.100.98.124:30935 | NULL | Connect | 2 | login | NULL |
| 212 | unauthenticated user | 23.100.98.124:30936 | NULL | Connect | 2 | login | NULL |
| 213 | unauthenticated user | 23.100.98.124:30937 | NULL | Connect | 2 | login | NULL |
| 214 | unauthenticated user | 23.100.98.124:30938 | NULL | Connect | 2 | login | NULL |
| 215 | unauthenticated user | 23.100.98.124:30939 | NULL | Connect | 2 | login | NULL |
| 216 | unauthenticated user | 23.100.98.124:30940 | NULL | Connect | 2 | login | NULL |
| 217 | unauthenticated user | 23.100.98.124:30941 | NULL | Connect | 2 | login | NULL |
| 218 | unauthenticated user | 23.100.98.124:30942 | NULL | Connect | 2 | login | NULL |
| 219 | unauthenticated user | 23.100.98.124:30944 | NULL | Connect | 2 | login | NULL |
| 220 | unauthenticated user | 23.100.98.124:30945 | NULL | Connect | 2 | login | NULL |
| 221 | unauthenticated user | 23.100.98.124:30946 | NULL | Connect | 2 | login | NULL |
| 222 | unauthenticated user | 23.100.98.124:30947 | NULL | Connect | 2 | login | NULL |
| 223 | unauthenticated user | 23.100.98.124:30948 | NULL | Connect | 2 | login | NULL |
| 224 | unauthenticated user | 23.100.98.124:30949 | NULL | Connect | 2 | login | NULL |
| 225 | unauthenticated user | 23.100.98.124:30951 | NULL | Connect | 2 | login | NULL |
| 226 | unauthenticated user | 23.100.98.124:30952 | NULL | Connect | 2 | login | NULL |
| 227 | unauthenticated user | 23.100.98.124:30950 | NULL | Connect | 2 | login | NULL |
| 228 | unauthenticated user | 23.100.98.124:30953 | NULL | Connect | 2 | login | NULL |
| 229 | unauthenticated user | 23.100.98.124:30954 | NULL | Connect | 2 | login | NULL |
| 230 | unauthenticated user | 23.100.98.124:30955 | NULL | Connect | 2 | login | NULL |
| 231 | unauthenticated user | 23.100.98.124:30956 | NULL | Connect | 2 | login | NULL |
| 232 | unauthenticated user | 23.100.98.124:30957 | NULL | Connect | 2 | login | NULL |
| 233 | unauthenticated user | 23.100.98.124:30958 | NULL | Connect | 2 | login | NULL |
+-----+----------------------+----------------------------------------------+--------------------+---------+------+------------------------+------------------+
102 rows in set (0.05 sec)
めっちゃ接続しに来ている・・・
まるでF5アタックを受けているかのようにすごい勢いでアクセスされています。
どうやらこれによってコネクションが張れなくなりエラーで落ちているようです。
連打しているわけではなく、IP制限などもかけて私しか触れない状態にしているのでアクセス過多というわけではないので本当に謎です。
(2020/01/23追記おわり)
AppServiceのVNet統合をはずしてみる(2020/01/24追記)
特定のスロットから大量にアクセスされているためどこかのネットワークがループしているのではないかと考え、VNet統合をやめてみた。
- 運用スロットのVNet統合を切断する
- デプロイスロットのVNet統合を切断する
- Azure Database for MySQLのアクセス制限にAppServiceの送信IPアドレスを追加する
動いた!
ような気がしたけどスロットスワップしたら同じ状況になったので気のせいでした。
ヘルスチェックのパスを変える
アクセスしているのは私しかいないため、あとのアクセスするやつといえばヘルスチェック。
FrontDoorとkuduのヘルスチェック先をDBアクセスが発生しない軽量ページに変更してみる。
- Azure FrontDoorのバックエンドプールのヘルスチェックパスを軽量ページに変更する
- AppServiceのヘルスチェックパスを軽量ページに変更する
動いた!
スロットスワップしても動いてる!
結論
ヘルスチェックでDBアクセスが発生するページを指定するのは微妙?
スロットスワップを行うと大量のアクセスが発生するようで原因はMicrosoftに問い合わせ中