Elasticsearch
prometheus

Prometheus って Elasticsearch と何が違うの

More than 1 year has passed since last update.


まえおき

最近流行りの 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 |
+-------+