まえおき
最近流行りの 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 |
+-------+