Skip to content

Prometheusとthanos

日本語の thanos の記事ってほぼ無いよなーという思い付きで書いてます.

GitHub - thanos-io/thanos: Highly available Prometheus setup with long term storage capabilities. A CNCF Incubating project. · GitHub

各コンポーネントごとに見ていきましょう.

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 にクエリを投げるか判定してやってくれているみたいです.

オブジェクトストレージのメトリクスを参照できるようにするコンポーネントです. キャッシュをメモリ上に展開するため,メトリクスの量によってはめちゃくちゃメモリを持っていっていました. 今は memcached に変更もできるようになったし,max-size が指定できるようにもなっているので安心.

オブジェクトストレージにある tsdb をダウンサンプルするコンポーネントです. Prometheus でもクエリ効率を高めるために圧縮していますが,それのオブジェクトストレージ版です.

thanos と Alertmanager を連携するコンポーネントです.

  • データの長期保存をオブジェクトストレージに任せることができる
  • よしなにクエリの重複排除をやってくれるので Act/Act 構成が組みやすくなる

普通に Prometheus しか使っていない場合は重複排除なんてないので Grafana のデータソースにはいつもは first が設定されていて,有事の際は second に切り替えるとかになると思います(Act/Stan 構成). thanos をデータソースにすれば重複排除をよしにやってくれるので, Act/Act 構成が簡単にできます.

Store Gateway のメモリがきついかなというところでしたが,下記の issue が v0.11.0 で閉じられているのでそれ以降ならイケてそう.

store: Store gateway consuming lots of memory / OOMing · Issue #448 · thanos-io/thanos · GitHub

thanos の導入によってオブジェクトストレージにデータの永続化,またその永続化したデータに対しても PromQL で参照することができます. また重複排除などによってより良い感じの構成にすることが簡単になります. 最近はイマイチポイントも解消されてきていますので,みなさんも使ってみてください.