このページについて

AWS Systems Manager Distributorでは、New Relic infrastructure monitoring agentがサポートされています。
New Relicのドキュメントは こちら になります。

今回はWindowsServerにインストールしてみる手順を確認してみます。

AWS Systems Manager Distributorとは

AWS Systems Manager Distributorは、AWSのサービスで、カスタムソフトウェアパッケージやスクリプトなどを効率的に複数のインスタンスに配布・管理するためのツールです。
ソフトウェアの自動配布や更新、バージョン管理を行い、リソースの一貫性を確保します。

AWS Systems Manager(以下SSM)のコンソールから ディストリビューター を選択できます。

前提

今回使用する環境は以下となります。

  • WindowsServer2022
    • ami-02d019195385b83ae(Windows_Server-2022-Japanese-Full-Base-2023.06.14)
  • SSMエージェント: 3.2.1377.0
    • EC2作成後、最新バージョンにアップデート

また、対象のEC2インスタンスは、SSMにてマネージドインスタンスとして登録されるように設定します。
今回はデフォルトのホスト管理設定(DHMC)にて設定。
ステップ 1: Systems Manager にインスタンスのアクセス許可を設定する

前提環境の準備ができたら、以下の手順を実行していくだけです!

やってみる

パッケージ確認

SSMコンソールから ディストリビューター を選択し、サードパーティー タブにある New-Relic-infrastructure-monitoring-agent を選択

New-Relic-infrastructure-monitoring-agentの詳細を確認できます。

バージョンには、現在 V1.0.3 (デフォルト)と - がありました。
こちらはエージェントのバージョンではなく、New-Relic-infrastructure-monitoring-agent のパッケージのバージョンということでしょう。(どちらのバージョンも試してみましたが、挙動は特に変わりないように見えました)

パッケージ実行

以下のメニューから選べます。

  • 1回限りのインストール
  • スケジュールへのインストール (スケジュール実行)

どちらのメニューでも、インストールだけでなくアンインストールや更新も実行することができます。

今回は 1回限りのインストール をやってみます。

コマンドのパラメータ

ここでは以下のパラメータを入力します。

パラメータ 入力内容 補足
Action ・Install
・Uninstall
実行した方を選択
(Installの場合)
Installation Type
・Uninstall and reinstall
・In-place update
・Uninstall and reinstall: 再インストールプロセスが完了するまで、アプリケーションはオフラインになる
・In-place update: 新しいファイルまたは更新されたファイルがインストールに追加される間、アプリケーションは利用可能
Name New-Relic-infrastructure-monitoring-agent そのままでOK
Version パッケージのバージョンを指定
(空欄なら最新バージョン)
エージェントのバージョンではないので注意
Additional Arguments

※以下を入力します。
ライセンスキーがわからない場合は、こちら を参照。
現状、 SSM_NR_LICENSE_KEY 以外の有効なパラメータがないと思われます。。

{
  "SSM_NR_LICENSE_KEY" : "YOUR_NEWRELIC_LICENSE_KEY"
}

その他、必要な設定項目を入れていきます。
今回は、1台だけ手動選択して実行します。

問題なく実行完了しました。

現在最新バージョンである 1.45.0 がインストールされています。
Infrastructure agent release notes

サービスも自動起動で実行中。

設定ファイル (newrelic-infra.yml) がどうなっているかというと、 Additional Arguments で入力したライセンスキーが設定されています。

# THIS FILE IS MACHINE GENERATED
license_key: XXXXXXXXXXXXXXXXXXXX

New Relicコンソール側でも見えていることが確認できました!

注意事項

アップデートする場合

RunCommandのステータスは失敗になる

既存のエージェントのバージョンアップデートを実行しようとすると、RunCommandは以下のように失敗します。

ただし、エージェントのバージョンアップデート自体はうまくいっています!

アウトプットを確認してみると、一部文字化けしていてわからないですが、 NET HELPMSG 2182 とあります。
このことから、既存エージェントがすでに実行中のためサービス起動できないというエラーで、RunCommandの最終的なステータスとしては 失敗 となるのだと思われます。。
(おそらくRunCommandのプロセスとして、最終的にサービス起動をして完了なのだと思います)

仮説の検証として、既存エージェントを停止してからアップデートしてみたところ、問題なく 成功 となりました。
そのため、可能であれば既存エージェントを停止する手順を加えておくと良いと思います。

設定ファイル(newrelic-infra.yml)が上書きされる

既存の設定ファイル(newrelic-infra.yml)で、ライセンスキー以外の環境変数を設定していた場合、以下に内容に上書きされてしまうので、再度設定が必要です。
これはなかなか厄介で、 Additional Arguments で設定できるようになることを期待します。。

# THIS FILE IS MACHINE GENERATED
license_key: XXXXXXXXXXXXXXXXXXXX

参考: Infrastructure agent configuration settings

すでに最新バージョンをインストールしていた場合

これは実行しても問題ないんですが、すでにインストールされていると言われて完了するだけです。

New-Relic-infrastructure-monitoring-agent 1.0.3 is already installed

インストールする挙動もなく、RunCommandのステータスも 成功 となります。

スケジュール実行する場合

スケジュール実行を設定すると、ステートマネージャーに設定が作成されます。

スケジュール設定の最短は30分間隔

スケジュール設定は、CRON/Rate式で設定できます。

試しに5分間隔でやってみようとしたら怒られました。
最短はデフォルトで設定される30分間隔でした。

InvalidSchedule: Schedule expression cron(0/5 * * * ? *) is currently not accepted. Supported expressions are every half, 1, 2, 4, 8 or 12 hour(s), every specified day and time of the week, or a specific day in a specific week of the month Supported examples are: cron(0 0/30 * 1/1 * ? *), cron(0 0 0/4 1/1 * ? *), cron (0 0 10 ? * SUN *), cron (0 0 10 ? * * *), cron(0 0 ? * TUE#2 *)

設定したスケジュールを確認すること

CRONスケジュールビルダーのデフォルトを選択すると、30分間隔ではなく、、

rate(1 day)が設定されます。これだと1日間隔になってしまうので。。

その後、Editから再度CRONスケジュールビルダーのデフォルトを選択すると、今度はちゃんと cron(0 */30 * * * ? *) が設定されます。
スケジュールを設定する際は、意図通りの設定が入っているか確認しましょう。

RunCommandのステータスは失敗になる

これは上記でもあったんですが、既存のエージェントのバージョンアップデートを実行する際、RunCommandは失敗します。
ただ、エージェントが最新に上がってからもスケジュール実行時にRunCommandが失敗してしまうのです。

おそらく、最新をインストールするRunCommandが正常終了していないため、再度インストールする挙動から始まるんだと思われます。
期待していた挙動としては、2回目以降のスケジュール実行ではすでに最新バージョンがインストールされているためスキップとなり、成功すると思いました。

しかし、実際の挙動としては、最新バージョンがインストールされているにも関わらず、再度インストールから実行され、設定ファイル(newrelic-infra.yml)も同じ内容ではありますが、上書きされます。(そして、サービスは実行中なのでRunCommandは失敗となる。)

これでは現状スケジュール実行はできないかなと判断しています。。

おわりに

AWS System Manager Distributorを使ってNew Relic infrastructure monitoring agentをインストールしてみることができました。
シンプルにライセンスキーを設定するエージェントのインストールやアップデートはそのまま活用できますし、注意事項を踏まえた手順にして運用していくこともできると思います。
現状まだ活用が難しいところはありますが、これから設定の幅が広がることを期待したい機能でした!