最近Raspberry Pi 4B(4GB)上のDockerでサービスを次から次へと立ち上げていて、サーバー監視してみたくなってきたのでやり方をメモ。
- Dockerに対応したサーバー監視ツール
- ARMアーキテクチャに対応
- サーバー監視そのものもDocker上で行いたい
という欲張りな人には役立つはず。
やること
Raspberry Pi 4B(4GB)上で動いているサーバーの状態(CPU・メモリ・プロセス)を監視する。
環境
- Raspberry Pi 4B(4GB)
- Raspberry Pi OS 64bit beta
- Docker 19.03.12
- Docker Compose 1.26.2
nginx-proxyを使って各サーバーへのリクエストを振り分けている。
New Relic について
サーバー監視ツールはいくつもありますが、その中でDockerに対応しているツールとなると限られてくる。サービスの選定はこちらの記事を参考にして、SaaS型で手軽に無料で使えそうなNew Relicを選んだ。
サーバー監視ツールは価格が高く、個人開発でちょろっと公開しているだけのサービスに導入するのは敷居が高い気がしていたが、New Relic Oneでは毎月100GBのデータ取り込みまでは無料ライセンスで使える。個人で使う分であれば十分すぎる容量だ。
New Relicにはアプリのパフォーマンス監視(APM)やPingによる死活監視など複数のサービスがあるが、今回使うのはCPUやメモリの使用量を見られるInfrastructure。
アカウント作成・ライセンスキー取得
New Relicのサイトにアクセスして、右上にある「無料サインアップ」を押してアカウントを作る。アカウントが作成できたら、右上のアカウントのドロップダウンから Account settings
を選択し、左のサイドバーからAPI keys
をクリックする。
Create key
を押して、Key type
をIngest - License
、Name
を任意の名前にしてキーを作成する。
Dockerコンテナを立てる
x86-64であれば公式にDockerイメージが提供されているので、それを公式のドキュメントに従ってコンテナを起動すればいいだけなのだが、arm64なので自前でビルドする必要がある。
Dockerイメージのビルド
とはいえ、イメージの中に突っ込まれるnewrelic-infra
、newrelic-infra-ctl
、newrelic-infra-service
の3つのバイナリを差し替えればいいだけ。
バイナリは公式に提供されているので、以下のリンクよりダウンロード(2021年1月現在では1.9.7が最新)。
https://download.newrelic.com/infrastructure_agent/binaries/linux/
mkdir ~/newrelic-infra-setup
cd ~/newrelic-infra-setup
wget https://download.newrelic.com/infrastructure_agent/binaries/linux/arm64/newrelic-infra_linux_1.9.7_arm64.tar.gz
tar -zxvf newrelic-infra_linux_1.9.7_arm64.tar.gz
次にnewrelic/infrastructure-agentのGitHubリポジトリをCloneする。
git clone https://github.com/newrelic/infrastructure-agent.git
Dockerイメージをビルドする方法はこのページを参考にした。まずダウンロードしたバイナリを指定のフォルダにコピーする。linux_amd64
にarm64バイナリを入れるというのもアレだが、そこはスルーで。
mkdir -p infrastructure-agent/target/bin/linux_amd64
cp newrelic-infra/usr/bin/* infrastructure-agent/target/bin/linux_amd64/
cd infrastructure-agent/build/container
export IMAGE_VERSION=1.0 # 適当に。指定しなければ0.0になる
make build/base
Dockerコンテナを立てる
これでDockerイメージが生成されたので、後はx86-64と同じ手順でコンテナを立てる。手順はこのページに従えばいい。
最初に取得したライセンスキーをnewrelic-infra.yml
に入れます。
cd ~/newrelic-infra-setup
echo "license_key: {YOUR_LICENSE_KEY}" > newrelic-infra.yml
touch newrelic-infra.dockerfile
vim newrelic-infra.dockerfile # どのエディタでも大丈夫
FROM newrelic/infrastructure:latest
ADD newrelic-infra.yml /etc/newrelic-infra.yml
touch docker-compose.yaml
vim docker-compose.yaml # どのエディタでも大丈夫
version: '3'
services:
agent:
container_name: newrelic-infra
build:
context: .
dockerfile: newrelic-infra.dockerfile
cap_add:
- SYS_PTRACE
network_mode: host
pid: host
privileged: true
volumes:
- "/:/host:ro"
- "/var/run/docker.sock:/var/run/docker.sock"
restart: unless-stopped
docker-compose build
docker-compose up -d
これでもうサーバー監視がもう始まっているので、New RelicのWebサイト上の上部バーからInfrastructure
を選んでみると、CPU使用率や空きメモリの割合等がグラフで表示されている。
また、上部バーからEntity explorer
を開いてみると、他にも色々なグラフや表があるので、好きなものをダッシュボードに追加すると良い。
newrelic-infra
が一番CPU使ってますね、草。
不具合
- Infrastructure > Hosts > Docker Containers でコンテナごとの情報が取得されていない
-
docker-compose logs
するとエラーを吐いている("integration exited with error state"
)
Docker対応ということでNewRelicを選んだのに使えないのは本末転倒なのでなんとか直したい。
参考文献
New Relic Pricing(日本語)
New Relic license key
Docker container for infrastructure monitoring
Docker instrumentation for infrastructure monitoring
newrelic/infrastructure-agent
newrelic/infrastructure-agent - Containerized Agent
newrelic/infrastructure-agent - ARM64 (aarch64) support #107
Dockerコンテナの監視を行うサービス
「デジタル・ニューノーマル構想」を掲げるNew Relicが製品や価格体系を刷新