アプリを使用してログをレビューする

完了

Azure App Service では、他の Azure リソースと同じ種類の監視データが収集されます。 これらのメトリックとログは、App Service と統合された Azure Monitor の一部として提供されます。

A conceptual diagram displays Azure Monitor metrics and logging.

監視

Azure Monitor には、アプリを監視するために使用できるいくつかのデータと機能のセットが用意されています。

  • プラットフォーム メトリックとアクティビティ ログ: これらのメトリックとログは "自動的に" 収集されて格納されます。 診断設定を使用することで、他の場所にルーティングできます。

  • リソース ログ: これらのログは "自動的に収集" および格納されません。 診断設定を作成して 1 つ以上の場所にルーティングする必要があります。

  • アラート: 監視データで重要な状態が見つかると事前に通知します。 これらを使用して、ユーザーが気付く前に、管理者が問題を識別して対処できます。

    Azure Monitor から App Service でアプリケーションを実行している場合は、Azure Application Insights によってより多くの種類のアラートが提供されます。

    アラートの種類 条件
    メトリック 平均接続数 多数の接続が設定値を超えた場合
    メトリック HTTP 404 HTTP 404 応答が設定値を超えた場合
    メトリック HTTP サーバー エラー数 HTTP 5xx エラーが設定値を超えた場合
    アクティビティ ログ Web アプリの作成または更新 アプリが作成または更新されたとき
    アクティビティ ログ Web アプリの削除 アプリが削除されたとき
    アクティビティ ログ Web アプリの再起動 アプリが再起動されたとき
    アクティビティ ログ Web アプリを停止する アプリが停止されたとき
  • クォータ: CPU、メモリ、帯域幅、ファイル システム ストレージなど、アプリで使用できるリソースに制限を設定します。 アプリが価格レベルのクォータを超えると、App Service では 403 エラーを返し、アプリを一時的に停止するか、その他のエラーを報告します。

クォータを引き上げたりアプリから削除したりするには、App Service プランをアップグレードしてください。 アプリに影響を与えるさまざまなクォータとメトリックの状態を確認するには、Azure portal で App Service のクォータを確認します。

App Service ランタイム ログ

App Service には、実行時の問題の解決に役立つログ ファイルが格納されます。

ログのタイプ 目的
デプロイ、インストール、および起動 このログは _docker.log で終わり、デプロイとコンテナーの起動の問題をデバッグする方法です。 すべてのアプリは、App Service 上のコンテナーで実行されます。 ランタイムを選択すると、そのランタイムを含むコンテナーが提供されます。
Web アプリの実行 このログは _default_docker.log で終わり、実行中の Web アプリがログに提供するすべての情報が含まれます。

ログは、指定されたファイル サイズの制限を超えて拡張される可能性があります。 プロセスを使用して、より多くの領域を持つサービスにファイルをオフロードできます。 ホストでログをオフにすることもできます。

一般的な npm ログ モジュールの中には、エラーと情報をログできるものもあります。 ログで Application Insights またはその他のログ サービスを使用するためのインフラストラクチャを提供します。 この方法では、一般的なログ パッケージを使用し、データを Azure で自動的に管理できます。

Application Insights のカスタム ログ

Application Insights は Azure Monitor の一部です。 App Service と直接統合され、監視とメトリックを提供します。

Application Insights では、npm パッケージ applicationinsights が提供されます。 Express.js アプリと統合して、より多くのログを行うことができます。 カスタム トレースをログするには、.traceTrace() メソッドを使用します。

let appInsights = require("applicationinsights");
appInsights.setup("YOUR-INSTRUMENTATION-KEY")
    .setAutoDependencyCorrelation(true)
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(true, true)
    .setAutoCollectExceptions(true)
    .setAutoCollectDependencies(true)
    .setAutoCollectConsole(true, false)
    .setUseDiskRetryCaching(true)
    .setAutoCollectPreAggregatedMetrics(true)
    .setSendLiveMetrics(false)
    .setAutoCollectHeartbeat(false)
    .setInternalLogging(false, true)
    .setDistributedTracingMode(appInsights.DistributedTracingModes.AI_AND_W3C)
    .start();

let client = appInsights.defaultClient;
client.trackEvent({name: "my custom event", properties: {customProperty: "custom property value"}});
client.trackException({exception: new Error("handled exceptions can be logged with this method")});
client.trackMetric({name: "custom metric", value: 3});
client.trackTrace({message: "trace message"});
client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL"});
client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});