Prometheus+Grafanaでパフォーマンス監視をしています

開発Div藤村です。

当社ではサーバのパフォーマンス監視にPrometheus+Grafanaを導入しており、その作業を記事にします。

なぜPrometheus+Grafana?

簡単に構築できて情報収集ができるPrometheusと、多彩なグラフ表示ができるGrafanaの組み合わせで、サーバ監視を行っている事例がここ数年増えていたので、当社でも試してみました。

PrometheusとExporterの構築

Prometheusのインストールはいろいろなところで記載されているので、割愛します。
Prometheusは「prometheus.yml」という設定ファイルに記載された監視対象のサーバにアクセスを行って、データを取得する仕組みなので、まずは監視対象サーバにデータを収集するアプリケーションが必要ですが、様々な物が既に用意されています。
今回はサーバリソースを収集するexporterを利用して監視を行います。
当社ではCentOSとWindowsでサービス提供を行っているので、CentOS用にnode_exporter(https://github.com/prometheus/node_exporter)を、Windows用にwmi_exporter(https://github.com/martinlindhe/wmi_exporter)をそれぞれインストールします。

インストールといってもCentOSの場合は「node_exporter-0.15.2.linux-amd64.tar.gz」、Windowsの場合は「wmi_exporter-amd64.zip」を展開して実行ファイルを起動するだけです。 node_exporterは9100番ポート、wmi_exporterは9182番ポートをそれぞれ利用するので、ポート開放を行います。
あとはPrometheusをインストールしたサーバにある「prometheus.yml」にそれぞれのサーバを下記のように記載していきます。

scrape_configs:
  - job_name: 'job01'
    static_configs:
      - targets: ['127.xxx.xxx.xxx:9100']
  - job_name: 'job02'
    static_configs:
      - targets: ['127.xxx.xxx.xxx:9100']
  - job_name: 'job03'
    static_configs:
      - targets: ['127.xxx.xxx.xxx:9182']

記載が終わったらPrometheusの実行ファイルを起動します。
これだけで、サーバリソースの取得は完了です。

Webブラウザで9090番ポートにアクセスするとグラフ画面が表示されます。 StatusメニューからTargetsをクリックして、記載したサーバにちゃんとアクセスできているか確認して、Prometheusの設定は完了です。

f:id:t-fujimura:20180501111926p:plain
Prometheus設定確認

Grafana設定

Data Sourceの作成

Grafanaのインストールもいろいろなところで記載されているので、割愛します。 (なお当社ではPrometheusとGrafanaは同じサーバにインストールしています。)
Grafanaを起動して、Webブラウザで9090番ポートにアクセスすると、Data Sourceを作成するよう促されます。
そこでData Sourceのタイプに「Prometheus」を選択し、URLに「loclhost:9090」を選択します。

当社では特にPrometheusに対して認証を必要としないため、以上でData Sourceの作成は完了です。

Dashboardの作成

Data Sourceの作成が完了したので、Dashboardと呼ばれるグラフ画面を作成します。 1からグラフ画面を作成していくことも可能ですが、公式・コミュニティで作成済みのDashboardが公開されています。 (https://grafana.com/dashboards

今回も、node_exporter用・wmi_exporter用のDashboardが既に公開済みのため、それを流用します。
流用方法は、公開済みのjsonをダウンロードして、「Import dashboard」メニューから遷移したページで該当jsonをアップロードするだけです。

f:id:t-fujimura:20180501112214p:plain
公開済みのjsonをダウンロード
f:id:t-fujimura:20180501112218p:plain
jsonをアップロード
これで、Dashboardの出来上がりです。
f:id:t-fujimura:20180501111138p:plain
作成したDashboard

Alertの作成

本当にやりたかったのはこれです。
Grafanaには閾値越えのアラートを通知する仕組みがあり、メールはもちろん、Slackによる通知も可能です。

という訳で、Alert用のDashboardを作成し、Alert通知のルールを設定していきます。

当社で設定したAlertは下記です。

  • ・CPU使用率が70%を超えたら通知
  • ・Disk使用率が80%を超えたら通知


CPU使用率を取得するMetricsをnode_exporter・wmi_exporterそれぞれ記載し、AlertConditionsで閾値を設定します。

node_exporterのCPU使用率取得Metrics

``sum(rate(node_cpu{mode!="idle",instance="127.0.0.xxx:9100"}[5m]))``

wmi_exporterのCPU使用率取得Metrics

``sum(rate(wmi_cpu_time_total{mode!="idle",instance="127.0.0.xxx:9182"}[5m]))``

f:id:t-fujimura:20180501112815p:plain
Alert設定

最後にNotificationsでSlackを設定したら、完了です。
閾値を下げてテストをすると、ちゃんとSlackに通知されました。

f:id:t-fujimura:20180501112905p:plain
Slack連携

終わりに

次回はアプリケーションログから使用状況を取得して、見える化をKeepData Hubを利用して実現しているので、その内容を報告します。