MackerelエージェントをAuto Scaling環境へ導入する
こんにちは、青柳@福岡オフィスです。
最近、Auto Scaling環境のEC2インスタンスに対してMackerelエージェントを導入する機会がありましたので、方法や手順について調べました。
Auto Scaling環境において考慮すべきポイント
考慮すべきポイントは次の2点です。
- Mackerelエージェントのインストール方法を検討する必要がある
- MackerelエージェントのAuto Scaling環境特有の設定が必要である
これらを順に説明していきます。
ポイント1: インストール方法を検討する
Mackerel公式ヘルプでは、Mackerlエージェントのインストール方法としてGUIまたはスクリプトを使用した手動でのインストール手順が案内されています。
しかし、Auto Scaling環境の場合、負荷増大時のスケールアウトや障害発生時のオートヒーリングによりインスタンスが自動起動しますので、その都度手動でエージェントをインストールのは非現実的です。
そこで考えられるのが次の2通りの方法です。
- Mackerelエージェントをインストール済みのAMI(いわゆるゴールデンイメージ)を作成する
- ユーザーデータを使用して、インスタンス起動時にMackerelエージェントを自動インストールする
これら2つの方法は、状況や方針によって使い分ける必要があると思います。
方式 | 使用する状況・方針 (例) |
---|---|
ゴールデンイメージ方式 | ・エージェントのバージョンを厳密に管理したい ・ソフトウェアをゴールデンイメージで管理したい |
ユーザーデータ方式 | ・常に最新バージョンを使用したい ・ゴールデンイメージの管理をしたくない |
今回は「2」のユーザーデータを使用した方法を採用しました。
ユーザーデータを使用したMackerelエージェントの自動インストール
インストール対象OSが「Amazon Linux 2」の場合を例とします。
公式ヘルプで「Amazon Linux (1/2)」にMackerelエージェントを手動でインストールする手順を確認しましょう。
Amazon Linuxにmackerel-agentをインストールする - Mackerel ヘルプ
以下のコマンドラインを実行する手順となっています。
curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='YOUR_API_KEY' sh
これをEC2のユーザーデータの仕組みで自動実行するには、上記のコマンドラインの内容をそのまま記述し、以下のようにすればOKです。
#!/bin/bash curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='YOUR_API_KEY' sh
ポイント2: Auto Scaling環境特有の設定
公式ヘルプの以下のページに、設定すべき内容について記載されています。
Auto Scaling環境で使う - Mackerel ヘルプ
必要な設定は以下の2点です。
- ホスト起動時にホストステータスを
working
にするための設定 - ホスト縮退時に自動退役させるための設定
設定が必要な理由および設定内容については、上記ページを参照してください。
ここでは、ユーザーデータの仕組みを使う場合において、これらの設定を行う方法を説明していきます。
ユーザーデータを使用したAuto Scaling環境向け設定方法
1. ホスト起動時にホストステータスを working
にするための設定
Mackerelエージェントの設定ファイル /etc/mackerel-agent/mackerel-agent.conf
で設定します。
Mackerelエージェントをインストールした直後のファイル内容は以下のようになっています。
# pidfile = "/var/run/mackerel-agent.pid" # root = "/var/lib/mackerel-agent" # verbose = false # apikey = "" # [host_status] ← ★この行のコメントアウトを解除★ # on_start = "working" ← ★この行のコメントアウトを解除★ # on_stop = "poweroff" (以下省略)
対象行のコメントアウトを解除すればよいため、次のような処理を記述します。
sed -i -e '/^#\s*\[host_status\]/s/^#\s*//' /etc/mackerel-agent/mackerel-agent.conf sed -i -e '/^#\s*on_start\s*=\s*"working"/s/^#\s*//' /etc/mackerel-agent/mackerel-agent.conf
2. ホスト縮退時に自動退役させるための設定
mackerel-agentサービスの設定ファイル /etc/sysconfig/mackerel-agent
で設定します。
Mackerelエージェントをインストールした直後のファイル内容は以下のようになっています。
# OTHER_OPTS=-v # AUTO_RETIREMENT=1 ← ★この行のコメントアウトを解除★
「1」と同様に、対象行のコメントアウトを解除すればよいため、次のような処理を記述します。
sed -i -e '/^#\s*AUTO_RETIREMENT\s*=\s*1/s/^#\s*//' /etc/sysconfig/mackerel-agent
ユーザーデータの記述内容 (完成版)
これまでに説明した「自動インストール」「設定ファイルのコメントアウト解除」を組み合わせることで、Auto Scaling環境でのMackerelエージェント導入が完成します。
処理の順序としては、
- Mackerelエージェントのインストール
- 設定ファイルの編集
- Mackerelエージェントサービスの開始
となります。
実はここで一つ問題が発生します。
前述の「ユーザーデータを使用したMackerelエージェントの自動インストール」で説明したユーザーデータのコードでは、スクリプトファイル setup-all-yum-v2.sh
にインストールからサービス開始までの処理が全て書かれていて、一連の処理がノンストップで実行されます。そのため「設定ファイルの編集」を行うタイミングが無くなってしまいます。
そこで、スクリプトファイルに書かれている内容を展開して、ユーザーデータを以下のような内容に変更します。
#!/bin/bash MACKEREL_APIKEY='YOUR_API_KEY' # Download and install yum repository PGP key gpgkey_path=`mktemp` curl -fsS -o $gpgkey_path https://mackerel.io/file/cert/GPG-KEY-mackerel-v2 rpm --import $gpgkey_path rm $gpgkey_path # Setup yum repository cat >/etc/yum.repos.d/mackerel.repo <<'EOF'; [mackerel] name=mackerel-agent baseurl=http://yum.mackerel.io/amznlinux/v2/$releasever/$basearch gpgcheck=1 EOF # Install Mackerel-agent yum update -y yum install -y mackerel-agent # Initialize Mackerel-agent (Set APIKEY) mackerel-agent init -apikey="$MACKEREL_APIKEY" # Uncomment '[host_status]' and 'on_start="working"' sed -i -e '/^#\s*\[host_status\]/s/^#\s*//' /etc/mackerel-agent/mackerel-agent.conf sed -i -e '/^#\s*on_start\s*=\s*"working"/s/^#\s*//' /etc/mackerel-agent/mackerel-agent.conf # Uncomment 'AUTO_RETIREMENT=1' sed -i -e '/^#\s*AUTO_RETIREMENT\s*=\s*1/s/^#\s*//' /etc/sysconfig/mackerel-agent # Start Mackerel-agent service systemctl start mackerel-agent
23行目の mackerel-agent init -apikey="$MACKEREL_APIKEY"
でMackerelエージェントのインストールが一通り完了します。
そのあとに、25行目~30行目で「設定ファイルのコメントアウト解除」の処理を追加します。
そして最後にMackerelエージェントサービスを開始します。
これで自動インストールについては実装完了です。
さいごに
ユーザーデータのコード中にMackerelのAPIKEYをベタ書きしていますので、これをSSM(Systems Manager)のパラメータストアから取得するようにすると、セキュリティ面がより向上すると思います。
また、今回はOSがAmazon Linux 2の場合について説明しましたが、Linuxの他のディストリビューションやWindowsの場合でも、同様の考え方で実現できると思います。機会があれば別のOSの場合についても試したいと思います。