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での設定
最小限の設定例
まずは基本的な監視を開始するための最小限の設定です:
# 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
環境変数ファイルの設定
セキュリティを考慮して、ライセンスキーは環境変数ファイルで管理します。
# .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例です。
# 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: アプリケーション統合環境
実際のアプリケーション環境では、複数のサービスと組み合わせて使用します:
# 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アプリケーション、データベース、キャッシュサーバーを含む完全なスタックの監視例です。
# 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: 起動と監視確認
サービスの起動
# Docker Composeでサービスを起動
docker-compose up -d
# Infrastructure Agentの状態確認
docker-compose ps
docker-compose logs newrelic-infra
正常動作の確認
New Relicダッシュボードでの確認
- New Relic One → Infrastructure → Hosts
- Docker環境が一覧に表示されることを確認
コンテナメトリクスの確認
- Individual containers ビューでコンテナ別のメトリクス確認
- Docker統合データの収集確認
ログでの確認
bash# Agent のログ確認 docker-compose logs newrelic-infra | grep -i "connected\|error"
運用時のベストプラクティス
環境変数の管理
本番環境では、ライセンスキーを環境変数ファイルで管理します:
# .env ファイル
NRIA_LICENSE_KEY=your_actual_license_key
NRIA_DISPLAY_NAME=production-docker-host
NRIA_VERBOSE=0
# docker-compose.yml での参照
services:
newrelic-infra:
image: newrelic/infrastructure:latest
env_file: .env
# その他の設定...
ラベルベースの管理
Dockerラベルを活用した効率的な監視管理:
services:
web-app:
image: nginx:alpine
labels:
- "newrelic.environment=production"
- "newrelic.service=web"
- "newrelic.team=frontend"
リソース制限の設定
Infrastructure Agent自体のリソース使用量を制限:
services:
newrelic-infra:
image: newrelic/infrastructure:latest
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
# その他の設定...
高度な設定
カスタム設定ファイルの使用
より詳細な設定が必要な場合は、カスタム設定ファイルを使用します:
# カスタム設定ファイルをマウント
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"
# 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のマウント確認 |
ログ分析による診断
# 詳細ログで問題を特定
docker-compose logs newrelic-infra | grep -E "(ERROR|WARN|connected)"
# コンテナ内での設定確認
docker-compose exec newrelic-infra cat /etc/newrelic-infra.yml
ネットワーク接続の確認
# ネットワーク接続の確認
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
パフォーマンス最適化
リソース使用量を最適化するための設定です。
# リソース効率化設定
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
セキュリティ考慮事項
最小権限の原則
必要最小限の権限での実行を心がけます:
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を使用したライセンスキー管理:
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による宣言的設定
- 動的スケーリング: コンテナ環境の変化に自動対応
成功のポイント
- 適切な権限設定: セキュリティと機能のバランス
- 環境別の設定管理: 開発・本番での設定の使い分け
- 継続的な監視: ログとメトリクスでの運用状況確認
次のステップ
基本設定完了後
- カスタムダッシュボードの作成
- アプリケーション固有のメトリクス追加
運用成熟化
- オーケストレーション環境(Kubernetes等)への展開
- CI/CDパイプラインとの統合
- 監視戦略の継続的改善
関連記事
Docker環境の特性を活かした効果的な監視で、コンテナ化アプリケーションの安定運用を実現しましょう。