Grafanaは、オープンソースのeBPF自動計測ツールであるGrafana Beyla をリリースした。Beylaは、Linux HTTP/SとgRPCサービスの両方のスパン情報とREDメトリクス(Rate-Errors-Duration)をレポートできる。これは、プローブを挿入するためにコードを修正することなく実現される。
Grafana Beylaは、Go、NodeJS、Python、Rust、Ruby、.NETなどで書かれたHTTPおよびHTTPSサービスをサポートしている。Javaアプリケーションについては、現在のところHTTPのみがサポートされている。Goで書かれたgRPCサービスもサポートされている。
Beylaをインストールした後、実行ファイルの詳細をメトリクス・エクスポーターとともに提供することで、そのホスト上で実行中のサービスを計測できる。実行可能ファイルは、その名前(環境変数EXECUTABLE_NAME
を使用)またはアプリケーション内の任意のオープン・ポート(環境変数OPEN_PORT
を使用)で選択できる。次の例では、ポート8080を所有するアプリケーションを計測するようにBeylaを設定し、トレースを標準出力に、REDメトリクスをlocalhost:8999/metrics
に送信している。
BEYLA_PROMETHEUS_PORT=8999 PRINT_TRACES=true OPEN_PORT=8080 sudo -E beyla
サービスに問い合わせると、以下のフォーマットでログが返される。
request_time (response_duration) status_code http_method path source->destination request_size
EBPFトレーサーはプロセスを計測し、トレースを作成し、routesデコレーターに渡す。routesデコレータでルートを定義することで、HTTPパス(例:/user/1234/info
)をHTTPルート(例:/user/{id}/info
)にマッピングできる。そこからデータは様々なエクスポータやエンドポイントに転送される。
メトリクスはOpenTelemetryとPrometheusの両方のフォーマットでエクスポートできる。OTEL メトリックス・エクスポーターは、データを外部の OpenTelemetry メトリックス・コレクターにエクスポートする。OTELトレース・エクスポーターは、スパン・データを外部のOpenTelemetryトレース・コレクターに送信するために使用できる。Prometheus HTTPエンドポイントは、Prometheus形式のメトリクスのスクレイピングを可能にするHTTPエンドポイントを作成する。最後に、Beylaの内部メトリクスをPrometheusフォーマットでプルできる。
Beylaは、スタンドアロンのLinuxプロセスとして、Dockerを使用して、またはKubernetesサイドカー・コンテナとして実行できる。Dockerのアプローチは、コンテナ内で実行されているプロセスを計測するために使用できる。カーネルが4.18以上のLinuxが必要で、ホストでeBPFが有効になっている必要がある。
REDメトリクスのコンセプトは、2015年にGrafanaのCTOであるTom Wilkie氏によって 作られた。Wilkie氏は、USEメソッドがサービスに適用できないことに気づいた後、これを生み出した。USEメソッドは、与えられたリソースの利用率、飽和、エラーを監視する。REDメソッドでは、レート(1秒あたりのリクエスト数)、エラー(失敗しているリクエストの数)、継続時間(リクエストにかかる時間)を監視することに焦点を当てる。Wilkie氏はこう指摘する。
REDメソッドは、顧客がどの程度満足するかを知るための優れた代替策だ。もしエラー率が高ければ、それは基本的にユーザーに伝わり、ユーザーはページロードエラーを受けていることになる。表示時間が長ければ、ウェブサイトが遅いということだ。つまり、これらは意味のあるアラートを構築し、SLAを測定するための本当に良いメトリクスなのだ。
Grafana Beylaはパブリック・プレビューで利用可能で、Apache 2.0ライセンスの下でGitHubからダウンロードできる。リリースの詳細は、Grafanaブログ とBeylaのドキュメントで参照できる。