Docker環境でのNew Relic Infrastructure Agent導入
コンテナ化されたアプリケーションの監視は、従来の物理サーバー監視とは大きく異なります。New Relic Infrastructure Agent のコンテナ版を使用すると、ホストサーバーとコンテナの両方を効率的に監視できます。
この記事では、Docker初心者にも理解しやすく、Docker Composeを中心とした実践的な導入方法を説明します。複雑な設定ファイルは最小限に抑え、基本概念の理解を優先します。
なぜDockerコンテナの監視が必要なのか
従来の物理サーバー監視では、1台のサーバー内の状況を把握すれば十分でした。しかし、Docker環境では複数のコンテナが動的に起動・停止を繰り返します。
この複雑な環境を個別に監視するのは効率的ではありません。New Relic Infrastructure Agent のコンテナ版を使用すると、ホストとすべてのコンテナを統一的に監視できます。
Docker監視の2つのアプローチ
Dockerコンテナの監視には、主に2つの方法があります。
Agent コンテナ(推奨)
New Relic Infrastructure Agent をコンテナとして起動し、ホストとコンテナの情報を収集します。
取得できる情報
- ホストサーバーのシステムメトリクス
- 各コンテナのリソース使用量
- Docker Daemonの状態
- ネットワークとストレージの詳細情報
ホストインストール
ホストサーバーに直接 Infrastructure Agent をインストールする従来の方法です。
制限事項
- コンテナ内部の詳細情報が取得できない場合がある
- 動的なコンテナ環境への対応が困難
設定の全体的な流れ
Docker環境でのNew Relic監視設定は4つのステップで完了します。順を追って説明していきます。
Step 1: Docker Compose による基本設定
最小限の構成例
まずは最もシンプルな設定から始めましょう。
# docker-compose.yml
version: '3.8'
services:
newrelic-infra:
image: newrelic/infrastructure:latest
container_name: newrelic-infra
cap_add:
- SYS_PTRACE
network_mode: host
pid: host
privileged: true
volumes:
- "/:/host:ro"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- NRIA_LICENSE_KEY=your_license_key_hereこの設定により、New Relic Agent がホストとすべてのコンテナを監視できるようになります。
アプリケーションと組み合わせた例
実際のアプリケーション環境での使用例を示します。
version: '3.8'
services:
web:
image: nginx:latest
container_name: my-web-app
ports:
- "80:80"
database:
image: mysql:5.7
container_name: my-database
environment:
- MYSQL_ROOT_PASSWORD=secret
newrelic-infra:
image: newrelic/infrastructure:latest
container_name: newrelic-infra
cap_add:
- SYS_PTRACE
network_mode: host
pid: host
privileged: true
volumes:
- "/:/host:ro"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- NRIA_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
- NRIA_DISPLAY_NAME=Docker-EnvironmentStep 2: 環境変数による設定管理
.env ファイルの作成
セキュリティを考慮して、機密情報は環境変数ファイルで管理しましょう。
# .env ファイル
NEW_RELIC_LICENSE_KEY=your_actual_license_key_here
NRIA_VERBOSE=0
NRIA_DISPLAY_NAME=Production-Docker-HostDocker Compose での参照
# docker-compose.yml での環境変数使用例
services:
newrelic-infra:
image: newrelic/infrastructure:latest
environment:
- NRIA_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
- NRIA_VERBOSE=${NRIA_VERBOSE}
- NRIA_DISPLAY_NAME=${NRIA_DISPLAY_NAME}Step 3: 監視設定の確認と調整
コンテナの起動確認
# Docker Composeでコンテナ群を起動
docker-compose up -d
# New Relicエージェントの状態確認
docker-compose logs newrelic-infra
# 実行中コンテナの確認
docker ps監視対象の確認
New Relic ダッシュボードで以下の情報が表示されているか確認しましょう。
- ホストメトリクス: CPU、メモリ、ディスク使用率
- コンテナメトリクス: 各コンテナのリソース消費
- Docker情報: イメージ、ネットワーク、ボリューム
実践的な運用Tips
パフォーマンス最適化
Docker環境でのモニタリングは、適切な設定によりシステムへの負荷を最小限に抑えられます。レベル別の設定を以下に示します。
環境別の設定指針
| 環境 | 監視レベル | 更新間隔 | 備考 |
|---|---|---|---|
| 開発 | 軽量 | 60秒 | 基本メトリクスのみ |
| ステージング | 標準 | 30秒 | コンテナ詳細含む |
| 本番 | 詳細 | 15秒 | 全監視項目 |
セキュリティ考慮事項
Docker環境でのセキュリティベストプラクティスは以下です。
- 最小権限の原則:
privileged: trueよりもcap_add: SYS_PTRACEの使用を推奨(セキュリティベストプラクティス) - ネットワーク分離: 監視トラフィックを適切に分離
- 機密情報管理: ライセンスキーは環境変数で管理、
.envファイルは.gitignoreに追加
よくあるトラブルと解決方法
Q: エージェントコンテナが起動しない
A: 以下を確認してください。
- Docker Daemonが実行中か
- ライセンスキーが正しく設定されているか
- 必要な権限(privileged)が付与されているか
Q: コンテナの情報が表示されない
A: 権限とボリュームマウントを確認しましょう。
/var/run/docker.sockがマウントされているかSYS_PTRACE権限が付与されているかnetwork_mode: hostが設定されているか
Q: システムへの負荷が大きい
A: 監視レベルを調整できます。
NRIA_VERBOSEを0に設定(デフォルト)- 不要なプロセス監視を無効化
- データ送信間隔を延長
Q: 特定のコンテナが監視されない
A: コンテナのラベル設定を確認しましょう。
- Docker Composeでのサービス名が適切か
- コンテナが実際に稼働しているか
- ネットワーク設定に問題がないか
スケールアウト時の考慮事項
複数ホスト環境
複数のDockerホストがある場合の管理指針を示します。
各ホストに個別の New Relic Agent を配置し、統一されたダッシュボードで管理します。
オーケストレーション環境への準備
Docker Swarm や Kubernetes への移行を考慮した設定が重要です。
- ラベルベースでの識別設定
- 動的なサービス検出への対応
- 設定の外部化
関連記事: Kubernetes環境での導入関連記事: 設定リファレンス