Prometheusとthanos
日本語の thanos の記事ってほぼ無いよなーという思い付きで書いてます.
アーキテクチャ
Section titled “アーキテクチャ”各コンポーネントごとに見ていきましょう.
Sidecar
Section titled “Sidecar”Prometheus と同じホストで動かすオブジェクトストレージにアップロードを行うコンポーネントです. また後述の Query コンポーネントから発行されたクエリを受け取って Prometheus に渡す役割も持っています. tsdb が吐き出されたらストレージにアップロードする仕組みなので,tsdb が吐き出される間隔=アップロード間隔になります. そのため storage.tsdb.min-block-duration と storage.tsdb.max-block-duration を同じ値にする必要があります.
クエリを叩くコンポーネントです. Prometheus と同じ API が実装されているので,Grafana や Trickster の参照元にできます. また Act/Act な Prometheus などの場合クエリの重複排除が必要となりますが,この Query がよしなにしてくれます. 前に確認したときは全部の Sidecar にクエリを投げていた気がしたんですが,今はどの Prometheus にクエリを投げるか判定してやってくれているみたいです.
Store Gateway
Section titled “Store Gateway”オブジェクトストレージのメトリクスを参照できるようにするコンポーネントです. キャッシュをメモリ上に展開するため,メトリクスの量によってはめちゃくちゃメモリを持っていっていました. 今は memcached に変更もできるようになったし,max-size が指定できるようにもなっているので安心.
Compactor
Section titled “Compactor”オブジェクトストレージにある tsdb をダウンサンプルするコンポーネントです. Prometheus でもクエリ効率を高めるために圧縮していますが,それのオブジェクトストレージ版です.
thanos と Alertmanager を連携するコンポーネントです.
導入メリット
Section titled “導入メリット”- データの長期保存をオブジェクトストレージに任せることができる
- よしなにクエリの重複排除をやってくれるので Act/Act 構成が組みやすくなる
普通に Prometheus しか使っていない場合は重複排除なんてないので Grafana のデータソースにはいつもは first が設定されていて,有事の際は second に切り替えるとかになると思います(Act/Stan 構成). thanos をデータソースにすれば重複排除をよしにやってくれるので, Act/Act 構成が簡単にできます.
つらいポイント
Section titled “つらいポイント”Store Gateway のメモリがきついかなというところでしたが,下記の issue が v0.11.0 で閉じられているのでそれ以降ならイケてそう.
store: Store gateway consuming lots of memory / OOMing · Issue #448 · thanos-io/thanos · GitHub
thanos の導入によってオブジェクトストレージにデータの永続化,またその永続化したデータに対しても PromQL で参照することができます. また重複排除などによってより良い感じの構成にすることが簡単になります. 最近はイマイチポイントも解消されてきていますので,みなさんも使ってみてください.