MackerelでARMベースのGraviton2搭載EC2インスタンス(M6g/C6g/R6g)を監視する

2020.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちわ、札幌のヨシエです。

皆さん、最近のEC2のアップデートでGraviton2が搭載されているインスタンスが東京リージョンでも 利用することが出来るようになっていることをご存知でしょうか?

パフォーマンス、コストにおいて使いやすいインスタンスで私も少しずつ使い始めております。

詳細は以下のページをご参照ください。

今回の話題はGraviton2が搭載されているEC2インスタンスをMackerelで監視する方法を手を動かしてみたので共有します。

 現在、Mackerelの公式HPでは本手順が明記されておらず、導入方法が変更になる可能性が御座います。  導入に不安がある方は公式アナウンスをお待ち下さい。

M5もM6gも同じように監視出来るのか?という疑問から始まった。

AmazonLinux2のインスタンスをMackerelへホスト登録をする時、Amazon Linuxにmackerel-agentをインストールするに記載されている手順や以下のような新規ホストの登録画面からmackerel-agentをインストールする方が多いと思います。

しかし、この作業手順ではインストールが出来ません、実際にm6gインスタンスを用意して試してみます。

$ uname -a
Linux ip-xx-xx-xx-xx.ap-northeast-1.compute.internal 4.14.177-139.254.amzn2.aarch64 #1 SMP Thu May 7 18:50:54 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
$ curl http://169.254.169.254/latest/meta-data/instance-type
m6g.medium
$ curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='hogehoge' sh

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

failure: repodata/repomd.xml from mackerel: [Errno 256] No more mirrors to try.
http://yum.mackerel.io/amznlinux/v2/2/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 403 - Forbidden
+ mackerel-agent init -apikey=hogehoge
sh: 行 21: mackerel-agent: コマンドが見つかりません
+ systemctl start mackerel-agent
Failed to start mackerel-agent.service: Unit not found.

対処方法

GithubリポジトリにARMベースのmackerel-agentが用意されているのでこれを配置することで監視ができるようになります。

mackerel-agentを配置する

Releases · mackerelio/mackerel-agent

こちらをインストールしていきたいと思います。

まずはEC2インスタンス上でARM64用のmackerel-agentをDLします。

$ wget https://github.com/mackerelio/mackerel-agent/releases/download/v0.68.0/mackerel-agent_linux_arm64.tar.gz

次にDLしたmackerel-agentを展開します。

$ tar xvzf mackerel-agent_linux_arm64.tar.gz
mackerel-agent_linux_arm64/
mackerel-agent_linux_arm64/CHANGELOG.md
mackerel-agent_linux_arm64/CREDITS
mackerel-agent_linux_arm64/LICENSE
mackerel-agent_linux_arm64/LICENSE.rtf
mackerel-agent_linux_arm64/README.md
mackerel-agent_linux_arm64/mackerel-agent
mackerel-agent_linux_arm64/mackerel-agent.conf

既にmackerel-agentバイナリとmackerel-agent.confが用意されているので、それぞれのファイルを移動します。

$ sudo mv ./mackerel-agent_linux_arm64/mackerel-agent /usr/local/bin/

APIキーの登録やmackerel-agent.confを作成するためにinitオプションを実行します。

$ sudo /usr/local/bin/mackerel-agent init -apikey=hoge
$ ls /etc/mackerel-agent/mackerel-agent.conf
/etc/mackerel-agent/mackerel-agent.conf

ここまで実施することでmackerel-agentの作業が半分終わりです。

mackerel-agentを起動してhostIDが発行される事を確認とMackerelの画面からホスト登録されていることを確認します。

$ sudo /usr/local/bin/mackerel-agent
2020/06/27 08:04:39 INFO <main> Starting mackerel-agent version:0.68.0, re v:ea1e788, apibase:https://api.mackerelio.com
2020/06/27 08:04:39 INFO <command> no host was found for the custom identifier: i-xxxxxxxxxxxxxxxxx.ec2.amazonaws.com
2020/06/27 08:04:41 INFO <command> no host was found for the custom identifier: i-xxxxxxxxxxxxxxxxx.ec2.amazonaws.com
2020/06/27 08:04:43 INFO <command> no host was found for the custom identifier: i-xxxxxxxxxxxxxxxxx.ec2.amazonaws.com
2020/06/27 08:04:43 INFO <command> Start: apibase = https://api.mackerelio.com, hostName = ip-xx-xx-xx-xx.ap-northeast-1.compute.internal, hostID = <hostid>

mackerel-agentの自動起動設定を行う

mackerel-agent設置だけではインスタンスの起動停止時に都度手動で上げ直さなくてならないため、自動起動/停止設定を入れます。 バックグラウンドでmackerel-agentを起動、かつサーバー起動時にmackerel-agentを起動、停止時にはmackerel-agentを停止を行いたいと思います。 ※ページ最後に参考させて頂いたページを記載しております。

sudo vim /etc/systemd/system/mackerel-agent.service

[Unit]
Description=mackerel-agent
After=network.target network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mackerel-agent
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=multi-user.target

serviceファイルが設置出来たらsystemctlでステータスを確認します。

$ systemctl status mackerel-agent.service
● mackerel-agent.service - mackerel-agent
   Loaded: loaded (/etc/systemd/system/mackerel-agent.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

上記のように確認が出来たらsystemctl enableで自動起動を有効化、systemctl startでプロセスを起動します。

$ sudo systemctl enable mackerel-agent.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mackerel-agent.service to /etc/systemd/system/mackerel-agent.service.
$ sudo systemctl start mackerel-agent.service

最後に念の為、プロセスが起動していることと自動起動が有効になっていることを確認しましょう。

$ systemctl is-active mackerel-agent.service
active
$ systemctl is-enabled mackerel-agent.service
enabled

参考