logging-best-practices について
開発・運用チーム向けに、本番環境のログ設計を指針するスキルです。リクエストごとにコンテキストを含む構造化イベントを記録し、ログ設計、コードレビュー、本番障害の調査を検索しやすさの観点から支援します。
主な機能
- 01リクエストごとのワイドイベント
- 02高カーディナリティ項目の設計指針
- 03結果に応じたサンプリング戦略
- 04既存ログのアンチパターン検出
- 05検索を重視したログ設計
活用シーン
- 01新規サービスのログ設計
- 02コード内のログ記述のレビュー
- 03本番障害の調査
- 04構造化ログへの移行とログ量削減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ncklrs/ startup-os-skills --skill logging-best-practicesインストール後、Claude Code で/logging-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonrules/_sections.mdantipattern-otel-silver-bullet.mdantipattern-scattered-logs.mdantipattern-string-search.mdarchitecture-event-lifecycle.mdarchitecture-wide-events.mdfields-business-context.mdfields-high-cardinality.mdfields-required-context.mdsampling-always-keep.mdsampling-tail-sampling.md詳細
ロギングのベストプラクティス
Boris Tane のloggingsucks.comの哲学に基づく、本番環境向けロギングの専門的なガイダンスです。
基本理念
「コードが何をしているか」のロギングをやめ、「このリクエストに何が起きたか」のロギングを始めましょう。
従来のロギングは、クエリではなく書き込みに最適化されています。開発者は、後でどのように検索されるかを考慮せず、その場のデバッグの利便性のためにログを出力します。その結果、規模が大きくなるにつれて、シグナル対ノイズ比が著しく悪化します。
ワイドイベントのアーキテクチャ
コード全体にログ文を散在させるのではなく、サービスごとにリクエストごとの包括的なイベントを1つ作成しましょう。
// ❌ Traditional scattered logging
logger.info("Request started");
logger.info(`User ${userId} found`);
logger.info("Fetching cart");
logger.debug(`Cart has ${items.length} items`);
logger.info("Processing payment");
logger.error(`Payment failed: ${error.message}`);
// ✅ Wide event - build throughout request, emit once
const event = {
request_id: req.id,
timestamp: Date.now(),
service: "checkout",
version: "2.3.1",
user: { id: userId, tier: "premium", account_age_days: 847 },
cart: { id: cartId, item_count: 3, total_cents: 15999 },
payment: { method: "card", provider: "stripe", latency_ms: 234 },
outcome: "failure",
error: { type: "PaymentDeclined", code: "card_declined", retriable: true }
};
logger.info(event);
主な概念
| 概念 | 定義 |
|---|---|
| ワイドイベント | リクエストごと、サービスごとに1つ記録する、包括的でコンテキストが豊富なログ |
| カーディナリティ | 一意な値の数(ユーザー ID は高く、HTTP メソッドは低い) |
| 次元数 | イベントごとのフィールド数(意味のあるフィールドを40個以上目指します) |
| テールサンプリング | リクエスト完了後に、その結果に基づいてサンプリングを決定します |
このスキルを適用する場面
- 新しいサービスにロギングを実装するとき
- ログ文を含むコードをレビューするとき
- 本番環境の問題をデバッグするとき
- オブザーバビリティ戦略を設計するとき
- printf 形式から構造化ロギングに移行するとき
- クエリのしやすさを高めながらログ量を削減するとき
このスキルで提供する内容
- さまざまなフレームワークや言語向けのワイドイベントのパターン
- 高カーディナリティのデバッグに向けたフィールド設計のガイダンス
- シグナルを維持するサンプリング戦略
- 既存のロギングコードにおけるアンチパターンの検出
- ログアーキテクチャにおけるクエリファーストの考え方
コメント
Markdown 対応