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}
時系列データへのクエリは、すべてのラベルを指定する必要はなく、ラベルセットに対して、検索すると、マッチするすべての時系列データが返されます。
参考文献
- Betsy Seyerほか SRE サイトリライアビリティエンジニアリング オライリー 116-120