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