Application Insights には可用性テストの機能があります。 可用性テストの機能をご利用いただく事で、監視対象の Web サイトに対して自動的にリクエストを送信することが可能です。 監視対象の Web サイトからのレスポンスをチェックし、期待したレスポンスが返却されない場合にアラートを通知する事が可能です。
Application Insights のサービスから監視対象の Web サイトに対して定期的にリクエストを送信するため、監視対象の Web サイトはパブリックからの通信を許可いただく必要がございます。 しかし、お客様の環境によってはパブリックからの通信を許可していない可能性がございます。 この場合は、標準の可用性テストがご利用いただけません。
using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Logging; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; using System.Diagnostics;
別途下記のようなビジネス ロジックを実装し、この中で監視対象の Web サイトへアクセスします。 アクセスした結果は、適宜呼び出し元に返却します。 テスト結果が NG の場合は、例外をスローしても良いかもしれません。 例外をスローする場合は、必ず呼び出し元で Catch して Application Insights へ結果を出力しましょう。
1 2 3 4 5 6 7 8
privateasync Task RunAvailabilityTestAsync() { using (var httpClient = new HttpClient()) { // TODO: Replace with your business logic await httpClient.GetStringAsync("https://www.bing.com/"); } }
using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Logging; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; using System.Diagnostics;
privateasync Task RunAvailabilityTestAsync() { using (var httpClient = new HttpClient()) { // TODO: Replace with your business logic await httpClient.GetStringAsync("https://www.bing.com/"); } }
#load "runAvailabilityTest.csx" using System; using System.Diagnostics; using System.Threading.Tasks; using System.Threading; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Extensions.Logging;
privatestatic TelemetryClient telemetryClient;
// ============================================================= // ****************** DO NOT MODIFY THIS FILE ****************** // Business logic must be implemented in RunAvailabilityTestAsync function in runAvailabilityTest.csx // If this file does not exist, please add it first // ============================================================= publicasyncstatic Task Run( TimerInfo myTimer, ILogger log, Microsoft.Azure.WebJobs.ExecutionContext executionContext ) { if (telemetryClient == null) { // Initializing a telemetry configuration for Application Insights based on connection string var telemetryConfiguration = new TelemetryConfiguration(); telemetryConfiguration.ConnectionString = Environment.GetEnvironmentVariable( "APPLICATIONINSIGHTS_CONNECTION_STRING" ); telemetryConfiguration.TelemetryChannel = new InMemoryChannel(); telemetryClient = new TelemetryClient( telemetryConfiguration ); }
string testName = executionContext.FunctionName; string location = Environment.GetEnvironmentVariable( "REGION_NAME" ); var availability = new AvailabilityTelemetry { Name = testName, RunLocation = location, Success = false, };
availability.Context.Operation.ParentId = Activity.Current.SpanId.ToString(); availability.Context.Operation.Id = Activity.Current.RootId; var stopwatch = new Stopwatch(); stopwatch.Start();
try { using (var activity = new Activity( "AvailabilityContext" )) { activity.Start(); availability.Id = Activity.Current.SpanId.ToString(); // Run business logic await RunAvailabilityTestAsync( log ); } availability.Success = true; }