サーバーやアプリケーションの状態を数値データとして収集・監視し、異常を検知して通知できるオープンソースの監視システムです。
・企業:複数のサーバーやサービスの稼働状況をリアルタイムで監視し、異常が発生した際にアラートで即座に担当者へ通知できます。 ・スタートアップ:自社のインフラ監視を無料で始められ、Grafanaと組み合わせることで本格的な監視ダッシュボードを構築できます。 ・個人事業主・フリーランス:自分が運用するサーバーやWebサービスの負荷状況を把握でき、障害の兆候を早期に発見できます。
DatadogやNew Relicはホスト数やデータ量に応じて月額費用が高額になりますが、Prometheusは自社環境で無料運用でき、クラウドネイティブな環境(Kubernetesなど)との連携にも標準対応しています。
PrometheusはCloud Native Computing Foundationのプロジェクトであり、システムおよびサービスの監視システムです。設定されたターゲットから指定された間隔でメトリクスを収集し、ルール式を評価し、結果を表示し、指定された条件が観察されたときにアラートをトリガーできます。
Prometheusを他のメトリクスおよび監視システムと区別する特徴は以下の通りです:
- 多次元データモデル(メトリクス名とキー/値ディメンションのセットで定義された時系列)
- この多次元性を活用する強力で柔軟なクエリ言語PromQL
- 分散ストレージに依存しない; 単一サーバーノードが自律的
- 時系列収集のためのHTTPプルモデル
- バッチジョブ向けの中間ゲートウェイを介した時系列のプッシュをサポート
- ターゲットはサービスディスカバリまたは静的設定で発見
- 複数のグラフ化およびダッシュボードモードをサポート
- 階層的および水平的なフェデレーションをサポート
アーキテクチャ概要
インストール
Prometheusをインストールする方法はさまざまです。
プリコンパイル済みバイナリ
リリースバージョンのプリコンパイル済みバイナリは、prometheus.ioのダウンロードセクションで入手できます。最新の本番リリースバイナリを使用することが、Prometheusのインストールとして推奨される方法です。 詳細については、ドキュメントのインストールの章をご覧ください。
Dockerイメージ
DockerイメージはQuay.ioまたはDocker Hubで入手できます。
以下のコマンドでPrometheusコンテナを起動して試すことができます
docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus
Prometheusはhttp://localhost:9090/でアクセスできるようになります。
ソースからのビルド
ソースコードからPrometheusをビルドするには、以下が必要です:
まずリポジトリをクローンします:
git clone https://github.com/prometheus/prometheus.git
cd prometheus
goツールを使用してprometheusとpromtoolバイナリをビルドし、GOPATHにインストールできます:
go install github.com/prometheus/prometheus/cmd/...
prometheus --config.file=your_config.yml
ただし、go installを使用してPrometheusをビルドした場合、Prometheusはweb/ui/static配下のローカルファイルシステムディレクトリからWebアセットを読み込むことを期待します。これらのアセットが見つかるようにするには、クローンしたリポジトリのルートからPrometheusを実行する必要があります。また、make assetsまたはmake buildを使用して明示的にビルドしない限り、このディレクトリにはReact UIが含まれないことに注意してください。
上記の設定ファイルの例はこちらにあります。
make buildを使用してビルドすることもできます。この場合、Webアセットがコンパイルに含まれるため、Prometheusをどこからでも実行できます:
make build
./prometheus --config.file=your_config.yml
Makefileには以下のターゲットが用意されています:
- build:
prometheusとpromtoolバイナリをビルド(Webアセットのビルドとコンパイルを含む) - test: テストを実行
- test-short: ショートテストを実行
- format: ソースコードをフォーマット
- vet: ソースコードの一般的なエラーをチェック
- assets: React UIをビルド
サービスディスカバリプラグイン
Prometheusには多くのサービスディスカバリプラグインがバンドルされています。Goのビルドタグを使用して、ビルドに含めるサービスディスカバリをカスタマイズできます。
make buildでビルドする際にサービスディスカバリを除外するには、.promu.ymlファイルのbuild.tags.allに目的のタグを追加します:
build:
tags:
all:
- netgo
- builtinassets
- remove_all_sd # すべてのオプションSDを除外
- enable_kubernetes_sd # kubernetesのみ再有効化
その後、通常通りmake buildを実行します。または、go buildを直接使用する場合:
go build -tags "remove_all_sd,enable_kubernetes_sd" ./cmd/prometheus
利用可能なビルドタグ:
remove_all_sd- すべてのオプションのサービスディスカバリを除外(file_sd、static_sd、http_sdは保持)enable_<name>_sd-remove_all_sd使用時に特定のSDを再有効化
現時点では推奨していないツリー外プラグインを追加する場合、go.modおよびgo.sumファイルを調整するための追加手順が必要になる場合があります。いつものように、サードパーティコードの読み込みには十分注意してください。
Dockerイメージのビルド
以下のコマンドでローカルにDockerイメージをビルドできます:
make promu
promu crossbuild -p linux/amd64
make npm_licenses
make common-docker-amd64
make dockerターゲットはCIシステムでの使用のみを目的としており、ローカルで実行しても完全に動作するイメージは生成されません。
PrometheusをGoライブラリとして使用する
Prometheusプロジェクト内では、prometheus/commonやprometheus/client-golangなどのリポジトリは再利用可能なライブラリとして設計されています。
prometheus/prometheusリポジトリはスタンドアロンプログラムをビルドするものであり、ライブラリとしての使用を想定した設計ではありません。一部をライブラリとして使用している方がいることは認識しており、意図的に不便を設けることはしていませんが、ライブラリとしてうまく動作するための配慮はされていないことをご承知ください。例えば、ライブラリとして使用した場合にのみ発生するエラーに遭遇する可能性があります。
Remote Write
Remote Writeのprotobufをbuf.buildで独立して公開しています。
ライブラリとして使用できます:
go get buf.build/gen/go/prometheus/prometheus/protocolbuffers/go@latest
これは実験的なものです。
Prometheusコードベース
go modのルールに準拠するため、PrometheusのリリースナンバーはGoモジュールのリリースと正確には一致しません。
Prometheus v3.y.zリリースでは、同等のv0.3y.zタグを公開しています。v0.3y.zのyは常に2桁にパディングされ、必要に応じて先頭にゼロが付きます。
したがって、Prometheus v3.0.0をライブラリとして使用したいユーザーは以下のようにできます:
go get github.com/prometheus/prometheus@v0.300.0
Prometheus v2.y.zリリースでは、同等のv0.y.zタグを公開していました。
したがって、Prometheus v2.35.0をライブラリとして使用したいユーザーは以下のようにできます:
go get github.com/prometheus/prometheus@v0.35.0
このソリューションにより、メジャーバージョンゼロでは破壊的変更が許可されているため、マイナーなユーザー向けリリース間で内部Go APIを破壊する可能性があることが明確になります。
React UI開発
ReactベースのUIのビルド、実行、開発に関する詳細情報は、ReactアプリのREADME(README.md)をご覧ください。
詳細情報
- Godocドキュメントはpkg.go.devで利用できます。Goモジュールの特性により、v3.y.zはv0.3y.z(v0.3y.zのyは常に2桁にパディングされ、必要に応じて先頭にゼロが付きます)として表示され、v2.y.zはv0.y.zとして表示されます。
- さまざまなコミュニケーションチャネルでPrometheusの開発者やユーザーに連絡する方法については、コミュニティページをご覧ください。
コントリビューション
CONTRIBUTING.mdを参照してください。
ライセンス
Apache License 2.0、LICENSEを参照してください。