システムの運用・監視に用いられる考え方「Observability」(可観測性)
目次
Observability(オブザーバビリティ)のこれまでの流れ
Observabilityの概念は、制御理論やシステム理論の分野で初めて提唱されました。この分野では、システムの状態や動作を観測するための指標として、可観測性(observability)が重要な概念となっています。
その後、ソフトウェア開発の分野でもObservabilityが注目されるようになりました。特に、分散システムやマイクロサービスアーキテクチャの普及に伴い、複雑なシステムの可観測性の問題が顕在化してきました。
2010年代に入ると、Observability(可観測性)の概念がDevOps(開発担当と運用担当が連携・協力し、フレキシブルかつスピーディーに開発するソフトウェアの開発手法)の分野にも広がりをみせました。DevOpsでは、システム全体の可観測性を高めることで、システムのトラブルシューティングや改善を効率的に行うことが求められます。特に、コンテナ化やオーケストレーションの技術の進展により、ますます重要な役割を果たすようになっています。
現在では、システム監視やデバッグ、品質改善など、ソフトウェア開発や運用における重要な要素の一つとして認識されています。
Observability(オブザーバビリティ)とは
Observability(可観測性)は、システムの挙動を把握し、デバッグやトラブルシューティング、パフォーマンス改善をするための技術です。
Observability(可観測性)には3つの要素があります。
1、Metrics(メトリクス)
システムのパフォーマンスや使用状況を数値化したデータ。
2、Logs(ログ)
システムの動作やエラーを記録したデータ。
3、Traces(トレース)
システムの処理の流れを追跡したデータ。
これらの要素を組み合わせることで、システムの不明瞭な部分を特定し、デバッグやトラブルシューティング、パフォーマンス改善をすることができます。
Observability(可観測性)は、運用中のシステムの挙動を把握するための戦略であり、開発、運用のエンジニアが活用することが一般的です。
メリット
1、システムの不具合箇所などを特定できるため、デバッグやトラブルシューティングが容易になる。
2、運用中のシステムの挙動を把握することで、システムのパフォーマンスを改善するためのオペレーション戦略を立てることができる。
3、システムの変化に対応し、未然に予期せぬトラブルを防ぐことができる。
デメリット
1、データ収集や監視にかかるコストが高くなる。
2、取得する情報設計をきちんとしておかないと、必要のない情報を大量に取得することになってしまうので、可観測性を実現するためには、適切な情報設計が必要となります。
Observabilityを実現するためのツールの紹介
1、Metrics(メトリクス)
・Prometheus
【公式サイト】https://prometheus.io/
Prometheusは、オープンソースの分散監視システムです。時系列データベースとして構築されており、HTTPプロトコルを使用してメトリックデータを収集します。KubernetesやDockerなどのコンテナ環境にも対応し、任意のシステムに適用することもできます。
2、Logs(ログ)
・LogStash
【公式サイト】https://www.elastic.co/jp/logstash/
Logstashは、様々なデータソースからデータを収集し、格納し、変換し、検索するために使用されます。Apache Logs、Syslog、CSVなどのデータフォーマットをサポートしており、様々なデータ出力先を選択することができます。 データ分析、可視化、アラートなどのアプリケーションに使用することができます。
・Fluentd
【公式サイト】https://www.fluentd.org/
Fluentdは、ログデータを収集し、格納し、解析するために使用されます。様々なデータソースからのデータを収集することができ、JSONやMessagePackなどのフォーマットに対応しています。 様々なデータ出力先に対応しており、データ分析、可視化、アラートなどの機能を提供します。
Kubernetesなどの大規模な分散システムにも適しており、動的な環境においてもスケーラブルなデータ収集を実現するために用いることができます。
3、Traces(トレース)
・Zipkin
【公式サイト】https://zipkin.io/
Zipkinは、分散システム内のリクエストの処理時間を計測し、それらのリクエストがどのようにシステム内を移動したかを可視化することで、システムのパフォーマンスのボトルネックを特定し、デバッグするために使用されます。 マイクロサービスの微小なサービス構成に特に適しています。 Java、Python、Go、PHPなどの言語に対応しており、様々なデータ出力先に対応しています。
・Jaeger
【公式サイト】https://www.jaegertracing.io/
Jaegerは、分散システム内のリクエストの処理時間を計測し、それらのリクエストがどのようにシステム内を移動したかを可視化することで、システムのパフォーマンスのボトルネックを特定し、デバッグするために使用されます。
・OpenTelemetry
【公式サイト】https://opentelemetry.io/
OpenTelemetryは、アプリケーションのパフォーマンス、問題のトラブルシューティング、リソースの利用状況などを測定するために使用されます。 様々な言語に対応しており、様々なプロトコルをサポートしています。OpenTracingとOpenCensusの両方を統合し、開発者が一つのAPIを使用して、トレーシングとメトリック収集を実現することができます。
ZipkinやJaeger、 Prometheusなどのトレーシングやメトリックシステムを統合することで、標準化されたインターフェイスを提供することで、開発者が柔軟にトレーシングやメトリック収集を選択することができるようになります。
まとめ
Observabilityの考えを実現するために、オープンソースのツールをシステムに組み込むことで、システムの問題点を事前に知ることができるため、安定的なシステム運用には必ず必要なものであると感じます。システムのパフォーマンス、問題点を常に監視、分析し改善していくことをおすすめします。