Edited at

Azure functions ログの参照方法まとめ

More than 1 year has passed since last update.

Azure functionsは実行プログラムのログが(一部だったり全部)表示がされない時があります(デバッグ時に困る。。)そんなとき、別の方法で見れたりするので、複数知っておくと助かります。そこで、複数ある参照方法をまとめました。


functionsログ参照方法


functionsのlog window

最も簡単な方法です。azureポータルにログインして該当functionsまで遷移したら、画像のようにログが流れます。

Azure_functions_log_window.png

ストリーム表示なので、過去のログを追うというより、今動いてるログを確認する用になります。ここで(全部or一部)表示されなくても左下の最新の情報に更新をクリックで表示される場合があります。

(log windowが無い場合は右上のログをクリック)


functionsのモニター

こちらもポータルの機能で、上記画像のモニターをクリックで利用可能ですが、特徴として、ストリームではなく、プロセスごとにログが確認できます。実行完了した該当プロセスをクリックすると、ログが確認できます。

欠点として、この画面が重いのと表示エリアが小さいため、やや見にくいです。


Kuduのlog stream

functionsに付随するKuduサービスにログのストリーム表示があります。内容は1つ目のlog windowと同じですが、そこで確認できない場合の、予備表示ぐらいで捉えてます。


  • function Appの設定 -> Kuduに移動

Azure_functions_to_kuzu.png


  • Tools -> Log stream

Azure_kudu_logstream.png

最初の表示が遅いという難点はありますが、一度開いておけば、そのままタブ表示で置いておけるという利便性はあります。


REST API

azureにも様々なapiが用意されており、functionsのログ表示機能もあります。

そこでわざわざブラウザを開かなくて良いように、shを作成しました。


log_stream.sh

#!/bin/sh

curl \
-X GET \
-H "Authorization:Basic <base64encode(username:password)>" \
https://<functions resource name>.scm.azurewebsites.net/api/logstream/application/functions/function/<function name>


<>内を適宜置き換えてもらえばいいのですが、



  • base64encode(username:password)・・・functionsの認証情報(詳細は以下で説明)のusername:passwordをくっつけた文字列をbase64エンコードしたもの


  • functions resource name・・・functionsのリソース名


  • function name・・・functions内に作った関数名

log_stream.shを叩くと、

$sh log_stream.sh

1つ目のポータルで表示されるlog windowと同じログが参照できます。私はこれを多用してます。わざわざブラウザで遷移しなくてもいいし、他のfunctions作っても、ほぼコピペでそのまま使い回せて楽です。

ちなみにbase64エンコードは、phpであればbase64_encode()関数があるので、以下で作成できます。


base64encode.php

echo base64_encode("username:password");


他の言語使わずshで完結させたかったのですが、すんなり書けなかったので妥協。。。


functionsの認証情報

Function app の設定 -> App Service の設定に移動 -> デプロイ資格情報 -> FTP/デプロイ ユーザー名パスワードで設定できます。

functions_auth_setting.png


実際のところ

4つほど参照方法を挙げましたが、以下が、実際の開発でよくあるパターンで、


  • functionsをポータルから作ったら、log_stream.shを用意する(参照方法4つ目)

  • 表示がおかしいと思ったらポータルのlog window(参照方法1つ目)で最新の情報に更新して確認する

これでほぼ問題なくデバッグできました。