Prometheus和Elasticsearch有什么不同之处?

前言之前

最近风行的Prometheus和之前风行的Elasticsearch有何不同之处?
※由于我刚开始接触Prometheus,如果有错误请指正。

首先,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 は数値のみを格納でき、これについてアラートを設定できる。

数值对警报功能的差别不应该很大。

产品的目标

    • 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 |
                                             +-------+