Prometheus 監視をまるっと設定

これは TECHSCORE Advent Calendar 2017の7日目の記事です。

背景

こんにちは。土屋です。
皆さんはサーバー監視のツールとして人気が上がってきている、 Prometheus をご存知でしょうか。
どのくらい人気か、Google トレンドで他の監視ツールと合わせて調べてみました(※)。

※"[監視ツール] monitoring" で検索しています

図から見てもわかる通り、Prometheus のバージョン 1.0 が出てから現在まで右肩上がりになっています。
これは使ってみなければ!ということで、Prometheus を使ってサーバー監視を設定してみました。

しかし私はほんの1ヶ月前まで全くサーバー監視をしたことがなく、設定周りで慣れぬこともあり、環境構築に思いのほか時間がかかってしまいました。
基本的な監視方法で、かつ Prometheus や Alertmanager などの各種設定が1つにまとまっているサイトがあればいいな、と思い今回の記事を書くに至りました。

ゴール

Prometheus で監視ができるよう、インストールから起動、グラフを見るところまで行います。

上図のような要望があったとして、これらの要望を満たすため、今回は次のような環境構築をします。

なお、環境は次の通りです。Prometheus, Node exporter, Alertmanager Apache exporter, Blackbox exporter のバージョンは執筆時点で最新のものです。

  • OS: macOS Sierra
  • Prometheus: v2.0.0
  • Node exporter: v0.15.1
  • Alertmanager: v0.11.0
  • Apache exporter: v0.5.0
  • Blackbox exporter: v0.11.0

ダウンロード

公式から提供されている、Prometheus, Node exporter, Alertmanager, Blackbox exporterのバイナリファイルをダウンロードします(ダウンロードページはこちら)。

Apache exporter のバイナリファイルは、公式サイトの「EXPORTERS AND INTEGRATIONS -> Third-party exporters -> HTTP」から Apache exporter を辿り、Apache exporterのリリースページからダウンロードします。

次に、設定ファイルを用意する必要がありますが、設定ファイルは Prometheus, Alertmanager, Blackbox exporter のみでOKです。

Prometheus の設定

Prometheus には、監視対象の設定、監視方法の設定、アラートの設定が必要です。
今回は Prometheus のバイナリファイルと同階層に次の2つのファイルを作成します。

  • alert_rules.yml:alert push する条件の設定
  • prometheus.yml(※):監視対象、監視方法、alert push の設定

※ダウンロード時にディレクトリに含まれている prometheus.yml のファイルは使わないので、適当に名前を変更しておいてください

expr で指定するアラートの条件は、公式サイトに記載してある関数演算子を用いて設定します。

Alertmanager の設定

Alertmanager では以下の内容を設定する必要があります。

  • アラートするツール、アラート先
  • アラートのグループ化

Prometheus のアラートには、類似したアラートを1つにまとめるグループ化の概念があります。
https://prometheus.io/docs/alerting/alertmanager/#grouping

Grouping categorizes alerts of similar nature into a single notification. This is especially useful during larger outages when many systems fail at once and hundreds to thousands of alerts may be firing simultaneously.

ユーザーにとって無駄な通知を省くため、Prometheus のアラートでは、同じ種類のアラートは一つにまとめて通知するのが良いとされています。

今回はメールと Slack 宛に通知を送るよう設定してみます。
Alertmanager のバイナリファイルと同階層に設定ファイル alert.yml を以下のように作成します。

アラートのグループ化の定義について、文だけでは理解しにくいので、図にしました。

Blackbox exporter の設定

Blackbox exporter では外形監視の方法を設定します。
Blackbox exporter のバイナリファイルと同階層に設定ファイル blackbox.yml(※) を作成します。
ここでは、http を使ってサービスを監視する設定を行なっています。
※ダウンロード時にディレクトリに含まれている blackbox.yml のファイルは使わないので、適当に名前を変更しておいてください

Apache の設定

Apache exporter はデフォルトでは http://localhost/server-status/?auto にアクセスして、Apache の活動状況を取得します。
https://github.com/Lusitaniae/apache_exporter#apache-exporter-for-prometheus-

-scrape_uri string
URI to apache stub status page. (default "http://localhost/server-status/?auto")

Apache exporter 自身の設定は必要ありませんが、活動状況を取得できるように Apache に mod_status を設定する必要があります。

起動

監視対象のサーバーで、Node exporter, Apache exporter を起動します。

ローカルサーバーで Prometheus, Alertmanager, Blackbox exporter を起動します。

http://localhost:9090/targetsにアクセスすると、次のように監視対象が表示されます。

また、 Graph タグを表示し、メトリクスの評価式を入力した後に「Execute」を押すと、グラフが表示されます。
例として、CPU 使用率をグラフ化してみました。

CPU使用率は評価式「100 * (1 - avg(irate(node_cpu{job='node',mode='idle'}[5m])) BY (instance))」で表示できます。
ここで使用する評価式の関数は、ルールファイル(alert_rules.yml)の expr に記述したものと同様のものになります。
ただし、ルールファイルでは条件式とするために不等号が入っていますが、ここでの評価式では不等号は不要です。

もし、CPU 使用率が 90% を超えた場合、次のようにメールと Slack に通知が来ます。

以上で、Prometheus の一通りの監視設定をすることができました。

まとめ

最近ホットな Prometheus 監視をまるっと設定してみました。
今回取り上げた内容は次の通りになります。

  • Prometheus, Node exporter, Alertmanager, Apache exporter, Blackbox exporter のダウンロード
  • Prometheus の設定
    • alert push する条件の設定
    • 監視対象、監視方法、alert push の設定
  • Alertmanager の設定
    • アラートするツール、アラート先、アラートのグループ化の設定
  • Blackbox exporter の設定
    • 外形監視の設定
  • Apache exporter の設定
    • mod_status の設定
  • Prometheus, Node exporter, Alertmanager, Apache exporter, Blackbox exporter の起動
  • CPU 使用率の簡単なグラフ化

これから Prometheus を使ってみようと思っている方に、少しでも参考にしていただければ幸いです。
最後まで読んでいただき、ありがとうございました。

Comments are closed, but you can leave a trackback: Trackback URL.