Docker環境でのNew Relic Infrastructure Agent導入の基本概念

Docker環境でNew Relicによる監視を始めたい方に向けて、コンテナ特有の監視課題から実際の導入手順までを分かりやすく解説します。従来のサーバー監視とは異なるコンテナ監視の考え方を理解し、効果的な監視環境を構築しましょう。

なぜコンテナ監視が特別なのか

コンテナ化された環境では、監視対象が複数のレイヤーにわたって存在します。これが従来のサーバー監視と大きく異なる点です。

コンテナ監視の課題

課題説明New Relicでの解決
短命な性質コンテナの頻繁な作成・削除動的なリソース追跡
分散リソース複数ホストにまたがる配置統合ダッシュボード
複雑なネットワークコンテナ間の通信監視ネットワークトポロジー可視化

Docker環境でのメリット

1. 統合監視の実現

New Relic Infrastructure Agentをコンテナとして実行することで、ホストとコンテナの両方を単一のツールで監視できます。

2. 簡単なデプロイメント

Docker Composeやオーケストレーターを使用した宣言的な設定により、複雑な手動設定が不要になります。

3. スケーラビリティ

コンテナの自動スケーリングに合わせて、監視も自動的にスケールします。

基本的なセットアップの流れ

ステップ1: 要件と権限の確認

Docker環境の要件

コンテナとしてInfrastructure Agentを実行するために、以下の要件を満たす必要があります:

要件項目説明確認方法
Docker Engineバージョン19.03以降docker --version
Docker Composeバージョン1.25以降docker-compose --version
管理者権限特権モードでの実行sudo アクセス確認

なぜ特権モードが必要なのか

Infrastructure Agentはホストシステムの情報を収集するため、通常のコンテナ実行権限では不十分です。以下のホストリソースへのアクセスが必要です:

  • ホストのファイルシステム(/proc, /sys
  • ホストのネットワーク情報
  • ホストのプロセス情報

ステップ2: 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=${NEW_RELIC_LICENSE_KEY}
      - NRIA_DISPLAY_NAME=${HOSTNAME}
      - NRIA_VERBOSE=0
    restart: unless-stopped

    # CPUとメモリの制限設定
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.1'
          memory: 128M

環境変数ファイルの設定

セキュリティを考慮して、ライセンスキーは環境変数ファイルで管理します。

bash
# .env ファイル
NEW_RELIC_LICENSE_KEY=your_license_key_here
HOSTNAME=docker-host-01

# カスタム属性(オプション)
NRIA_CUSTOM_ATTRIBUTES='{"environment":"production","team":"backend","location":"tokyo"}'

詳細設定でのDocker Compose

より詳細な監視設定を含むDocker Compose例です。

yaml
# docker-compose.advanced.yml
version: '3.8'

services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    container_name: newrelic-infra
    restart: unless-stopped
    privileged: true
    network_mode: host
    pid: host

    volumes:
      - "/:/host:ro"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/proc:/host/proc:ro"
      - "/sys:/host/sys:ro"
      - "/etc:/host/etc:ro"
      - "./newrelic-infra.yml:/etc/newrelic-infra.yml:ro"

    environment:
      - NRIA_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
      - NRIA_DISPLAY_NAME=${HOSTNAME}-docker
      - NRIA_VERBOSE=1
      - NRIA_CUSTOM_ATTRIBUTES=${NRIA_CUSTOM_ATTRIBUTES}

      # プロキシ設定(必要な場合)
      - NRIA_PROXY=${PROXY_URL}

      # ログ設定
      - NRIA_LOG_TO_STDOUT=true

      # メトリクス収集間隔の調整
      - NRIA_METRICS_PROCESS_SAMPLE_RATE=20
      - NRIA_METRICS_STORAGE_SAMPLE_RATE=20
      - NRIA_METRICS_NETWORK_SAMPLE_RATE=10

    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.1'
          memory: 128M

    # ヘルスチェック設定
    healthcheck:
      test: ["CMD", "sh", "-c", "ps aux | grep -v grep | grep newrelic-infra"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

設定項目の解説

項目目的重要度
cap_add: SYS_PTRACEプロセス監視のため必須
network_mode: hostホストネットワーク情報取得必須
pid: hostホストプロセス監視必須
privileged: trueホストシステムアクセス必須
volumesホストファイルシステムアクセス必須

ステップ3: アプリケーション統合環境

実際のアプリケーション環境では、複数のサービスと組み合わせて使用します:

yaml
# newrelic-infra.yml
license_key: ${NRIA_LICENSE_KEY}
display_name: ${NRIA_DISPLAY_NAME}
verbose: 1

# カスタム属性
custom_attributes:
  environment: production
  container_runtime: docker
  orchestrator: docker-compose

# プロキシ設定(必要な場合)
# proxy: http://proxy.company.com:8080

# メトリクス収集設定
metrics_process_sample_rate: 20
metrics_storage_sample_rate: 20
metrics_network_sample_rate: 10

マルチコンテナアプリケーションでの統合監視

アプリケーションスタック全体の監視

Webアプリケーション、データベース、キャッシュサーバーを含む完全なスタックの監視例です。

yaml
# docker-compose.stack.yml
version: '3.8'

services:
  # アプリケーションサービス
  web-app:
    image: nginx:alpine
    ports:
      - "80:80"
    labels:
      - "newrelic.monitor=true"
  
  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    labels:
      - "newrelic.monitor=true"
  
  # New Relic Infrastructure Agent
  newrelic-infra:
    image: newrelic/infrastructure:latest
    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
      - NRIA_DISPLAY_NAME=docker-production-host
    restart: unless-stopped

ステップ4: 起動と監視確認

サービスの起動

bash
# Docker Composeでサービスを起動
docker-compose up -d

# Infrastructure Agentの状態確認
docker-compose ps
docker-compose logs newrelic-infra

正常動作の確認

  1. New Relicダッシュボードでの確認

    • New Relic One → Infrastructure → Hosts
    • Docker環境が一覧に表示されることを確認
  2. コンテナメトリクスの確認

    • Individual containers ビューでコンテナ別のメトリクス確認
    • Docker統合データの収集確認
  3. ログでの確認

    bash
    # Agent のログ確認
    docker-compose logs newrelic-infra | grep -i "connected\|error"

運用時のベストプラクティス

環境変数の管理

本番環境では、ライセンスキーを環境変数ファイルで管理します:

bash
# .env ファイル
NRIA_LICENSE_KEY=your_actual_license_key
NRIA_DISPLAY_NAME=production-docker-host
NRIA_VERBOSE=0
yaml
# docker-compose.yml での参照
services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    env_file: .env
    # その他の設定...

ラベルベースの管理

Dockerラベルを活用した効率的な監視管理:

yaml
services:
  web-app:
    image: nginx:alpine
    labels:
      - "newrelic.environment=production"
      - "newrelic.service=web"
      - "newrelic.team=frontend"

リソース制限の設定

Infrastructure Agent自体のリソース使用量を制限:

yaml
services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'
    # その他の設定...

高度な設定

カスタム設定ファイルの使用

より詳細な設定が必要な場合は、カスタム設定ファイルを使用します:

yaml
# カスタム設定ファイルをマウント
services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    volumes:
      - "/:/host:ro"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./newrelic-infra.yml:/etc/newrelic-infra.yml:ro"
yaml
# newrelic-infra.yml
license_key: YOUR_LICENSE_KEY
display_name: "docker-production-host"

# Docker固有の設定
custom_attributes:
  environment: production
  deployment_method: docker_compose
  
# ログ設定
log_level: info
verbose: 1

トラブルシューティング

よくある問題と解決方法

問題原因解決方法
コンテナが起動しない権限不足privileged: true を確認
ホスト情報が取得できないボリュームマウント不備/:/host:ro マウントを確認
コンテナメトリクスが表示されないDocker sock アクセス不可Docker sockのマウント確認

ログ分析による診断

bash
# 詳細ログで問題を特定
docker-compose logs newrelic-infra | grep -E "(ERROR|WARN|connected)"

# コンテナ内での設定確認
docker-compose exec newrelic-infra cat /etc/newrelic-infra.yml

ネットワーク接続の確認

bash
# ネットワーク接続の確認
docker run --rm --network=host curlimages/curl:latest curl -I https://infra-api.newrelic.com

# Docker daemonへのアクセス確認
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock newrelic/infrastructure:latest ls -la /var/run/docker.sock

パフォーマンス最適化

リソース使用量を最適化するための設定です。

yaml
# リソース効率化設定
services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    # ... 基本設定 ...
    
    environment:
      # 収集間隔の調整(リソース使用量を削減)
      - NRIA_METRICS_PROCESS_SAMPLE_RATE=60
      - NRIA_METRICS_STORAGE_SAMPLE_RATE=60
      - NRIA_METRICS_NETWORK_SAMPLE_RATE=30
      
      # コンテナ環境向け設定
      - NRIA_LOG_TO_STDOUT=true
    
    deploy:
      resources:
        limits:
          cpus: '0.3'
          memory: 256M
        reservations:
          cpus: '0.05'
          memory: 64M

セキュリティ考慮事項

最小権限の原則

必要最小限の権限での実行を心がけます:

yaml
services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    # privileged: true の代わりにcap_addで必要な権限のみ付与
    cap_add:
      - SYS_PTRACE
      - DAC_READ_SEARCH
    # ホストファイルシステムは読み取り専用でマウント
    volumes:
      - "/:/host:ro"

    # セキュリティオプション
    security_opt:
      - no-new-privileges:true

    # メモリスワップの無効化(コンテナ環境で推奨)
    mem_swappiness: 0

シークレット管理

Docker Secretsを使用したライセンスキー管理:

yaml
version: '3.8'

secrets:
  newrelic_license:
    external: true

services:
  newrelic-infra:
    image: newrelic/infrastructure:latest
    secrets:
      - newrelic_license
    environment:
      - NRIA_LICENSE_KEY_FILE=/run/secrets/newrelic_license

まとめ

Docker環境でのNew Relic Infrastructure Agent導入により、コンテナとホストを統合した監視が実現できます。重要なポイント:

導入のメリット

  • 統合監視: ホストとコンテナの両方を単一ツールで監視
  • 簡単デプロイ: Docker Composeによる宣言的設定
  • 動的スケーリング: コンテナ環境の変化に自動対応

成功のポイント

  1. 適切な権限設定: セキュリティと機能のバランス
  2. 環境別の設定管理: 開発・本番での設定の使い分け
  3. 継続的な監視: ログとメトリクスでの運用状況確認

次のステップ

  1. 基本設定完了後

    • カスタムダッシュボードの作成
    • アプリケーション固有のメトリクス追加
  2. 運用成熟化

    • オーケストレーション環境(Kubernetes等)への展開
    • CI/CDパイプラインとの統合
    • 監視戦略の継続的改善

関連記事

Docker環境の特性を活かした効果的な監視で、コンテナ化アプリケーションの安定運用を実現しましょう。