production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

mackerelをAWS OpsWorks カスタムクックブックでインストールする方法

概要

これまで、Webサービスを作ったことはあれど、サーバーの管理/監視は構築したことがありませんでした。
手軽に導入したかったので、SaaS型サーバー監視サービスを導入しようと考えていました。
そこで、今回はmackerelを使って監視をしようと思います。また、AWS OpsWorksのカスタムクックブックでプロビジョニングしていたので、mackerelをAWS OpsWorks カスタムクックブックでインストールする方法について書こうと思います。

スタートアップガイドを読み、コード化対象のスクリプトを確認

何はともあれ、スタートアップガイドを読みます。今回はAmazonLinuxを使用しているので、それ用のガイドを読みます。

mackerel.io

ステップは超絶簡単ですね。

curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum.sh | MACKEREL_APIKEY='<YOUR_API_KEY>' sh
echo "apikey = '<YOUR_API_KEY>'" >> /etc/mackerel-agent/mackerel-agent.conf
sudo /sbin/service mackerel-agent start

こんだけ!

手順

API Keyの確認

まずはmackerelのダッシュボードでAPIキーの確認をします。

Organization > APIキータブ から確認します。

f:id:watasihasitujidesu:20180718074336p:plain

Chefのレシピ作成

AWS OpsWorks スタック におけるCustom Chef cookbooksを適用する方法 - production.log

こちらを参考にレシピを作っていきます。 レシピはスタートガイドにある通り、3つのコマンドを実行するだけのシンプルなものです。

api_key = node[:deploy][:testrooper][:mackerel_apikey]

execute "mackerel install" do
  user "root"
  command "curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum.sh | MACKEREL_APIKEY='#{api_key}' sh"
  action :run
end

bash "add api key" do
  not_if 'grep "apikey" /etc/mackerel-agent/mackerel-agent.conf'
  code <<-EOC
    echo "apikey = '#{api_key}'" >> /etc/mackerel-agent/mackerel-agent.conf
  EOC
end

execute "run agent" do
  user "root"
  command "/sbin/service mackerel-agent start"
  action :run
end

こちらのコードはGitで管理しているわけですが、APIキーをコードに直接書かないようにしています。
何も知らずにPublicリポジトリにしちゃったりなんだりした場合に、意図せずインターネットにAPIキーが晒されてしまうためです。
そのため、APIキーはOpsWorksのCustomJSONから取得するようにしています。

AWS OpsWorksでCustomJSONの設定

f:id:watasihasitujidesu:20180718074401p:plain
先述の通り、AWS OpsWorksのCustomJSONに記述したAPIキーを使ってプロビジョニングするので、その設定をします。

AWS OpsWorks > Stack > Stack Settings > Edit

{
    "deploy": {
        "testrooper": {
            "mackerel_apikey": "xxxxxxxxxxxxxxx"
        }
    }
}

Execute Recipes

最後に、カスタムクックブックを実行して終了です。
ステップは、Deployments > RunCommandで下記2つを実行するだけです。

  • Update Custom Cookbooksを実行
  • Execute Recipesを実行

f:id:watasihasitujidesu:20180718074431p:plainf:id:watasihasitujidesu:20180718074433p:plain

結果の確認

f:id:watasihasitujidesu:20180718074444p:plain
無事にmackerelのagentが動いていれば、ダッシュボードに1ホストだけACTIVEになっているはずです。

まとめ

無事にmackerelをAWS OpsWorks カスタムクックブックでインストールできました👏
そもそもの導入が簡単というのもありますが、手順をコード化することで、今後サーバーが何台増えてもレシピを実行するだけで済むようになりました。
あとは、mackerelの方で通知の設定などを行うだけで楽々とサーバー管理ができそうです!