さくらのナレッジ - 日本語で丁寧に整理されているように感じました。
以下では、3要素それぞれをシステムに適用していく際の個人的に指針としていることについてつらつらと書いていこうと思います。
システムの正常とは何か?
Metrics 自体は「定量化」「計測」などの意味しか持たないかとは思いますが、「プロアクティブ」的に考えると、計測結果をどう取り扱うべきかとセットで議論すべきかなと感じております。そう捉えた場合、大事だなと感じることは、上でも書きましたが 異常を検知
することだと考えています。そのためにはまず、 異常とは
を定義するにはどうすれば良いかでいうと、正常とは
から考え始める必要があるかなと思います。
例を挙げて説明すると「任意の API リクエスト成功率が、80%である」=「異常」は、正しいか。この質問に対する答えとしては「正しい」とも「正しくない」とも言えないと思います。なぜなら「正常」な状態がわからないから。乱暴な言い方をすると「いつも75%」なのであれば、「正常」となるかもしれません。
上記は、比較的わかりやすい例でしたが、日々扱っている複雑なシステムでは、そう簡単ではないケースもあるかと思います。しかし「正常とは何か」という問いが出発点になるのには変わりはないのではなかろうかと思っています。まずは「正常の定義」をしてから、その表現方法の1つとして “threshold(閾値)” を利用するのが良いかなと思います。後の細かい How に関しては、いろんな記事があるので、省略したい。
Logs で大事にしている・したいことは大きく2つ。
そのログ1行で、デバッグしてリリースできるか?
ここは、最初の方にもあげた他の方のブログの中にあった「システムの出力からある時点でのシステムの内部状態を一意に知ることが出来る」が全てという感じですが、ログ1行に対して、どれだけ意味が込められるかは大事にしたいと考えています。例えばでのあるあるは
ref. https://newrelic.com/resources/white-papers/log-management-best-practices
今目の前にあるログは、正しいか?
何かインシデントやエラーが発生して調査する際、CloudWatch Logs や Cloud Logging などのIaaSに統合されたサービスを利用したり、ELK Stack などのSaaSを利用したり、様々なツールを使うことが一般的かなと思います。では、“目の前にあるログは、正しい"でしょうか?これに対して「正しい」と答えるためには、ログが生成されてから人間が認識するまでのライフサイクルを理解することが大事だと考えます。
よく出てくる参考文献としては以下のようなところがあるので、載せておきます。
本投稿を書くにあたって、改めて Observability についていろいろ調べてましたが、今後は主に、トレーシングに関して「より広く」「より深く」拡張していくんだろうなという感覚を感じました。今後はそれを見据えて、トレーシングに関しても本格的にやっていきたい。
より広く
より深く