アドベントカレンダー27日目:SREを読んでみた「時系列データからの実践的なアラート」編②

  • 2020.12.29
261
NO IMAGE

Borgmanは、Borgのモニタリングを行うシステムです。
Borgmanでは、データフォーマットを統一していました。これにより、システム間のオーバーヘッドをなくし、大量のデータを捌くことができるようになりました。
今日からデータの扱い方について、学んでいきます。

エクスポートされたデータの収集

Borgmanは決められた間隔で/varzからフェッチを行います。収集は他のターゲットの収集と足並みをそろえて、行われるわけではありません。
Borgmanは以下のターゲットに対して「合成」変数も記録します。

  • 名前がホスト名とポート番号に解決されたか
  • ターゲットが収集に対してレスポンスを返したか。
  • ターゲットがヘルスチェックに対してレスポンスを返したか。
  • 収集が完了した時刻1

これらの変数によって、対象のタスクが利用不可になっていることを検出するルールを簡単に作成できます。

時系列のアリーナにおけるストレージ

Borgmonは全てのデータをインラインメモリデータベースに保存し、定期的にディスクへの書き込みが行われます。
データポイントは(timestamp, value)の形式で行われます。ホストごとに時系列データとして、保管されます。また、それぞれのデータはname=valueの形式でユニークなラベルが付けられます。これは、時系列アリーナと呼ばれる固定サイズのメモリになっていて、アリーナがいっぱいになるとガベージコレクタが古いエントリから削除します。最新と最古のエントリの時間差はホライゾンと呼ばれます。1つのデータポイントに必要なメモリは約24バイトで100万個のユニークな時系列データを1分間隔で12時間保存するのに必要なRAMは、17GB弱になります。実際には、メモリ内のデータは定期的なアーカイブが行われます。

ラベルとベクタ

時系列データの並びはベクタと呼ばれます。時系列データの名前はkey=valueというペアで表されるラベルの集合です。時系列データには最低でも、次のラベルを持つ必要があります。

var(変数名)、job(モニタリングの対象となるサーバーの種類の名前。)、service(緩やかに定義された、ユーザーに対してサービスを提供するジョブの集合。ユーザーは内部の場合も外部の場合もある)、zone(この変数の収集を行ったBorgmonの場所(通常はデータセンター)を指すGoogleでの表現)

これらの変数は、変数式と呼ばれる以下のような形式をまとめられます。

{var=http_rquests,job=webserver,instancd=host:80,zone=us-west}

時系列データへのクエリは、すべてのラベルを指定する必要はなく、ラベルセットに対して、検索すると、マッチするすべての時系列データが返されます。

参考文献

  1. Betsy Seyerほか SRE サイトリライアビリティエンジニアリング オライリー 116-120