knife-soloを使ってmackerel-agentを一撃でインストールする

はじめに

先日[レポート]「Mackerelによる簡単サーバー管理入門と発展形」 at 第21回さくらの夕べ in 札幌に参加してきたのを機に改めてmackerelに興味を持ったので、早速使ってみることにしました。今回はmackerel-agentのセットアップをknife-soloを使ってやってみたいと思います。

やってみる

mackerelのアカウントを作成する

mackerelのWebサイトの右上の[無料アカウントを作成]のボタンからアカウントを作成します。最初の1ヶ月間は無料、その後もFreeプランというのがあるので怖くないです。サクッと作りましょう。

Mackerel__新しいアプリケーションパフォーマンスマネジメント

アカウントを作成し、初めてログインした状態のmackerelコンソールです。Smokeymonkeyというオガーニゼーションが1つだけある状態で、ServicesもRoleもありません。

Smokeymonkeyのダッシュボード_·_Smokeymonkey

オーガニゼーションのAPIキーを確認する

mackerel-agentをmackerelに登録するためには、登録対象のオーガニゼーションのAPIキーが必要です。オーガニゼーションの[詳細]をクリックします。

Smokeymonkeyのダッシュボード_·_Smokeymonkey_と_名称未設定

オーガニゼーションの概要ページを開くと、下部に[APIキー]が表示されます。これが後ほどのrecipeで必要になります。

Smokeymonkey_·_Smokeymonkey_と_名称未設定

knife-soloのレシピ環境を整える

そもそもknife-solo環境が整備されていない場合は、MBAで以下のように環境を整えます。

$ gem install chef
$ knife configure
$ gem install knife-solo
$ knife solo init chef-repo

次にGithubに公開されているcookbook-mackerel-agentを取得...するのですが、他のcookbooks(yumとapt)との依存があるので、面倒臭いからBerkshelfを使ってごそっと用意します。

$ gem install berkshelf
$ cd ~/chef-repo/
$ vi Berksfile
source 'https://supermarket.getchef.com'
cookbook 'mackerel-agent', git: 'https://github.com/mackerelio/cookbook-mackerel-agent.git', tag: 'v1.0.0'
$ berks vendor cookbooks

今回はバッチサーバをセットアップすると想定し、rolesの下にbatch.jsonというファイルを作成します。YOUR_ORG_APIに先ほど確認したオーガニゼーションのAPIキーを入力します。rolesでは[サービス名:サーバ名]という形で設定します。今回はBatchサービスの中のbatch1というサーバであると想定しています。
他にバッチサーバとしてインストールしたいことやセットアップしたいことがあれば、このファイルに追加していきます。

$ vi roles/batch.json
{
  "name" : "batch",
  "json_class": "Chef::Role",
  "override_attributes" : {
    "mackerel-agent" : {
      "conf" : {
        "apikey" : "<YOUR_ORG_API>",
        "roles" : ["Batch:batch1"]
      }
    }
  },
  "run_list": [
    "mackerel-agent"
  ]
}

そうすると、こんな感じのディレクトリ構成になったかと思います。

.
├── Berksfile
├── cookbooks
│   ├── apt
│   ├── mackerel-agent
│   └── yum
├── data_bags
├── environments
├── nodes
├── roles
    └── batch.json

knife-soloを実行する

さて、本題です。まずはprepareで対象サーバにchefをインストールします。

$ knife solo prepare -i ~/.ssh/mykey.pem ec2-user@192.168.0.1

するとnodesフォルダの下にファイルが作成されるので、修正します。具体的にはrun_listで"role[batch]"が呼ばれるようにします。

$ vi nodes/192.168.0.1.json
{
  "run_list": [
    "role[batch]"
  ]
}

では実行!cookします!

$ knife solo cook -i ~/.ssh/mykey.pem ec2-user@192.168.0.1
Running handlers:
Running handlers complete
Chef Client finished, 3/10 resources updated in 8.231115224 seconds

できました!

mackerelコンソールを確認すると、ちゃんと登録されていますね!

Batch_·_Smokeymonkey_と_mackerel

さいごに

ということで、とりあえず使い始めてみました。今後もいろいろ試してブログにしてみたいと思います。