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

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

More than 3 years have passed since last update.

Mackerelとは (鯖=マカレル)

サーバに入らなくてもウェブ上からサーバを監視した結果を閲覧できるサービス(Saas)

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

導入方法

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

対応アプリは以外と多く弊社ではSlackに通知が来るように設定している。
image

特徴

  • 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待ちプロセス数で表記

    load averageを見てシステムの負荷を確認する

mackerelをitamaeで導入

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

桜庭先生お手製コード入り
image

早速Gemfileに追記する

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は有料なので本番環境だけに入れるなど配慮があると良いはずです。

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

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

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

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

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

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"
      }
    }


注意:これはngixとunicorn編成の場合の設定です。
apikey はmackerelのページから取得してください

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

それ以外の環境に関しては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

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

  • nginx
  • php-fpm

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

  • connectivity
  • CPU
  • Memory
  • FileSystem
  • loadavg

合計7項目のチェックが行われているようだ

外形監視

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

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

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

basicinc
マーケティングとテクノロジーで社会のあらゆる問題を解決する集団
https://tech.basicinc.jp/
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