ブログ

OpenMetrics:Prometheusは解放されますか?

OpenMetrics:Prometheusは解放されますか?

本文の内容は、2020年4月7日にSysdigのLeonardo Di Donatoが投稿したブログ(https://sysdig.com/blog/openmetrics-is-prometheus-unbound/)を元に日本語に翻訳・再構成した内容となっております。

この記事では、OpenMetricsを紹介し、それをPrometheus exposition formatと比較して、その実装の現在のステータスを確認していきます。

本記事は、2019年5月19日にバルセロナ🇪🇸で開催したCloud_Native Rejektsで行ったライトニングトークの進化版です。もともとはLeornardoのmediumで公開されました。

ここに、スライドもあります。👨‍🏫

歴史的に、監視環境は混乱してきました。今日もそうです。クラウドネイティブのすべての原則によってソフトウェアアーキテクチャがどのように変化したかを考えると、さらに悪いことになってます。

「技術者」として、私たちはこれについて何かをする必要があります。それ以外の場合は、独自のプラットフォームとアプリケーションを適切に監視できないことによって、連鎖が続きます。

20200408-1.jpg

The titan Prometheus unchained by Hercules, by Christian Griepenkerl.

OpenMetricsの登場です。

メトリクスデータを公開し、メトリクスを超えるツールを提供するために特別に設計された標準を作成することは、多大な努力が必要です。これは、可観測性がイベントログと関連づけで構成されているためです。

現時点では、まだドラフトであり、CNCFによってサンドボックス化されていますが、最終的な目標はRFCを持つことです。

ちなみに、いつであるか私に尋ねないでください...!

とにかく、怖がらないでください。それは複雑ではなく、一から学ぶ必要があるものでもありません。これは単なるワイヤプロトコルであり、 Prometheus exposition formatを出発点として使用して構築された観測可能性ストーリー全体の共通語です。

これまでのOpenMetricsの旅

誰もが今日 Prometheus exposition formatを知っていますよね?

メトリクスをテキストベースの形式で行ごとに表示するだけで、ヒストグラム、ゲージ、カウンター、および要約メトリクスタイプをサポートします。

そしてもちろん、Prometheusはメトリクスの作成が本当に得意であり、他には何もないのは事実です。 🤷‍♂️

Prometheusはより広範囲に採用されており、それは非常に迅速に行われています。形式がシンプルで読みやすいため、Prometheusは階層ではなくラベルを適用します。フィールドにも何もなかったからでもあります...

Prometheusの前に何を持っていましたか?

素晴らしいSNMP? 🤦‍♂他に何でしょう? 実装が困難なドキュメントが欠落している、階層的で厳密なデータモデルが含まれている、またはこれらの欠陥がすべて一緒になっていた、他の独自の形式?

したがって、それは簡単な勝利だったと主張することができます。しかし、安心してください。コンピュータに勝つことは簡単ではありません。 少なくとも永続的なものではない...

標準化

では、なぜOpenMetricsが必要なのでしょうか。真実はありません。

世界は、特に、クラウドネイティブではない世界の一部を必要としています。従来のネットワーキング、ストレージ、ハードウェアベンダーを意味します。

はい、政治は世界の一部です。従来のベンダーはロックインを回避したり、外部(または競合)製品をサポートしているように見える場合があります。彼らは通常、公式の規格のみを使用することを好みますが、それはまったく問題ありません。

OpenMetricsは、すべてのシステムが特定のワイヤー形式でデータを取り込んで出力できるようにし、そのワイヤー形式がどうあるべきかについて合意することを目的としています。HTTPを介して自分自身について話し合うこと。OpenMetricsは、あなたが反対側で何をしなければならないかを規定することを意図していません。その目的は、n次元空間の概念をラベルを介して世界に紹介することです。そしてこれを行うことで、OpenMetricsはその目標の1つである階層データモデルの概念を完全に無効にします。

これを達成する方法は、公式のオープンスタンダードを作成することです。共有された問題を解決するための協力を促進するために、すべてのユーザーがブランドのないベンダーニュートラルガイドラインを読み、実装して利用できます。

OpenMetricsの目新しさ

Prometheus exposition formatとOpenMetricsは、いくつかの改善を除いて、基本的に同じです:

  • 公式のIANAポート割り当て(おそらく)
  • 登録されたcontent-type/mime-type
application/openmetrics-text 
  • メトリクスの単位を表す新しい記述子ディレクティブ(情報および状態セットを除くすべてのメトリクスタイプで機能します)--つまり、UNIT。
# UNIT foo_seconds seconds
  • シングルラインは常にLINE FEED(つまり、\n)で終了しますが、メトリクスセットには、途切れた応答を検出するためにエンドマーカー(つまり、#EOF)が必要になります。
# HELP test_m Bla bla bla description no one really reads
# TYPE test_m counter
# UNIT potatoes 🥔
test_m{...} x
test_m{...} x
# EOF 
  • UNIXタイムスタンプ(秒)。
  • HELPディレクティブとラベルの同じエスケープルール。
  • トークン間の空白の処理が改善されました。

OpenMetricsでは、新しいメトリクスタイプも導入されています。

  • 列挙型、ビットマスク、一般的にはブール値を表すためのステートセット。
# TYPE foo stateset
foo{entity="controller",foo="a"} 0
foo{entity="controller",foo="b"} 1
foo{entity="replica",foo="a"} 0
foo{entity="replica",foo="b"} 1
# EOF 
  • 情報がラベル(または時間、あるいはその両方)でどのように変化するかを監視するメトリクスで構成される情報メトリクス。
# TYPE x info
x_info{entity="ctrl",name="pretty",version="8.1"} 1
x_info{entity="repl",name="prettier",version="8.2"} 1 
  • gauge histograms--つまり、ゲージのヒストグラム
  • unknown--つまり、Prometheusが型なしメトリクスと呼ぶもの

そして最後に、exemplarsは、ヒストグラム(またはゲージヒストグラム)バケットごとに最大1つです。

これらは、トレースにIDを添付して、そのトレースに直接リンクできるようにするメカニズムです。

たとえば、バケット内のレイテンシが60秒を超えていることがわかっていて、その理由を知りたいとします。これで、他のトレースIDへのリンクがあるので、このトレースを正確に取得できます。

foo_bucket{le="0.1"} 8 # {} 0.054
foo_bucket{le="1"} 10 # {id="9856e"} 0.67

明らかに、すべての監視ソリューションがexemplarsをサポートするわけではありません。実際、それらはオプションになるように設計されています。

たとえば、現時点でのPrometheusの計画はそれらを無視しています。代わりに、OpenCensus(か、そのほかが間も無く)がそれらをサポートします。

最先端

Prometheusはバージョン2.5.0以降のOpenMetricsをサポートしており、OpenMetricsエンドポイントを透過的にスクレイピングできます。

テキスト形式の既存のドラフトの実験的な最初の参照パーサーを実装しているため、公式のPythonクライアントでOpenMetricsを発行できます。

GoogleやUberなどの非常に重要な企業がOpenMetricsをサポートしており、間もなく他のリファレンスパーサーを実装する予定です。

OpenCensusは、OpenTelemetryと呼ばれる取り組みでOpenTracingと統合する予定で、OpenMetricsを組み込みます。

OpenMetricsの実装を開始する場合、または手作りのエンドポイントを移植する場合は、前述のPrometheus pythonクライアントを使用して、現在の標準に準拠していることを確認するためのワンライナーがあります

import sys
from prometheus_client.openmetrics import parser
s = """test_packets{key="a",node="b"} 8
# EOF
"""
list(parser.text_string_to_metric_families(s)) 

OpenMetricsのサブセットに対する今年の実験的なサポートが含まれているため、公式のGolangライブラリを使用することもできます。

そして数ヶ月前に、OpenMetricsパーサーとその結果としての説明形式をテストするためのCLIが公開されました。

まだ何もありません。

そして、それはほぼ3年前から作成されているので、これは問題です!

私たちは皆、単純に見えるものは通常うまくいくのが難しいことを知っています。

欠けているのは、絶え間ないコミュニケーションと、おそらくコミュニティが明確にそれを形作る手助けをするために開発するテストスイートのようなツールです。

そして最後にそれを産む!

私たちは最近、Sysdig MonitorでのPrometheusの完全な互換性を発表しました。これには、OpenMetricsのサポートが含まれています。 そして最後に、この記事を楽しんだ場合は、PrometheusメトリクスとOpenMetricsを使用してコードを計測する方法を学ぶことにも興味があるかもしれません。

最近の投稿

カテゴリー

アーカイブ

ご質問・お問い合わせはこちら

top