Prometheus 2.0リリース

tl;dr: Prometheus 2.0が11月8日にリリースされました。ストレージとstaleness handlingが目玉機能です。

[Prometheus Tokyo Meetup #1](https://prometheus.connpass.com/event/53894/)開催当日に[Sneak Peak of Prometheus 2.0](https://prometheus.io/blog/2017/04/10/promehteus-20-sneak-peak/)の記事がたまたま出てきてどうなるのか気になっていましたが、あれから7ヶ月。ついに2.0がリリースされました。

以下は https://prometheus.io/blog/2017/11/08/announcing-prometheus-2-0/ の雑な訳です。

---

- [Announcing Prometheus 2.0](https://prometheus.io/blog/2017/11/08/announcing-prometheus-2-0/)
- Posted at: November 8, 2017 by Fabian Reinartz on behalf of the Prometheus team

---

## Prometheus 2.0の発表

[2016年7月にPrometheus 1.0がリリース](https://prometheus.io/blog/2016/07/18/prometheus-1-0-released/)されて1年半が経ちました。1.0も大きなマイルストーンでした。
Prometheus開発者チームは1.0においてシンプルでありながら非常に強力な監視哲学を実現する機能を提供しました。

1.0リリース以降（2017年11月の最新リリース1.8.2に至るまで）、さまざまなサービスディスカバリ連携、PromQLの拡張を追加改善し、プラガブルな長期用ストレージソリューションを可能にするリモートAPIの初期開発を行ないました。

では、2.0のメジャーリリースでは何が変わったのでしょうか。

## Prometheus 2.0

Prometheusはユーザに優しいシンプルでロバストなオペレーションモデルを持っています。
しかし、インフラストラクチャ空間についてはそうなっておらず、KubernetesやMesosのようなプロジェクトはソフトウェアをどのようにデプロイ・管理するかを大きく変えてきたこともあり、モニタリングされる環境はよりダイナミックなものになってきました。

それに伴い、Prometheusのパフォーマンスに課題を感じるようになりました。これまでのストレージサブシステムでは想定される利用量に応じて慎重に設定する必要がありました。
Promethues 1.6では、キャパシティ自動チューニングでこの課題を大幅に緩和しました。
それにも関わらず、Prometheusユーザは必然のハードリミットに突き当たっていました。

### ストレージ

2017年初、調査に入りました。新しい高性能な時系列データベースは実用的なベンチマークが出せることが確認できました。その後の6ヶ月の間に、[独立した時系列データベース](https://www.youtube.com/watch?v=b_pEevMAC3I&list=PLoz-W_CUquUlnvoEBbqChb7A0ZEZsWSXt&index=29)として安定化させ、これをPromethues本体と連携し直しました。
これにより、Prometheus 2.0で、全面的なパフォーマンスの改善を達成しています。
クエリのレイテンシはさらに安定し、特により多くの系列のクエリでもスケールするようになりました。
複数の実際のプロダクトション環境で計測された通り、リソース消費量が大幅に削減できました：

- **CPU使用率**： **20-40%**削減 （Prometheus 1.8と比べ）
- **ディスク使用量**： **33-50%**削減 （Prometheus 1.8と比べ）
- **ディスクI/O**： 平均で**1%未満**（大量のクエリをかけていない場合）

![resource-comparison-cb3363e2f4f.png](https://qiita-image-store.s3.amazonaws.com/0/49113/fb0614d8-3af4-71dc-bc08-3af9950ae733.png)

このストレージシステムは、近年の急激なダイナミックなモダンコンピューティング環境にも対応しています。

## 過去のモニタ対象の扱い（Staleness handling）

他にも、多くの大小の変更により、Prometheusのエクスペリエンスをより一貫的かつ直感的にしています。そのうちの一つが長いことロードマップに置かれていた、[staleness handling](https://www.youtube.com/watch?v=GcTzd2CLH7I&list=PLoz-W_CUquUlnvoEBbqChb7A0ZEZsWSXt&index=32)です。
これの新たな改善により、消えてしまったモニタ対象ターゲットや系列がトラックされ続けるようになります。これにより、アーティファクトのクエリを減らせたり、アラートの反応性がよくなります。

## その他の改善

Prometheus 2.0では、データベースのスナップショットのフルバックアップがビルドインサポートされました。

また、レコーディングルールとアラートルールを従来のカスタムフォーマットからYAMLフォーマットに統合しました。
これにより、設定管理とテンプレート化が統合しやすくなりました。

小さな変更やクリーンアップも多数あります。完全な変更概要やアップグレードする方法には[Prometheus 1.xを2.0にするマイグレーションガイド](https://prometheus.io/docs/prometheus/2.0/migration/)を見てください。
心配する必要はありません。Prometheus 2はこれまで利用してきたPromethuesと変わりません―非常に高速で運用しやすいままです。

## 今後はどうなるの

新しいストレージサブシステムはアクセスしやすく、かつ、拡張しやすくなっています。
Prometheus本体に直接連携しやすい機能を提供しているので、カスタムツールもそのストレージの上に構築しやすくなっています。
シンプルでオープンなストレージフォーマットとライブラリがあるので、ダイナミックリテンションポリシーのようなカスタム拡張を実装することが簡単です。
Prometheusは本体からストレージを分離することにより、本体を複雑にすることなく多くの要件に合致できるストレージレイヤを提供でき、本体はコアの目標にフォーカスできるようになりました。

リモートAPIはPrometheusのモデルの信頼性とシンプルさを失うことなく、長期保存に耐えうるストレージの要件を満たせるような進化を継続していきます。

## 試してみて！

これまで同様に、[オフィシャルのバイナリ](https://prometheus.io/download/#prometheus)や[コンテナイメージ](https://quay.io/repository/prometheus/prometheus?tab=tags)をダウンロードするだけで、Prometheus 2.0を試すことができます。
Prometheusを動かすまでのチュートリアルが[Getting started](https://prometheus.io/docs/prometheus/latest/getting_started/)ページにあります。

Prometheus 1.xからのアップグレードをする場合は、[マイグレーションガイド](https://prometheus.io/docs/prometheus/2.0/migration/)を確認してください。
移行期間中にリモートAPIを使って、古いPrometheusサーバからデータを取得する方法などが書かれています。

プレリリースで広くテストしていただき、イシューのデバッグに協力いただいたユーザの皆さまに感謝します。この大きなマイルストーンはテストユーザなしには実現しませんでした！


---

![](https://connpass-tokyo.s3.amazonaws.com/thumbs/6d/84/6d84f2047df0e9f77d342ee08d393f5a.png)
Prometheus TokyoではPrometheus Tokyo Meetupイベント開催時の登壇者を募集しています。発表してもいいよという方がいらっしゃいましたら、[こちらのフォーム](https://goo.gl/forms/hW7Xla3rrHwjQaw62)から記入をお願いいたします。