この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、青柳@福岡オフィスです。
最近、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です。
UserData
#!/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エージェントをインストールした直後のファイル内容は以下のようになっています。
/etc/mackerel-agent/mackerel-agent.conf
# 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エージェントをインストールした直後のファイル内容は以下のようになっています。
/etc/sysconfig/mackerel-agent
# 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
にインストールからサービス開始までの処理が全て書かれていて、一連の処理がノンストップで実行されます。そのため「設定ファイルの編集」を行うタイミングが無くなってしまいます。
そこで、スクリプトファイルに書かれている内容を展開して、ユーザーデータを以下のような内容に変更します。
UserData
#!/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の場合についても試したいと思います。