(このエントリは 2023/08/26 の 湘南.pm #1 LT 発表資料です)
こんにちは〜
- polamjag という者です
- それっぽいやつが現状 (あんまり) ない Perl のコードベースで構造化ログを書き始めたい
- とりあえずのゴール: ECS 上で動かしたときにいい感じに Amazon CloudWatch Logs (の CloudWatch Logs Insights) とかで集計できたら OK
- 分散トレーシングでオブザーバビリティでサクセス、みたいなのは一旦ストレッチゴール
Perl 構造化ログ 無料 最速
use feature qw(say); use JSON::XS (); sub logger { my ($message, $params) = @_; say JSON::XS->new->canonical(1)->encode(+{ message => $message, params => $params, }); } logger('failed to process nantoka' => +{ error_code => 123, error_reason => 'foobar', request_id => 'cafebabe', });
終 制作・著作 ━━━━━━━━ ⓟⓞⓛⓐⓜⓙⓐⓖ
構造化ログ
- https://www.google.com/search?q=structured+logging
- 意外とググっても明確に定義している人があんまり出てこない気がする??
- 構造化ロギング | Cloud Logging | Google Cloud
- オブザーバビリティ・エンジニアリング本では定義がなされていた
- 自分の理解: 意味がある構造が (well-known な形式で) シリアライズされたログ
- 適切な構造をシリアライズしていれば、ログ中の一部の情報を、正規表現を使ったりせず抜き出し、集計したりできる
- 適切な構造とは、集計やフィルタの対象にしたい値がいい感じになっていること
ところで (時間なかったら飛ばす)
- LTSV も構造化ログである
- たとえば Amazon Athena ではちょっと頑張ると構造化されたブツとして扱うことができる
- Amazon Athena LTSV形式のログファイルを探索する | DevelopersIO
Web アプリケーション構造化ログ界隈
- 会場アンケート: あなたが最初に構造化ログの概念と出会ったのはどのプログラミング言語ですか?
- 𝕏 に投稿してください!
- カンペ: ここで #湘南pm - Search / X を開く
- わたくし polamjag は Go (の uber-go/zap)
- 𝕏 に投稿してください!
- Go はなんか golang.org/x/exp/slog とか出てきていて盛り上がっている
もうちょっと細かい話
- コンテキストオブジェクトみたいなのがなくて、一緒にログに書きたい情報を持ち回るのがめんどいとき
- → Scope::Container で logger やコンテキスト情報を持ち回る
use Scope::Container; sub get_logger { # どこかで start_scope_container している前提で my $logger = scope_container('logger'); return $logger->{logger} if $logger; scope_container('logger', +{ logger => sub { my ($message) = @_; JSON::XS->new->canonical->encode(+{ message => $message }); }, }); }
超 MVP ではある、が、これでやりたいことの 7 割くらいは達成でき……たか??
OpenTelemetry
ところで……
For completeness' sake, here are links to the relevant repositories I've been working with:
- The API: https://github.com/jjatria/perl-opentelemetry
- The SDK: https://github.com/jjatria/perl-opentelemetry-sdk
- The OTLP exporter: https://github.com/jjatria/perl-opentelemetry-exporter-otlp
完成している (!?!?)
実装も Object::Pad めちゃくちゃ使ってたりして普通に Modern Perl
ところで (2)
↑ の実装を見ていて良いロガーライブラリがあることに気づいた
Appendix
- Webアプリケーションのログに関するいくつかの考察 - Hatena Developer Blog
- これを書いたりしていてログに関心がある
- Perlでも分散トレーシングしたい!AWS::XRay による解析とその実装 / YAPC::Tokyo 2019 - Speaker Deck
- Perl でトレーシングといえば、の AWS::XRay
- オブザーバビリティにはお金がかかる - 株式会社ヘンリー エンジニアブログ
- ホットな話題!