#126 なんとなく読んでいるログの基礎!!

2023/3/15 ·

  • おはようございます 本日はですね私潤平の方から



  • ログの話をしていきたいと思っています珍しい珍しいですよねログの専門家なんですか全然なんですけど全然なんですけどまあやっぱり必要性は日々感じるなといったところで話をさせていただきますで今回は特にログでもいろいろあると思うのでアプリケーションログに絞って話していこうかなと思っていますよろしくお願いしますなんとなくやっちゃってるねなんか



  • なんとなくこんなもんだろうって言ってやって大きく問題も起きずっていう感じのやつですねアプリケーションログは僕もなんとなくログをとりあえずは残しておいて問題が起きた時だけ頑張るというスタンスでログと向き合っておりますねなるほど



  • 僕もログの話をしますと言いつつ別にめっちゃ詳しいとかじゃないのでまたまた鬼本当にサポートをしていただきながら話を進めたいなと思ってます足元にもやりませんよこの人たち鬼ですねやっていきますまずログの必要性なぜ必要なのかっていうところで



  • これは予想はつくと思うんですけどやっぱりエラーとかが出てきた時にログにバーって出るのでそこが読めるようになると何が原因なのかすぐ判断できるようになって業務効率が上がったりとかっていうところで必要ですとあとはトラブルシューティング用と



  • 同じですね同じですねちょっと用意した台本が一緒だったんでなるほどログの必要性はログを出すことの必要性なのかログについての知識の必要性なのかで言うとどういうニュアンス今回はログについての知識うん



  • ベーシック的な部分の話をしていければログとはというところですねどういうもの出力されてるのっていうところなんとなく読むところを明確にしていこうっていう感じですかねなるほどね代表的なログだと大体どういうのが代表的などういうのが出るとかって話ですかどういうアプリ



  • 何を残してるんですかログっていうのはなるほどどういう中身がどうなってる超大枠超大枠で言うとそれこそエラーが出てきた時にエラーこういうのが起こってますっていうメッセージが出るとかあとはログインした時に何時何分ログインされましたみたいな誰がログインしてどんな操作したよみたいなとか監査していくみたいなはいはいはい



  • それを出力するしないとかはあると思うんですけど大枠ってそういう回答であってます?そういうことですすいませんありがとうございますっていう感じですねうんうんうん



  • なんでそんな不安そうなの?おまけはそんな感じです今日のゴールとしましてですね今日のゴールベーシック的な部分をクリアにしていこうって話だったんですけどソフトウェアのアプリケーションとかを書いてる人がログの基礎知識を習得できると



  • なんとなくさっき話し合った読んでるところから卒業するっていうログを読むのが早くなったりとかワーっていっぱい出てきた時にちゃんと必要な情報を引っ張れるようになるみたいなそんな基礎知識がつく感じですかねっていう感じでリスナーの方がなっていただければ嬉しいですログ読まないがちですからねログね書き出しそうというか



  • ログを読まない人がいるんですよなーにー俺ですか斬新今の全部カットしてすごくすんなりなーにー俺ですかって言ったようにしてやるいやだなー誰かが言ってたんですけどログに神は宿るって言ってましたよ誰だよノリさんですね俺



  • さっきの引きずってますね危ない危ないですちょっとここから具体的な内容に入っていきたいと思いますアプリケーションログの構造ですこういう感じでログは出力されてます一般的にはっていうのを伝えていきますログの黒い画面にバババって出ると思うんですけど基本的には一番左からレベル



  • 日時でメッセージっていうような感じレベル日時メッセージっていう感じです画面に出るやつ出るやつ出るやつ出るやつでいいですか出るやつとかあとは自分で出力させる時とかも基本的にこういう構造がいいんじゃないのかな見やすい一般的なものじゃないかなと一般的にログだとあれじゃないですかね本番環境だと画面に出すっていうよりも



  • ファイルに出力されてるんじゃないですかね普通そうなんですかね確かに本番環境そうですねローカルだとね黒い画面出るそういうイメージでしたけどそうですねありがとうございますレベルに関してこれ結構ふわっとしてると思うんですけど有名どころで言うと大体5つぐらい



  • 今回絞ってて上からというかインフォレベルワーンエラーフェイタルデバッグよく見るいつぐらいかなと思うんですけどよく見ますねエラーメッセージに書いてますねワーンだらけ確かにワーンはよく見ますよねログファイルとはちょっと離れますけど



  • アプリケーション起動したときあれログかなんかのバージョンがもうそろそろ古いやでーっていうワーニングがうわーって出てきてまあいっかーって思うっていうデプリケイテッドなんちゃらがんちゃらみたいななるほど



  • ありますねさらっとどういうものかって言っていくとインフォは本当に情報というか全部の情報というかどんな操作したのかとかっていう失敗成功に関わらず成功した時だけかまあそうですねちゃんと動いてる時にこれできたやでっていう感じですかね正直あんまり見ることないですよね結構あります?唯一あるとしたら



  • なんかアクセス多いなみたいな時にアクセスログ見たりするかもしれないですねログファイルに出力されるのはまあまああるんじゃないかなアクセスログは多分レベルとしてはインフォメーションだと思いますインフォログレベルだと思うアクセスログは続きましてこれはさっきの警告なんか



  • 最悪というか対処しなくてもいっかぐらいのですよねそんなこと言ったら怒られるんだけど対処はした方がいい本当はした方がいいしなくても今は誰も困らない後々誰かがめちゃくちゃ困るなるほどそんなやつですよねそうだね時間で来るやつもあるし



  • そうじゃないのもある気がするずっとワンのやつとかもある気がする好ましくないとかそうですねちなみにあんまり僕は出てもあんまり対処しないんですけど対処します?いやするよ本当ですか?するよ神に誓ってするって言ってますわかりました



  • そんな感覚のレベルですね本当に暇な時にするかもちょっとすぐ解決できそうかつ暇な時は解決します技術的不採よりもちょっと低い優先度で対処します僕は内容にもよるかワンの内容にもよるかもしれない本当に内容によりますね読んですぐ分かるワンとさえ?っていうのない?



  • うんあるでも読んですぐ分かってもやらないことはあるそれもあるワン出たらとりあえずちゃんと読んでどういう内容なのかっていうのでやるやらないを決めてるというような感じですかそうですねはいっていうワンです続きましてエラーこれはエラーですエラー僕はイメージ的にはなんか



  • 実装の部分プログラミングのミスで出てるぐらいのイメージなんですけど他なんかあります?具体例例えばAPIWeb API想像してもらって不正なパラメーターでAPIリクエストした時に多分400返ってくると思うんですけどその時にエラーログ出ると思いますよひょっとしたら出ないかな



  • ちゃんとトライキャッチでキャッチしたところで出るっすよね多分出るっすよねAPAを使ってる側だとしてってことだよねそうそうそう使ってる側が不正な呼び出しをしたときにアプリケーションログとして多分エラーログ残るはず残ると思うバリデーションエラーっていうのが多分ベイズかなんかで呼び出されてそれでそのバリデーションエラーは多分エラーログ入ってくれると思ってる



  • アプリケーションが想定しない指出しとか想定はしてるのか想定してるかもしれないですけどやりたくないことというかについてはエラーが出ますねこれはあれですよね最悪というか動くエラーというかここの部分を使わなければ別に他のページとかは全然動いたり



  • するようなものによるなんか基本的にイメージあってるか分かんないんですけどあれじゃないですかその一連の流れが終わった後にもアプリケーションが普通に動くぐらいのエラーエラーが発生しても別に復帰可能というかさっき言ったパラメータ不正なパラメータで呼び出したらその後別に普通に使えるじゃないですかそのAPI多分そういうのについては多分エラー



  • で処理してエラーログを入っているのかなというのが感覚ですねありがとうございますというのがエラーです続きましてフェイタル物騒フェイタルって単語で意味何ですか致命傷みたいな致命的クリティカルと似てますね



  • それで言うと多分ですけどサービスによって呼び方違いますねフェイタルって呼んでるところもあればクリティカルって呼んでるところもある気がしますなるほどクリティカルって直訳すると致命的なとかじゃないですか単語の意味何なんだろうなと思ってフェイタルも致命的ですよねフェイタルも致命的なエラーって出るゴールですねググったら致命的って出ました言葉のニュアンスの違いは確かに分からんですねいつものハイネイティブから



  • 久しぶりに登場したんじゃないフェイタルusually means it's overcritical means it's almost overフェイタルの方がやばいんじゃないですかそうだよねクリティカルはほとんどほとんど終わってるけどフェイタルはすでに終わってるそうそうだからクリティカルの方が若干マイルドなんですねどっちみちアウトなんですけどうん



  • これは絶対分かんなかったなこの辺はサービス感で用語が揺れてるだけな気がするそれはありますね例えばですよフェイタルとクリティカルの話なんですけどバキューンって言ってのりさん撃たれました出血大量です



  • 既得状態だ 止血しないと死ぬがクリティカルで致命的でもう死んでる側がフェイタルらしいです手遅れじゃんフェイタルフェイタル出たらダメじゃんもうフェイタルが出たらもう埋葬してあげる必要がありますねそっかもう別の行動になるねなるほどフェイタルはもう終わってる終わってますねそうなんだ勉強になるわさっきのりさん言ってたNGXとかクリティカルって言ってますけど



  • エンジンXの方にはフェイタルないですもんねフェイタルないですそこの単語入れはありますけど今用語の意味を知った上で僕はクリティカルの方が理解できるというかクリティカルっぽい気がしました確かにフェイタルだとすでにこのプログラムは手遅れですみたいな感じ出ちゃうよねどうしようもありません新しいプログラム作り直してくださいぐらいのメモリが破損しました交換してくださいみたいなそうそうそう



  • ちょっとめっちゃ外れましたけどこれは何なんですかシステムというかサーバーでいうとどういう状態なんですかサーバーでいうと正直僕はあんま見たことないんですけどアプリケーションログとかでフェイタルとか出てるのでもあるとするとひょっとしたらメモリにアクセスできなくなったんですけどみたいな機器の破損か故障でハードディスクにアクセスできないんですけどとかフェイタルでもあれかもな



  • PHPのエラーレベルにはなかったんですけどPHPのエラーメッセージにありますね何出てるんですかフェイタルエラーって出ますメッセージメッセージの方に出ますねフェイタルそれでももうおしまいですねフェイタルエラーなんちゃらかんちゃら詳細いいみたいな詳細出てくるエラーじゃない?わかんないけどエラーレベルはエラーな気がするうん



  • そんなアプリケーションファイルねえよっていうのにアクセスしようとしてるとかでもフェイタルって出るかな普通にアプリケーションのエラーでエラーってそうですけどねないメソッドにそういうのがあるのは理解できるんですけどいざ具体例というとなかなか難しいですね別に見たこともあるんですけどねありますゼロで割った時とか



  • エラー出そうじゃないエラーかあれフェイタルではあるんですけどねプログラムの致命的なバカというか直ちに対処が必要なエラーに対して出るログレベルですよね本来何も設定しないと多分エラーって出ちゃうんですけど本当はフェイタルで出さなきゃいけないのかもしれないですねフェイタルとかクリティカルでっていうことなのかもしれない



  • エラーよりやべえエラーってことですね対処しないといけないっていうレベルですね続きましてデバッグ最後ですねこれデバッグこれも動作確認の時とかに使う感じですかね本当に僕が使った時なんかは画面から操作した時にログイン処理ページ遷移するまで何秒くらいかかったとかを知りたい時とかに



  • デバッグのロガーロギング処理を仕込んで出力させて時間を出すみたいな使ったぐらいですねそういう使い方ですよねデバッグレベル主にこれは開発するフェーズ用だよねそう思ってますあとは本当に何かあった時にローカル環境で再現したいっていうまあでもそうだなその時に都度入れるデバッグログもあるだろうから



  • そうですね開発用途とかが多いかなはいはいっていうまあとりあえず5つのレベルがありますとはい続きましてレベル日時の部分ですねこれはまあフォーマットがだいたい決まってると思うので一般的ならとその形式まあ一般的に普通に年と月と日と時間が書いてるフォーマットですねよく見るやつだと思いますよく見るやつはい



  • でこれではいこれ時間がないと何が困るんですか時間がないと日時ないと検索とかしづらくなりますよね



  • 日時で検索するってことですか僕結構何秒だいたい当たりはつくと思うんでだいたい何秒あたりで検索しますね僕はみんなそんなもんですか検索そうねざっくり問題って発生した日時があると思うんでその付近のログ調べるためにやっぱ時間残ってないといけないっていうところで日付は必須ですねうんうんうん



  • ありがとうございますということでレベル日時最後メッセージメッセージはここがどういうメッセージを表示するのかっていうところで基本的にはなるべく分かりやすくっていうのはあるんですけどじゃあどういうのが分かりやすいのっていうとそれこそ今話してた検索しやすいとかで検索しやすいってなると今の日時タイムスタンプが入った



  • いつ発生したのかが分かるログとかあとは不要なデータを含めないというところで出せばいいってものじゃなくて必要なところだけ出るような実装にしておく容量的にも圧迫されちゃうと思うのでそういう不十分な部分を出力しないこれによって検索も早くできるようになると思うのでっていうのが分かりやすいメッセージ



  • になるのかなと思うんですけど他なんかあります?基本的にアプリケーション開発とかやってるとそもそもエラーってある程度デフォルトで組み込まれてると思うんですよ多分分かりやすいメッセージにするっていうのは追加で情報が必要だった場合ってことですよねおそらくはいはい



  • どういうケースなんだろうなそれ監査ログとかか監査ログとかは多分デフォルトで残んないんで誰がユーザーどのユーザーがログインして何をしたよみたいなログを残すときとかはちゃんとメッセージをうまく考えてあげないとよろしくないとその個人情報が含まれてもいけないので多分ユーザーIDとかで各ログの後ろの方に



  • ユーザーID何々みたいなのをつけることとかが多い気がしますねあとはいっぱいログ出ると思うんですけど例えばですよどのユーザーがどのぐらいのアクセスをしてるかって多分見るときってログファイルで見るわけじゃないと思ってて何かしらの可視化ツールで可視化させると思うんですよグラフなのか分かんないですけど



  • そういうのに飲み込ませてあげれるようにログフォーマットとかテキストとか決めておく必要があるんでしょうね絶対ログの最後にユーザーIDってついてたらユーザーごとに情報をまとめれたりするんでしょうからはいっていう感じでログごとに誰がやったみたいなのはあると良いと思っていますでなんか起きた後もあんまり良くないのかもしれないですけどそのエラーより前の動作を終えると思うんですよね



  • どのユーザーが何をした時にそのエラーが起きたのか追いやすくなる確かにちょっとこれアプリケーションのログとは関係ないですけどDockerとかでコンテナ立ち上げる時に僕すごいエラーに出くわすんですけどエラーのメッセージプラスその前に何しようとしてたのかっていうログは確かにめっちゃ見ます何しようとしてこけたのかみたいなそうですそうです



  • 再現できないですよねそれないとなのでその再現手順を残してあげるぐらいの気持ちでアプリケーションログ残すなるほど普段やってますねフレームワーク使ってないんで僕今ラムダでやってるんでなるほどね再現手順を残すぐらいのって分かりやすいですねそんな気持ちでやってもね



  • いざやると当たんねーってなるんですよねなるほどログあるあるですかなかなかうまくいかない僕逆にログ出しすぎてぶっ壊れたことありますよぶっ壊れる壊れるんですかはい



  • すごいたくさんログ出力するようになってたんですよその設定ローカルだとローカルのデータ数なんで何も気になってなかったんですけど実際本番になってデータ量増えてきたら1アクセスで50MBくらいのテキストが生成されるようになってディスクいっぱいになってディスクパンパンでコマンド動きませんみたいな状態になりますよねもう直し方は分からなかったですね確かにそこまでいったら



  • だってCUI使えなくなるんですよね使えなくなるどうしたっけなでも一回なんかそれやったな演習でやり方忘れちゃった僕はもうそれターミナル操作で解決できなかったんでEC2だったんですよインスタンスで立ててなんでEBSを拡張してそれはありますね物理的に大きくして



  • そのままですログの出力設定とか変えたしめちゃめちゃ大量に出てたでかいログは消してあとは今もそのサイズのままにしてますねEBS縮めらんないですからねできるんですけどめっちゃめんどいんですよできるんですかできるやんないほうがいいぐらいめんどいじゃあ覚えなくていいコンソールからはできない



  • アンマウントしてその後解放できるんだ謎システム何の話だったんだっけログエラーメッセージをメッセージか容量の話前やってたところを再現するみたいな一つの目安かなって今思いましたねありがとうございます続きまして続きましてというか連続で一発ギャグやってる人



  • 続きましてというかまとめに入っていきますここからはざっくりと構造のレベル日時メッセージっていう形ですよっていう構造の説明をしましてこれが分かるだけでだいぶ読みやすくなるんじゃない見やすくなるんじゃないかなと思うのでどこら辺のレベルを取りたい自分が今知りたいのかなんとなくで分かってると思うんですけどよりクリアになってあとは日時いつ当たりをつける何分何秒の時みたいな



  • 検索したりしてあとはメッセージ内容はこれはしっかり読んでくださいって感じですかね翻訳しつつ読んでくださいっていう感じで皆さん無事ログを読めるようになったので仕事が早くできるようになりましたというところでまとめは終わりになりますちょっとだけ補足いいですかはいお願いしますログをちょっと見ていくっていうところで僕ログってめっちゃとっつきづらいと思うんですよ



  • まず文字が多すぎて超怖いカタカナじゃなくて英語をいっぱい書いててねだからこれどっちかっていうと英語力を発揮しなきゃいけないなでもめんどくさいなっていう怠惰な心との戦いだと思うんですよ僕エラーログを読むかどうかってなるほど読んでください



  • ちゃんと言います1単語文章を翻訳機にぶち込むんじゃなくて単語ずつってことですねそうですねログを読むにあたってですねアプリケーションのログとかでいや違うなログを読むにあたって1個だけコマンドを伝授したい



  • 2つ増えたな今早速1個だけ伝授したい2つのコマンドを2つのコマンドを1個だけ伝授させてください1つはテイルですねテイルねテイルっていうのはファイルの中身を出力してくれるコマンドなんですよ出力するんですけど下の方だけ出力してくれるんですよ尻尾



  • なのでエラーログって大体さ出た瞬間確認したいじゃないですか大体エラーログ見るべき場所下の方なんですよなのでテイルをよく使いますね行数とか指定できるんでざっくり50行くらい出しておこうかなみたいなとかもできるしデフォルトだと10行とかかな20かなちょ忘れてたなんだろストリーミングで出すのも結構使いますねストリーミングはい



  • ストリーミングリアルタイムで出してくれるオプションがあるですテイルは更新があったら更新されるってことだそうそう学びになりましたテイル-F-Fでログファイルに書き込まれている文字というかログがリアルタイムで出るように常時表示してくれるというかそうなんだはい



  • すごい便利ですこれすごい便利よく使いますいつも僕アクセスするたびにテイル使ってましたじゃあもう革命ですよ革命が起きましたよ結構革命が起きてますよ全部解決するそれリアルタイムでポーって出てくるんですごいすごい一つ目テイルレスレスはですね



  • 検索できるから使えますねたまにビムで開くときもありますけどこれビムで開いちゃう絶対よくないんですけどどっちでもぶっちゃけいいよねやる操作変わんない編集しないっていう絶対の操作ミスの無さがなければビムでいいですけどレスだったら閲覧だけに絞れてかつビムのキーバインドで操作できるんでスラッシュで文字列検索したりとかさっき言ったGで下まで飛ぶとかそれならテールでいいじゃんって感じなんだけど



  • 検索用途の時はレス使いますねそっちの方がいいです絶対なるほどこれをこの2つのコマンドを1つ伝授してくれました今2つのコマンドを今ね1つ伝授しましたはい飲み込めていないようですテイルはねマジで使った方がいいですねなのでこれらを使うとねエラーメッセージ見るときはかどるんであとは英語との戦いだけに絞ることができるとはい



  • ありがとうございますこれでログファイル怖くないということでいい感じにログ見ていきましょうあとはログを取るだけじゃなくて活用するっていうのはすごい大事だなって僕ちょっとさっき調べてて思いましたね何のためにログを取るのかって目的のとこなんですけどもちろん決まりだからっていうのとかアプリケーションデフォルトで出てるじゃんっていうのはもちろんあるんですけど



  • 結局そこでログを収集するのはお客さん使ってるユーザーに適切な価値を提供するためだと思うんですよエラーが出てたらお客さん嫌ですよねとでもそういうの出てたらすぐ気づけるようにログを残しておくとでログ残すだけじゃなくてちゃんとそれを見つけないと直せないんでそういう仕組みを作っておくことが大事ですよねっていうことを僕はさっき学びました学びのシェアいいね1いいね1いいねいいね2いいねありがとうございます



  • ありがとうございますどうでしたじゅんぺい君今日喋ってみてサポートしてもらいつつなんとかいけたんですかねということで皆さんも不安な時間を埋めるのにやめてよ人間の行動の特性だって言ってたよ誰が本でしょうがないですねじゃあ



  • 大丈夫だよじゅんぺいそんな不安に思わなくても別にじゅんぺいはねまっすぐ走ってんのにねまっすぐ走ってますかね今僕ってすごく言ってくる感じがする大丈夫だよできてるできてる大丈夫ですかはい東京層で後ろ向くやつみたいな来てないかなみたいな大丈夫かな自信持っていきます自信持っていこうはいBe ambitiousBe ambitious



  • じゃあ終わりましょうそれではまた次回バイバイ

0:00 31:14

#126 なんとなく読んでいるログの基礎!!