Git Product home page Git Product logo

learning-observability's Introduction

learning-observability

オブザーバビリティについての説明資料

推測するな、計測せよ

ルール1: プログラムがどこで時間を消費することになるか知ることはできない。ボトルネックは驚くべき箇所で起こるものである。したがって、どこがボトルネックなのかをはっきりさせるまでは、推測を行ったり、スピードハックをしてはならない。 ルール2: 計測すべし。計測するまでは速度のための調整をしてはならない。コードの一部が残りを圧倒しないのであれば、なおさらである。

By Rob Pike (引用元 wiki/UNIX哲学)

オブザーバビリティ (可観測性) とは

  • システムの状態を外部から観測し、理解する能力を指します。具体的には、システムの動作状況、パフォーマンス、内部状態などを把握できることを意味します。
  • 📝 Go言語による分散サービスの一文を紹介

オブザーバビリティの 3本柱

  • ログ
  • メトリクス

メトリックスは、マクロな統計情報。だいたい平均は100mSで終わってる、80パーセンタイルの処理時間は120mS、95パーセンタイルは400mSみたいな、「なんとなく」を掴む方法。メモリ使用量、CPUなどのシステムの状態を把握し、異常が起きそうかどうか、余裕があるかどうかを把握するために使うもので、SRE本ではかなり強調されているもの。

  • トレース

トレーシングはどの処理がどの順番で行われているか、どのぐらい処理時間がかかっているかをミクロに見ていくことによって、システムの状況を把握しやすくする。

(引用元 OpenCensus(OpenTelemetry)とは 一読を進める) (OpenTelemetryとgo-chiを繋げてみる 続編のこちらも一読を進める)

従来の3本柱ではメトリクス、ログ、トレースが別々のシステムとして扱われ、データが分断されているため相関関係を見つけるのが難しくなっています。

OpenTelemetryではメトリクス、ログ、トレースを一つの一貫したグラフにまとめ、あらゆるテレメトリーのあらゆる形態を相関させることで、統一された分析を可能にし、遠く離れた重要な関連性をも見つけ出すことを可能にします。

OpenTelemtryはメトリクス、ログ、トレースのようなテレメトリーデータを作成し、管理するために設計されたオブザーバビリティの標準仕様であり、ツールキットです。 OpenTelemetryでは、仕様に基づいて各言語向きライブラリが実装されており、アプリケーションやシステムを、その言語やインフラストラクチャー、ランタイム環境に関係なく、簡単に計装することができます。 OpenTelemetryではオブザーバビリティを①テレメトリーの作成と転送②分析の2つの段階に分けた時の、①テレメトリーの作成と転送を行うための各種ツール、API、SDKのコレクションを提供しています。

(引用元 オブザーバビリティの最前線 OpenTelemetryで下げる認知負荷活用事例4選 一読を進める) (OpenTelemetryのこれまでとこれから こちらも一読を進める)

メトリクス、ログ、トレースをうまく使い分けて可観測性を高めよう

Go のロガーをどうするか

1.グローバル変数にloggerのインスタンスを入れておく

2.contextにloggerのインスタンスを入れておく

3.トレースIDなどを入れたloggerを適宜作ってcontextに格納する

4.構造体のフィールドにloggerのインスタンスを入れておく(DI)

(引用元 slog時代のGoではloggerをcontextで引きまわさなくて良い気がする)

その他参考

課題

各自のファイルアップローダーを観測できるようにする

                                          -----> Jaeger (trace)
App + SDK ---> OpenTelemetry Collector ---|
                                          -----> Prometheus (metrics)
  • メトリクスを Prometheus で確認できるようにする
  • トレースを Jaeger で確認できるようにする
    • HTTPリクエスト、MySQLにかかっている時間を計測可能にしたい
  • アクセスログやアプリケーションログを標準出力に出力する
  • ログとトレースをトレースIDで紐付ける

(Other) References

Traces	Metrics	Logs
Stable	Stable	Alpha

Send telemetry to the OpenTelemetry Collector to make sure it’s exported correctly. Using the Collector in production environments is a best practice.

learning-observability's People

Contributors

kawabatas avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.