Help us understand the problem. What is going on with this article?

10分で理解する Prometheus

More than 1 year has passed since last update.

Prometheus とは

SoundCloud が中心になって開発しているプル型のリソース監視ソフトウェアです

アーキテクチャ

アーキテクチャを見ると複雑そうに見えますが、Prometheus はセットアップがめちゃくちゃ簡単です

全体を理解する

Prometheus でできること

監視の機能としてはあんまり目新しいものはないですが、監視対象が動的に変更されるようなスケーラブルな環境のリソース監視を意識した設計になっています

  • 監視対象のサーバーから情報を取得 & 保管
  • 保管済みデータに対して集計クエリを発行できる
  • しきい値を超えた場合のアラート (メール、Slack、がんばればTwilioで電話)
  • 柔軟なアラート設定 (同じエラーはまとめて通知とかの設定ができる)

登場人物

Prometheus で監視の仕組みを入れるためには、以下の2つだけ知っていればとりあえず使えます

名称 説明
exporter 監視対象サーバー上で動かすプログラム
テキスト形式でリソース情報を公開するWeb API のようなもの
監視対象のリソース毎に exporter が用意されている
prometheus 監視サーバーのプログラム
定期的に全ての exporter をポーリングしてリソース情報を収集する
監視したデータは prometheus 内の DB に保持される

それぞれ Docker イメージが提供されているので、以下の手順だけで特に複雑な設定は不要で動きます
- 監視したいサーバーで exporter の Docker コンテナを動かす
- 監視データ保管用のサーバーで Prometheus の Docker コンテナを動かす

exporter の種類

監視対象のサーバー上では、監視したいリソースの種類ごとに exporter を動かすことになります
各ミドルウェアのベンダーごとに exporter を公開してくれていてたくさん種類があります
https://prometheus.io/docs/instrumenting/exporters/

ちなみに過去にGPUマシンのリソース監視を入れた時には以下の2つの exporter を各GPUマシン上で動かしてます

名称 説明
node_exporter CPU、メモリなど物理マシンの情報を取得するための exporter
https://github.com/prometheus/node_exporter
nvidia_exporter GPUの利用使用状況を取得するための exporter
https://github.com/Nextremer/nvidia_exporter
nvidia-smi で表示されるデータを取得できる
tankbusta/nvidia_exporter をフォークして GPU のデバイスIDも取得できるように改良

exporter から取得されるデータ

例えば node_exporter が公開しているデータに直接 curl でアクセスしてみると、こんなデータが返ってきます
アクセス時点のリソースの測定値をテキスト形式で返却されているだけです

Prometheus サーバーは定期的にこのデータを収集しDBにこの値を格納していきます

node_exporter
$ curl http://hogehoge:9100/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.000111075
go_gc_duration_seconds{quantile="0.25"} 0.000244251
go_gc_duration_seconds{quantile="0.5"} 0.000264236
go_gc_duration_seconds{quantile="0.75"} 0.000295209
go_gc_duration_seconds{quantile="1"} 0.000693045
go_gc_duration_seconds_sum 187.504344849
go_gc_duration_seconds_count 237336
・・・

アプリの情報も exporter みたいにしたい!

概要が理解できると多分こういうことがやりたくなるはずです
その時点のユーザー数とか、登録数とか

アプリの統計情報を取得するための Json 形式の API を用意しておけば exporter と統合するのは簡単です

kibana でよくやるような、アプリログに出力されたデータから集計するためには Prometheus の FAQ を見てみたら "mtail使え!" と書いてました
ログを収集してメトリクス に変換するようなものですね
https://prometheus.io/docs/introduction/faq/#how-to-feed-logs-into-prometheus?
https://github.com/google/mtail

データを可視化する

監視対象から取得されたデータは、Prometheus 内の時系列データベースに保存されます
Prometheus サーバーにデフォルトで付いている GUI を使うと、こんな感じにグラフが表示できます

prometheus.png

データの取得には Prometheus のクエリを使います
これがなかなか難しいですが、ググればだいたいのことは誰かが解説してくれているものが見つかるので、クエリを自分で組み立てられなくてもとりあえずは困らないはずです

https://prometheus.io/docs/querying/examples/

例えば、各マシンのCPU使用率を取得するためには以下のようなクエリを書きます

例)CPU使用率を取得するクエリ
100 - (avg by (instance) (irate(node_cpu{mode="idle", instance=~"^%s:.+"}[5m])) * 100)

Grafana で可視化する

Prometheus のデフォルト GUI だと非常に見た目がしょぼくて機能も少ないです
Prometheus 自体のメイン機能は監視サーバーとDBの役割なのでそこは仕方ないでしょう

Grafana という可視化ツールと組み合わせると、イケてる見た目で非常に使いやすくなります

grafana.png

Prometheus と Grafana の関係は、elasticsearch と Kibana の関係のような感じです

※Grafana の解説 10分で理解する Grafana の記事も書きました!
https://qiita.com/Chanmoro/items/a23f0408f0e64658a775

もう一歩踏み込みたい方は

こちらの記事が非常にわかりやすいのでこの次に読んでみましょう!
次世代監視の大本命! Prometheus を実運用してみた

以上、快適なリソース監視ライフを!

scouty
「あらゆる事象を必然化し、 世の中のミスマッチをなくす」ことをミッションとし、AIヘッドハンティングサービスを開発・運営するスタートアップ
https://lapras.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした