👩‍💻

Loki v3 / BoltDBとTSDBについて調べてみた

2024/12/24に公開

この記事はTechPlay女子部アドベントカレンダー24日目の記事です。

Grafanaを運用している人は知っていますが、LGTMスタックって開発が活発でバージョン更新が頻繁に発生する。この記事は今まであまり気にしていなかったLokiコンポーネントのBoltDBとTSDB, スキーマの違いに関して深掘りしてみた。

Lokiは今後はTSDBへの移行を推奨している: https://grafana.com/docs/loki/latest/setup/upgrade/#330

BoltDBとは

こちらにあるとおり、Goで書かれたKey ValueストアでBtree形式で格納される。外部キーはサポートされていない。ACIDトランザクションをサポートしている。一度に許可される書き込みは1つだが読み取りはいくつでも許可されるようだ。ファイルロックがサポートされており、単一のメモリマップファイルにデータが保存される。開発自体は2017年に止まっており、作者はこれをもって完成していて追加の機能を作る予定はないとしているとGitHubにコメントされている。後継はbboltが推奨されている。

なんでTSDB?

このブログによると、Lokiチームはカーディナリティ、クエリスループット、信頼性が焦点になっていたようだ。
TSDB = Time Series DataBase は時系列データベースで、時系列データを格納するのに適しているデータベース。特徴としてはHEADと先行書き込みログ(WAL)の機能がある。クラッシュしても回復することが可能。さらにローテション機能があり、TSDBマネージャが古いHEADとWALを削除し、メモリとディスクを効率よく使用することができる。
また、圧縮機能によって長期データ保存に適している。その他にもクエリプランニングやインデックスサンプリングなどをサポートしている。

スキーマの違い

これは調べた感じだと明示的な定義は見つからず。公式には定義の更新の違いの記載がありますが、ユーザ側としては何が変わったかはリポジトリを追っていく必要がありそう。Loki v3系からはv13のスキーマ適用が推奨されるとある。

スキーマの移行

v2系のLokiを使用している場合、両方(boltdb/tsdb)の両方をサポートしているようなので、v3にアップデートする前に事前動作確認しておくと良さそう。
しかしながらこのIssueを見ると皆苦労しているようだ。。😓 一度移行して戻すとStatefulSetがきちんと動かないので注意⚠️

時代はv3

TSDB自体に圧縮機能があるため、helmで loki-distributor を利用している人は loki に移行が必要。Issueにもなっている。

Discussion