App Service on Linux におけるログ出力について
はじめに
お世話になっております。App Service サポート担当の押田です。
本記事では App Service on Linux において取得可能なログについて記載します。
App Service on Linux におけるログの種類
App Service on Linux のファイルシステムにおいて、標準では大きく分けて以下のログが存在します。
- コンテナ操作に関するプラットフォームのログ
- アプリケーションコンテナからの標準出力/標準エラー
- デプロイに関するログ
- アプリケーションコンテナ内でファイルとして作成されるログ
1. アプリケーションコンテナ操作に関するプラットフォームのログ
イメージの Pull やコンテナの起動などに関するログを指します。コンテナ起動失敗などのトラブルシューティングにて主に利用するログとなります。
2.アプリケーションコンテナからの標準出力/標準エラー
コンテナ起動時のスクリプト(Docker EntryPoint で指定されたシェル)からの出力、スタートアップコマンドで実行するスクリプトからの出力、お客様のアプリケーションそのものや、利用するWebフレームワークからの出力、などが主に含まれます。コンテナの起動失敗やコンテナクラッシュなどのトラブルシューティングにて主に利用するログとなります。
3.デプロイに関するログ
ここでは Zip デプロイなどアプリケーションコードをデプロイしたときの Kudu のログを指します。デプロイエラーのトラブルシューティングにて主に利用するログとなります。Azure リソースとしてデプロイについてはこの記事では言及しません。
4.アプリケーションコンテナ内でファイルとして作成されるログ
/var/log
配下に出力されるような各種ログや、アプリケーションが独自のロガーを用いてファイルに出力しているログ等が含まれます。
出力先としては、$home
配下、BYOS でマウントしたボリューム、/var/log
などコンテナ内に限られた領域があります。
$home
配下については、Kudu から確認することはできますが、それ以外については、App Service のプラットフォームの機能で参照することはできず、コンテナに SSH 接続して確認する必要があります。
アプリケーションが正常に動作していない場合などにおいては、前述 1, 2 のログをまずはご確認いただく必要がございます。 デプロイが失敗している場合などは 前述 3 のログを重点的にご確認ください。 上記いずれのログについても、お客様の資産であるため、弊社サポートから直接参照することはできません。 そのため、サポートにお問い合わせ頂く場合、上記のログについてお客様にて取得いただき提供をご依頼する場合がございます。
App Service on Linux におけるログの取得方法
「1. コンテナ操作に関するプラットフォームのログ」および 「2. アプリケーションコンテナからの標準出力/標準エラー」
ファイルとして取得する方法
ポータルより、[App Service ログ] にて有効にすることでファイルシステムに保存できるようになります。
出力されるファイルは
/home/LogFiles/<YYYY>_<MM>_<DD>_<COMPUTERNAME>_docker.log
/home/LogFiles/<YYYY>_<MM>_<DD>_<COMPUTERNAME>_<ContainerName>_docker.log
の 2 種類があります。
<YYYY>_<MM>_<DD>
には日付(UTC)、<COMPUTERNAME>
はワーカーインスタンスの環境変数 COMPUTERNAME
が代入されます。
<ContainerName>
は、アプリケーションコンテナの場合は default
となります。
アプリケーションコンテナ以外には、easyauth
(主に組み込み認証機能を提供) や msi
(マネージドID機能を提供) といった機能に応じて起動されるサイドカーコンテナ毎のログが出力されます。
ファイルへのアクセスは Kudu より可能となっております。
Web UI でダウンロードする方法
Kudulite newUI を利用してダウンロード可能となっています。
また、FileManagerから /home/LogFiles
ディレクトリ、あるいは個別のファイルをダウンロードアイコンでダウンロード可能です。
Rest API でダウンロードする方法
-
$home/LogFiles
以下全てを取得する場合curl -u '<user>:<pass>' https://<appName>.scm.azurewebsites.net/api/dump --output dump.zip
-
docker関連ログを取得する場合
curl -u '<user>:<pass>' https://<appName>.scm.azurewebsites.net/api/logs/docker/zip --output dockerLog.zip
<user>
および <pass>
は、ポータル上デプロイセンター > [ローカルGit または FTPSの資格情報] よりご確認いただけます。
通常、アプリケーションスコープのユーザー名は ”app名$app名” といった表記となっており、その場合、curlコマンド等の基本認証のユーザ名として渡す値は、$app名 となります。
なお、いずれのzipもファイル数が多い場合は全てのファイルが含まれていない場合があります。その場合は個別のファイルをダウンロードしてください。
ログ例
-
/home/LogFiles/<YYYY>_<MM>_<DD>_<COMPUTERNAME>_docker.log
2023-07-19T05:47:56.197Z INFO - 960f88d01c6d Extracting 271B / 271B 2023-07-19T05:47:56.681Z INFO - 960f88d01c6d Pull complete 2023-07-19T05:47:56.721Z INFO - 5340db92048c Extracting 269B / 269B 2023-07-19T05:47:56.730Z INFO - 5340db92048c Extracting 269B / 269B 2023-07-19T05:47:57.134Z INFO - 5340db92048c Pull complete 2023-07-19T05:47:57.173Z INFO - 1de8884868db Extracting 125B / 125B 2023-07-19T05:47:57.184Z INFO - 1de8884868db Extracting 125B / 125B 2023-07-19T05:47:57.618Z INFO - 1de8884868db Pull complete 2023-07-19T05:47:57.680Z INFO - 13b92216e305 Extracting 418B / 418B 2023-07-19T05:47:57.700Z INFO - 13b92216e305 Extracting 418B / 418B 2023-07-19T05:47:58.272Z INFO - 13b92216e305 Pull complete 2023-07-19T05:47:58.323Z INFO - 2b61c8786332 Extracting 649B / 649B 2023-07-19T05:47:58.325Z INFO - 2b61c8786332 Extracting 649B / 649B 2023-07-19T05:47:58.796Z INFO - 2b61c8786332 Pull complete 2023-07-19T05:47:59.329Z INFO - df186a2aa8db Extracting 128KB / 877KB 2023-07-19T05:48:00.053Z INFO - df186a2aa8db Extracting 877KB / 877KB 2023-07-19T05:48:00.105Z INFO - df186a2aa8db Extracting 877KB / 877KB 2023-07-19T05:48:00.276Z INFO - df186a2aa8db Pull complete 2023-07-19T05:48:00.324Z INFO - 81174c23e08f Extracting 133B / 133B 2023-07-19T05:48:00.326Z INFO - 81174c23e08f Extracting 133B / 133B 2023-07-19T05:48:00.688Z INFO - 81174c23e08f Pull complete 2023-07-19T05:48:00.718Z INFO - Digest: sha256:b1dc34abcaac6f00dd945840a5bc6367123b63b56465a5ec20c316eca98e569e 2023-07-19T05:48:00.738Z INFO - Status: Downloaded newer image for mcr.microsoft.com/appsvc/node:18-lts_20230502.1.tuxprod 2023-07-19T05:48:00.768Z INFO - Pull Image successful, Time taken: 3 Minutes and 54 Seconds 2023-07-19T05:48:01.039Z INFO - Starting container for site 2023-07-19T05:48:01.040Z INFO - docker run -d --expose=8080 --name toshida-sandbox-linux_1_fbe8a298 -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_SITE_NAME=toshida-sandbox-linux -e PORT=8080 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=toshida-sandbox-linux.azurewebsites.net -e WEBSITE_INSTANCE_ID=302cf8973b5d900072f95accb5bb6ac5a41aef7e5771a06a1c43c6ab11398c27 -e HTTP_LOGGING_ENABLED=1 -e NODE_OPTIONS=--require /agents/nodejs/build/src/Loader.js -e WEBSITE_USE_DIAGNOSTIC_SERVER=True appsvc/node:18-lts_20230502.1.tuxprod 2023-07-19T05:48:16.173Z INFO - Initiating warmup request to container toshida-sandbox-linux_1_fbe8a298 for site toshida-sandbox-linux 2023-07-19T05:48:33.863Z INFO - Waiting for response to warmup request for container toshida-sandbox-linux_1_fbe8a298. Elapsed time = 18.2996024 sec 2023-07-19T05:48:52.040Z INFO - Container toshida-sandbox-linux_1_fbe8a298 for site toshida-sandbox-linux initialized successfully and is ready to serve requests.
-
/home/LogFiles/<YYYY>_<MM>_<DD>_<COMPUTERNAME>_default_docker.log
2023-07-19T05:48:05.285197980Z _____ 2023-07-19T05:48:05.285232481Z / _ \ __________ _________ ____ 2023-07-19T05:48:05.285237281Z / /_\ \\___ / | \_ __ \_/ __ \ 2023-07-19T05:48:05.285240781Z / | \/ /| | /| | \/\ ___/ 2023-07-19T05:48:05.285244381Z \____|__ /_____ \____/ |__| \___ > 2023-07-19T05:48:05.285248581Z \/ \/ \/ 2023-07-19T05:48:05.285251881Z A P P S E R V I C E O N L I N U X 2023-07-19T05:48:05.285255181Z 2023-07-19T05:48:05.285258681Z Documentation: http://aka.ms/webapp-linux 2023-07-19T05:48:05.285261881Z NodeJS quickstart: https://aka.ms/node-qs 2023-07-19T05:48:05.285265081Z NodeJS Version : v18.16.0 2023-07-19T05:48:05.285268081Z Note: Any data outside '/home' is not persisted 2023-07-19T05:48:05.285271382Z 2023-07-19T05:48:09.901216305Z Starting OpenBSD Secure Shell server: sshd. 2023-07-19T05:48:10.192789138Z Starting periodic command scheduler: cron. 2023-07-19T05:48:10.341765656Z Cound not find build manifest file at '/home/site/wwwroot/oryx-manifest.toml' 2023-07-19T05:48:10.341800257Z Could not find operation ID in manifest. Generating an operation id... 2023-07-19T05:48:10.341805757Z Build Operation ID: 09181e63-0fde-47d7-b05c-41cf28d7abb9 2023-07-19T05:48:12.091562959Z Environment Variables for Application Insight's IPA Codeless Configuration exists.. 2023-07-19T05:48:12.352149389Z Writing output script to '/opt/startup/startup.sh' 2023-07-19T05:48:12.744738062Z Running #!/bin/sh 2023-07-19T05:48:12.744754362Z 2023-07-19T05:48:12.744758862Z # Enter the source directory to make sure the script runs where the user expects 2023-07-19T05:48:12.744762662Z cd "/home/site/wwwroot" 2023-07-19T05:48:12.744774562Z 2023-07-19T05:48:12.744778063Z export NODE_PATH=/usr/local/lib/node_modules:$NODE_PATH 2023-07-19T05:48:12.744781663Z if [ -z "$PORT" ]; then 2023-07-19T05:48:12.744785363Z export PORT=8080 2023-07-19T05:48:12.744789363Z fi 2023-07-19T05:48:12.744792663Z 2023-07-19T05:48:12.744796163Z npm start 2023-07-19T05:48:36.920990760Z npm info using npm@9.6.4 2023-07-19T05:48:36.921418667Z npm info using node@v18.16.0 2023-07-19T05:48:37.184253403Z 2023-07-19T05:48:37.184289204Z > my-app@0.1.0 start 2023-07-19T05:48:37.184295004Z > node_modules/next/dist/bin/next start 2023-07-19T05:48:37.184299504Z 2023-07-19T05:48:39.283556344Z npm http fetch GET 200 https://registry.npmjs.org/npm 2245ms (cache updated) 2023-07-19T05:48:39.444670756Z npm http fetch GET 200 https://registry.npmjs.org/npm 2302ms (cache updated) 2023-07-19T05:48:43.611854464Z ready - started server on 0.0.0.0:8080, url: http://localhost:8080
診断設定を利用する方法
「診断設定」から診断ログを有効にすることで、Azure Monitor にて利用可能なログもあります。
前述の default_docker.log
に相当する内容は、AppServiceConsoleLogs
として、docker.log
に相当する内容は、AppServicePlatformLogs
としてご確認いただけます。
診断設定では、前述のログ以外にも取得可能なログがあります。詳しくは下記をご参照ください。
例: AppServiceConsolLogs
問題の診断と解決を利用する方法
「問題の診断と解決」からは「Application Logs」メニューから前述の default_docker.log
および AppServiceConsoleLogs
に相当する内容を確認することが可能です。
「3. デプロイに関するログ」
ファイルとして取得する方法
デプロイ処理は Kudu および Oryx によって行われ、そのログは $home/LogFiles/kudu
配下に出力されます。
取得方法としては、「コンテナ操作に関するプラットフォームのログ」および 「アプリケーションコンテナからの標準出力/標準エラー」と同様に Kudu newUI File Manager からダウンロード可能です。
ポータルで確認する方法
デプロイセンターからご確認いただけます。
「4. アプリケーションコンテナ内でファイルとして作成されるログ」
前述のように $home
配下に出力されたファイルは Kudu newUI File Manager を利用することでダウンロード可能です。
$home
配下以外のアプリケーションコンテナに出力されたファイルは直接ダウンロードする事はできません。
Kudu newUI Web SSH を利用してコンテナに接続後に操作ログとして取得することが可能となっています。
Web SSH で表示されたターミナル下部のメニューより、Start Log
,Stop Log
,Download Log
から操作ログを取得することができます。例えば cat
コマンド等を利用して必要なファイルの確認を実施してください。
2023 年 07 月 27 日時点の内容となります。
本記事の内容は予告なく変更される場合がございますので予めご了承ください。