uzullaがブログ

uzullaがブログです。

Azure App Serviceで快適にログをtail -fしたい話

Azure App Service関係のネタ三つ目です、ログをtail -fする話、あるいはコンソール(シェル)についての話です。

過去二つはこちら。

uzulla.hateblo.jp

uzulla.hateblo.jp

前々回「エラーログがみづらい!」と書きました、エラーログが見づらいのは実用上厳しいので、見やすい方法を探した結果です。

もっと良い方法があれば是非教えて下さい。

ログといいつつ、コンソール(シェル)についての話でもあります。

DISCLAIMER

このエントリの内容は多分王道ではないと思います(あるいは、そう願います)。しかし、現時点までにドキュメントにある手法では(私は)やってられなかった。

私が道を見つけられていないだけだと思いますので、これが正解だとおもわずに本当の正しい道をさがしてみてください。

ログストリーム

標準的にある機能です、前々回を見て下さい。PHP開発ではほぼ無用だとおもいます。

「コンソール」

開くとブラウザ内にcmdっぽい何かが立ち上がります、補完もカーソル移動もできないので結構きびしい。

f:id:uzulla:20160925232351p:plain

ここからログをtailする方法はみつけられませんでした。type(cat)をつかえば頭から見れますが、moreはちゃんとうごかなかったので現実的ではないですね。

コンソールをシェルとしてみたとき

いや、シェルではあるのですが…helpコマンドでコマンド一覧がでますが、これは別に有用な全機能を網羅しているわけではなく、歴史的経緯のある一覧だとおもいます、現代ではつかい所の無いコマンドばかりです。 (私もDOSをつかってきた世代ですので、一部コマンドをみるとなぜか涙がでてきますが)

f:id:uzulla:20160925232405p:plain

このコンソールでも、流石にdir(ls)とcdは使えるので、ファイルがどうデプロイされているかの確認には使えます。

しかし今のWindows標準ではCLIのエディタがないんですよね?DOSのころはeがあったんですけど*1EDLINもないしcopy con技もできなかったです。

f:id:uzulla:20160925232423p:plain

(懐古エントリになりそうなので以上)

Advanced tool (Kudu)

何と比較してのアドヴァンスドなのかいまいちわかりませんが、ひらくとえらいさっぱりした別サービスみたいな画面がひらきます、このKuduの中のWeb UIは軽快に動くので最高です。その中の一機能として、コンソールよりアドバンスドなコンソールが使えます。

トップページには魅力的な単語がならんでいますが(APIで色々叩けるみたいな)、とりあえず今回無視してヘッダーのDebug Consoleをクリックすると、CMDPowerShellが表示されます。とりあえずCMDをえらぶと、さっきのコンソールより断然再現性の高いcmdが表示されますw

f:id:uzulla:20160925232440p:plain

このcmdはかなり出来がよい上に、なんとtailがあります!しかもGNUの!これによって誰もが望んでいた tail -f php_errors.logがつかえます!

なんと(これまたGNUの)catもあります!、lessもあります!

「これが約束の地か…!」

これでまともなPHP開発ができそうです、最高!

最高といいつつ実際には欠点?もあります、いまのところ気付いている唯一の欠点は、C-c(Ctrl+C)がおかしいことでしょうか…。 tail -fをはじめた後、終了することができないのです…。

実は他のキーコンビネーションなのかもしれないのですが、C-dとかもダメでした。なにかブラウザの依存だろうか。

まあ、止めたかったらリロードすればいいんじゃないですかね(雑)。

シェルとして見たとき

上にもかいちゃいましたが、このシェルのすごいところはcatとかtailが使える事ですねw*2さらにカーソル移動もできて、補完も効くし、凄いぞまるでシェルみたいだ!()

シェルの上部にはファイル一覧があります。こちらはカレントディレクトリのファイルが一覧されており、これをつかうことでマウスポチポチでのディレクトリの移動ができます。勿論cdすると一覧も追従します、これは結構便利ですね。

なんと、そこからファイルのダウンロードやそして簡易的な編集、削除なども行えるなど、簡易ファイルマネージャ機能もついています。

「これが約束の地か…!」(二度目)

余談

  • このシェルであちこち移動すれば、mysql.exeをたたいたりとかもできます、大分勇気づけられましたね。
  • 裏でリアルタイム通信のやりとりがあるからか、突然ささる(リロードもきかなくなる)ことがあります。そういう時はリロードせずに一度閉じたり、通信を停止をしてからリロードしたりすると動きます。
  • コンソール右上にoldとかnewとかとかありますが、oldだとC-cでコマンドをキャンセルできるようになるかわりに、補完が変になったりtail -fがうごかなくなる(ので無用)

まあ、C-cができないとか、刺さるとかはログをtailできるメリットにくらべれば些細なことこの上ありません。運用でカバーします。

なお、個人的にはCMDで十分だったので、PowerShellの方は「さすがPS、画面が青いぜ」と確認して終わりましたので省略します、各位お試しください。

f:id:uzulla:20160925232552p:plain

App Service Editor(プレビュー)

これはブラウザでつかえるエディタというかIDEというかですね。あまり詳しくないのですが、Visual Studio Online "Monaco"の流れをくむ物なんでしょうか。

先程の簡易編集とちがって、ちゃんとSyntax Highlightや極簡易なSyntax checkなどもできるようです。キーボードショートカットについてもCmd+/コメントアウトできたり、なかなかの機能があるように見えます。ソースコード全文検索なども搭載されており、これだけでもなかなかのことができるのでは…。

後、gitもここから叩けるようです。ただ、App ServiceのGitデプロイって.gitを抜いてデプロイされるので特につかえない…しかもrepoにpushする秘密鍵も入れられるわけでもなし。ここでgit initする作業フローも想像しづらいし、cloneしたら全部きえちゃいそうだし、なかなか使い所が…?

さておき、なんとこれでもログが見れるのです。

f:id:uzulla:20160925232621p:plain

二つ前の記事の通りにphp_errors.logが出力されるようにした上で、左側の再生ぽい三角形ボタンをおすとOutputと言うペインがひらきます。ここにphp_errors.logをtailしたようなログが書き込みがある度に?ぞろぞろとでてくるのです。(なお、同時にひらいたウインドウはとじてもかまいません)

遅延も小さく(1秒くらい?)、画面の幅的にもAdvanced toolのコンソールよりも見やすいです。*3

ただ、このOutputはどこのファイルがどう監視されて出力されるのかイマイチよくわかりません…php_error.log以外も見たい時はどうすればいいのだろうか、LogFiles以下にかきだせば勝手にでてくるっぽいが…。*4

なお、シェル機能もついており、Advanced Toolとちがって複数のシェルをひらいておけますが、欠点はchrootされてしまっていることでD:\home\site\wwwrootより上のディレクトリにいけません。mysql.exeとたわむれるのにはつかえなさそうです。

実はエディタも同様にwwwrootにchrootされています。Document Rootにchrootにしてしまうレンサバ的世界観は個人的には微妙だと思います*5、ですがAzure App ServiceはDocument rootを自由に変更できるので設定次第ですね。

まとめ

  • デフォルトのログストリームやコンソールのことはとりあえず忘れよう
  • Advanced toolのコンソールは微妙な挙動もあるが実用に足りる、あとはtail -fが終了できれば言う事はない
  • App Service Editor(プレビュー)は多機能っぽいけど、取ってつけた感や、謎が多いのがどうしても気になる。その辺りを解説したドキュメントもみつからなかった

ということで、php_errors.logのtailが気軽にみれるようになりました。これで個人的な支障はなくなったかもしれませんね、すばらしい。

この勢いでsshもできないかな…というのが私の感想です。

こちらからは以上です。

*1:私はPC-DOSだったので、MSDOSの方はeditでしょうか

*2:多分、純正の(純正とは??)コンソールもPATHを通せばtail,cat,lessがつかえるとおもうんですが、ではPATHをどうやって通すのか?と言う話になる

*3:そして、これならそもそも終了もないので、C-cがどうとか悩まずに済みます

*4:適当にFTPhoge.logとかファイルをULして、App Service Editorをリロードして、hoge.logを上書き保存したら出力されたので、多分そうなのだが、ドキュメントがない。

*5:しかし、他人様にはこれで渡す事も多い