Prometheusへmuninから移行を検討④　〜移行検討　その１〜

以下で基本的な部分は理解したと思ってます。
[prometheusの設定](https://qiita.com/kohei-okamura/items/2924bf0feaa129c679f0)
[grafanaの設定](https://qiita.com/kohei-okamura/items/21883846a8f82a79c91a)
[alertmanagerの設定](https://qiita.com/kohei-okamura/items/db959b7cc89cb41e157b)

muninでは基本部分のほかにNginxやphpfpmも監視しているので、
同じような事ができるのか確認していきます。

# 対象追加
移行検討がフロントサーバなのでNginxとphpfpmの監視の可能なのか確認する。
## nginxの設定
そもそもstatus情報が取れないと監視出来ないので、
nginxの自体の設定ファイルに以下を追加しました。

        # Server Status
        location = /nginx_status {
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                deny all;
        }

wget等でローカルから「`http://127.0.0.1/nginx_status`」を確認して値がとれたらexporterの設定を行ないます。
以下からダウンロードしました。
[nginx_exporter](https://github.com/discordianfish/nginx_exporter)

そのまま実行できたのでnginx_exporterのディレクトリに移動して以下のようにしました。
<img width="744" alt="スクリーンショット 2018-05-02 17.50.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/247087/7b9d6a7b-e982-9041-1ee4-5550223711a6.png">

※自分の環境では以下が足りなかったので「go get」で取得して実行してます。
- go get github.com/prometheus/client_golang/prometheus
- go get github.com/prometheus/common/log

## php-fpmの設定
値はhttpアクセスでとるようにしたため、nginxの設定ファイルの変更が必要でした。

        location = /phpfpm_status {
                include fastcgi_params;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                allow 127.0.0.1;
                deny all;
        }

こんな感じです。
nginxと同様にローカルから「`http://127.0.0.1/phpfpm_status`」を確認しました。
次にphp-fpm用のexporterを探した結果、以下が見つかったので利用します。

[php-fpm-exporter](https://github.com/bakins/php-fpm-exporter)

ただ、bugもあったので若干改修して利用しました。

- masterリポジトリだとendpoint(URL指定）だとエラーになった。
- go 1.10だとmain.goがエラーとなる（go.uber.org/zapが機能しない）

この時点ではmasterではなく、最新リポジトリにしてます。
また、zapを使っている箇所をコメントにして対応しました。
（もっと良いexporterがあるかもしれないです）

こちらもダウンロードしたものをそのまま実行できたので、
php-fpm-exporterディレクトリに移動して以下のようにしました。
<img width="698" alt="スクリーンショット 2018-05-02 17.53.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/247087/2729e333-b936-3070-7f25-7f324cc02333.png">

## 値取得
nginxとphp-fpmの値が取得できるようになったので、
prometheusで取得し、grafanaで描画してみます。

まず、netstatで待受ポートの確認です。
nginxとphp-fpmの他にnode-exporterも起動しているのでその確認をします。

<img width="700" alt="スクリーンショット 2018-05-02 17.55.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/247087/46826357-6d31-0cd1-0af1-77e87ce40bd4.png">

次にprometheus.ymlのscrape_configsに設定を追加しました。
<pre>
  - job_name: 'test_front1'
    static_configs:
      - targets: ['対象サーバのIP:9100']
      - targets: ['対象サーバのIP:9113']
      - targets: ['対象サーバのIP:9913']
</pre>
こんな感じです。
## ブラウザ側でチェック
値が取れているかどうかをprometheusの画面（grafanaではない）で確認します。
「Execute」ボタンの横にあるプルダウンで「nginx_」や「phpfpm_」が確認出来ると思います。
<img width="548" alt="スクリーンショット 2018-05-02 17.58.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/247087/3174ca17-eb99-86bd-9d48-35d973e601be.png">
　※こんな感じでphp-fpmもあることを確認しました。

メニューにあるStatusのTargetsでEndpointのStateが「UP」になっていることでも確認できます。

## grafanaでダッシュボード追加
値がとれているので以下をGrafana Labからダウンロードして適用します。

- php-fpm_rev1.json（PHP-FPM)
- nginx-overview_rev4.json(Nginx Overview)

もっと良いダッシュボードがあるかもしれないですがこれを使わせてもらいました。

# まとめ
基本的なリソース監視は「Node Exporter Full」、
あとフロント使っているミドルウェアで「Nginx Overview」や「PHP-FPM」を使いました。
多分、DBとかの情報もexporterでデータをとってdashboardで表示という流れは変わらないと思うので、
応用できると思ってます。