LoginSignup
51
38

More than 5 years have passed since last update.

Prometheus って Elasticsearch と何が違うの

Posted at

まえおき

最近流行りの Prometheus は、ちょっと前から流行っている Elasticsearch と何が違うのか?:thinking:
※Prometheus は触りはじめて日が浅いので、誤りがあればご指摘ください。:bow:

そもそも Prometheus と Elasticsearch では目的が異なり、カバーできる範囲が異なる。
扱えるデータの種類は Elasticsearch のほうが広いので、まずは比較する機能を絞る。

  • Elasticsearch には全文検索の用途があるが、これは Prometheus とは関係ない。
  • インデックスを日付でわけて、ドキュメントのフィールドに時間を格納することで、 ログのフィールドを時系列で集計する運用について Prometheus と比較可能。
    • @timestamp といったフィールドに時間を格納したログやメトリクスを logstash-2016.11.06 といったインデックスに格納する使い方のこと。

本記事では、後者について述べる。

まずはお金

  • Elasticsearch でアラート機能を使うには有償の x-pack が必要になる。
  • Prometheus は OSS で、アラート機能を使える。

ちなみに、アラート機能を使わず、データを可視化したいだけなら、それぞれに対応する可視化製品の比較をすべきだろう。

  • Elasticsearch は Kibana と Grafana のどちらでも可視化できる。
  • Prometheus は Grafana で可視化できる。

ここでは Kibana と Grafana の比較は行わない。

格納するデータの種類

  • Elasticsearch は文字列や数値を格納でき、どちらについてもアラートを設定できる。
  • Prometheus は数値のみを格納でき、これについてアラートを設定できる。

数値に対するアラートの機能差は、大きくはないはず。:thinking:

製品の目的

  • Elasticsearch はデータを集積するのが目的なので、 データを欠損しないための工夫や、 クラスタを組んで可用性を高める工夫がある。
  • Prometheus はメトリックを監視するのが目的なので、 データの欠損はありうる。 と公式に記載されている。

ちなみに、目的の違いが、プル型・プッシュ型というアーキテクチャに反映されていると考えられる。

プル型・プッシュ型

発生したデータが Elasticsearch や Prometheus に格納される処理のトリガーが異なる。

  • Elasticsearch はプッシュ型。
    発生したログは Logstash や Fluentd が、メトリクスは Beats が、
    それぞれ Elasticsearch に送り付ける。

                            +----------+
                        +---* Logstash |
                        |   +----------+
                        |
    +---------------+   |   +---------+
    | Elasticsearch *<--+---* Fluentd |
    +---------------+   |   +---------+
                        |
                        |   +-------+
                        +---* Beats |
                            +-------+
    
  • Prometheus はプル型。
    Prometheus が発生したログを収集する。
    ログを持っている側は Prometheus がログを集められるようにAPIを用意する。

                         +--------+
                     +-->* Apache |
                     |   +--------+
                     |
    +------------+   |   +------------+
    | Prometheus *---+-->* PostgreSQL |
    +------------+   |   +------------+
                     |
                     |   +------+
                     +-->* Node |
                         +------+
    

Elasticsearch は無理させると死ぬが Prometheus は死ぬほど無理できない。

ドリルダウンの深さ

  • Elasticsearch はドキュメントベース。 たとえば Logstash で Apache アクセスログを送ったときには、 処理時間の長いログを上から順に抽出して、パスやステータスコード、サイズなどの 別のフィールドと関連させて分析することができる。
  • Prometheus はメトリックベース。 たとえば Apache エクスポーターでメトリクスを Prometheus に見せたときには、 長い処理時間がいつ発生したのかは分かるが、それを記録したログの中身は分からないので、 パスやステータスコード、サイズが何であったのかは分からない。

まとめ

  • とにかく無料でやりたいなら Prometheus でなくてはならず、
  • 文字列に対するアラートを仕掛けたいなら Elasticsearch でなくてはならず、
  • アラートが発報された後に分析を行いたいなら Elasticsearch でなくてはならず、
  • データ喪失を防ぎたいなら Elasticsearch でなくてはならず、

後は以下の観点などで選べばよい。

  • 好み。
  • 取得したいデータは Elasticsearch と Prometheus のどちらに格納しやすいか。
    • Elasticsearch なら grok や Beats の有無。
    • Prometheus なら エクスポーターの有無。

最後に、手間を惜しまないなら Elasticsearch エクスポーターを使って、
Prometheus と Elasticsearch のどちらも使えばよい。

                     +--------+
                 +-->* Apache |
                 |   +--------+
                 |
+------------+   |   +------------+
| Prometheus *---+-->* PostgreSQL |
+------------+   |   +------------+
                 |
                 |   +------+                +----------+
                 +-->* Node |            +---* Logstash |
                 |   +------+            |   +----------+
                 |                       |
                 |   +---------------+   |   +---------+
                 +-->* Elasticsearch *<--+---* Fluentd |
                     +---------------+   |   +---------+
                                         |
                                         |   +-------+
                                         +---* Beats |
                                             +-------+
51
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
38