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 による基本設定 ​

最小限の構成例 ​

まずは最もシンプルな設定から始めましょう。

yaml
# 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 がホストとすべてのコンテナを監視できるようになります。

アプリケーションと組み合わせた例 ​

実際のアプリケーション環境での使用例を示します。

yaml
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-Environment

Step 2: 環境変数による設定管理 ​

.env ファイルの作成 ​

セキュリティを考慮して、機密情報は環境変数ファイルで管理しましょう。

bash
# .env ファイル
NEW_RELIC_LICENSE_KEY=your_actual_license_key_here
NRIA_VERBOSE=0
NRIA_DISPLAY_NAME=Production-Docker-Host

Docker Compose での参照 ​

yaml
# 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: 監視設定の確認と調整 ​

コンテナの起動確認 ​

bash
# 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環境での導入関連記事: 設定リファレンス