【誰でもできるサーバー監視】Mackerelをitamaeでさくっと導入して快適になりたい

#Mackerelとは (鯖＝マカレル)
サーバに入らなくてもウェブ上からサーバを監視した結果を閲覧できるサービス（Saas)

RailsのシステムでもCakeのシステムでもitamaeを使うとサクッと導入できる。

##導入方法
mackerel-agentをサーバにインストール
mackerel-agentがサーバの情報を集めmackerelに送信
mackerelが情報を解析し、グラフ化とかslack通知したりしてくれる
エンジニアがLINEとかslackやウェブ上で簡単に確認できて幸せ

対応アプリは以外と多く弊社ではSlackに通知が来るように設定している。
![image](https://basicinc.qiita.com/files/4edbed1f-42e8-8117-b8d4-2fc7b9faf695.png)


## 特徴

* itamaeで導入簡単
* Slackで通知を受け取れる　　　←　大切
* 鯖状態をグラフで監視可能
* 複数のサーバの一元管理
* 監視サーバを別途、構築、運用する必要がない

itamaeを設定、適応するとグラフで各サーバーの状態を表示、
問題発生時にslack等で通知する様に設定可能。


ざっくりとした導入の流れ

1. サーバにmackerel-agentをインストール
2. mackerel-agentプロセスが何を監視するか設定ファイルを記述
3. mackerelのページに登録したサーバの情報が表示されていれば完了

## mackarel-agentが監視可能な値
* loadavg
* cpu
* memory
* disk
* interface
* filesystem


その他プラグインにてunicornやapache、nginxなどの監視も簡単に行える。
https://github.com/mackerelio/mackerel-agent-plugins

## 基礎単語

* ロール
  監視する単位（アプリ、DBなどの切り分けをする）

* オーガニゼーション
  会社の単位、会社の管理者が複数名いてその人が鯖管する

* loadavg：ロードアベレージ
システム全体の負荷状況を示す指標の一つであり具体的には
CPUの実行待ち時間　＋　ディスクI/O待ちプロセス数で表記
<a href = "http://qiita.com/k0kubun/items/8065f5cf2da7605c8043">
load averageを見てシステムの負荷を確認する
</a>


#mackerelをitamaeで導入
これを利用すると素早く導入することができる
https://mackerel.io/ja/blog/entry/weekly/20161104

桜庭先生お手製コード入り
![image](https://qiita-image-store.s3.amazonaws.com/0/69647/1f442b32-90d9-c81d-41b6-42e93dfa4d5c.png)



早速Gemfileに追記する

```rb:Gemfile
source "https://rubygems.org"

gem "itamae"
gem "itamae-plugin-recipe-selinux"
gem 'itamae-plugin-recipe-mackerel-agent' #　←追記

```

```:ターミナル
bundle install
```

レシピを追加する
cookbooks/mackerel 以下にmackerelのレシピを追加

```cookbooks/mackerel/default.rb
include_recipe 'mackerel-agent'

%w(mackerel-agent-plugins mackerel-check-plugins).each do |pkg|
  package pkg
end

service 'mackerel-agent' do
  action [:enable, :start]
end
```

レシピを順次実行するファイル（sabaku.rbとかrecipe.rbとか名前は自由）に以下の行を追記。
mackerelは有料なので本番環境だけに入れるなど配慮があると良いはずです。

```rb:sabaku.rb
case node[:env]
  when "production" then
    include_recipe "cookbooks/mackerel/default.rb" #追加
```

デプロイする際に利用するyamlまたはjsonファイルを編集

今回はjsonファイル、既存の本番環境構築時に利用するファイルに以下を追記する

先ほど書いた様にmackerelはプラグインを入れて機能拡張可能

apiキーはmackerelのページから取得

```json:json/production.json
  "mackerel-agent": {
    "start_on_setup": true,
    "plugins": [
      "mackerel-agent-plugins",
      "mackerel-check-plugins"
    ],
    "conf": {
      "apikey": "8hogehogefugafugapiyopiyopoyopoppofq",
      "roles": [
        "OCF:rails"
      },
      "plugin.metrics.nginx": {
        "command": "/usr/bin/mackerel-plugin-nginx"
      },
      "plugin.checks.check_unicorn": {
        "command": "check-procs --pattern unicorn"
      },
      "plugin.checks.check_nginx": {
        "command": "check-procs --pattern nginx"
      }
    }
```

<font color="red">
注意：これはngixとunicorn編成の場合の設定です。
apikey　はmackerelのページから取得してください

rolesの値がMackerelのページ内の監視枠になります、以下のようなネーミングにすると良いかもしれません。
サービス名：監視項目
</font>

それ以外の環境に関してはmackerel-agentのgithubをみてページ内検索で探すと便利
https://github.com/mackerelio/mackerel-agent-plugins

ローカル環境、テスト環境で正常にmackerelから信号が帰ってきたことを確認後、おきまりのitamaeコマンドをサーバーに適応する。

```
bundle exec itamae ssh --user ユーザー名 --host 適応したいサーバのIPアドレス -j json/production.rb sabaku.rb
```

itamaeの適応が完了次第mackerelのウェブサイト側から確認する。
![image](https://qiita-image-store.s3.amazonaws.com/0/69647/0dbe186f-edb6-8922-4d3f-f30b6bfa2ff8.png)


右のステータスバーからはプラグインで追加設定した2つの設定

* nginx
* php-fpm

プラグイン不要のウェブサイト側の左メニューmonitorsで追加した5項目

* connectivity
* CPU
* Memory
* FileSystem
* loadavg

合計7項目のチェックが行われているようだ
<img src="https://qiita-image-store.s3.amazonaws.com/0/69647/44c68dc4-301f-4507-37bd-4ebc3005d924.png" width="30%" height="70%">


#外形監視
サーバが生きているのか、死んでいるのかを定期的にmackerelがアクセスを行い監視してもらえます。
htmlのbodyに書いてある内容もチェックできるのでエラーを吐いているかなども監視可能です。

* レスポンスタイム
* リクエストボディー
* リクエストヘッダ
* 証明書有効期限


以下のURLから設定可能
https://mackerel.io/orgs/登録名/monitors#create