MackerelエージェントをAuto Scaling環境へ導入する

Auto Scaling環境のEC2インスタンスに対してMackerelエージェントを導入する方法や手順について調べました。
2019.06.11

こんにちは、青柳@福岡オフィスです。

最近、Auto Scaling環境のEC2インスタンスに対してMackerelエージェントを導入する機会がありましたので、方法や手順について調べました。

Auto Scaling環境において考慮すべきポイント

考慮すべきポイントは次の2点です。

  1. Mackerelエージェントのインストール方法を検討する必要がある
  2. MackerelエージェントのAuto Scaling環境特有の設定が必要である

これらを順に説明していきます。

ポイント1: インストール方法を検討する

Mackerel公式ヘルプでは、Mackerlエージェントのインストール方法としてGUIまたはスクリプトを使用した手動でのインストール手順が案内されています。

しかし、Auto Scaling環境の場合、負荷増大時のスケールアウトや障害発生時のオートヒーリングによりインスタンスが自動起動しますので、その都度手動でエージェントをインストールのは非現実的です。
そこで考えられるのが次の2通りの方法です。

  1. Mackerelエージェントをインストール済みのAMI(いわゆるゴールデンイメージ)を作成する
  2. ユーザーデータを使用して、インスタンス起動時に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点です。

  1. ホスト起動時にホストステータスを working にするための設定
  2. ホスト縮退時に自動退役させるための設定

設定が必要な理由および設定内容については、上記ページを参照してください。

ここでは、ユーザーデータの仕組みを使う場合において、これらの設定を行う方法を説明していきます。

ユーザーデータを使用した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の場合についても試したいと思います。