New Relic

監視プラットフォームAPM可観測性パフォーマンス監視アプリケーション監視インフラ監視

監視プラットフォーム

New Relic

概要

New Relicはクラウドベースの可観測性プラットフォームで、アプリケーションパフォーマンス監視(APM)、インフラストラクチャ監視、デジタルエクスペリエンス監視を統合した包括的ソリューションです。APM分野での老舗として安定した地位を維持し、直感的なUIと簡単なセットアップで高い評価を受けています。

詳細

New RelicはAPM(Application Performance Monitoring)分野のパイオニアとして、特にアプリケーションのコードレベル診断と統一されたユーザーインターフェースで業界をリードしています。

主要機能

  • APM(Application Performance Monitoring): 深いコードレベル診断とパフォーマンス分析
  • インフラストラクチャ監視: サーバー、コンテナ、クラウドサービスの包括的監視
  • ブラウザ監視: リアルユーザーモニタリング(RUM)とフロントエンドパフォーマンス
  • シンセティック監視: 自動化されたWebサイトとAPIの可用性監視
  • モバイル監視: iOS/Androidアプリのパフォーマンスとクラッシュ分析
  • AI/機械学習: 異常検知とインシデント相関
  • 分散トレーシング: マイクロサービス間の詳細なトランザクション追跡

技術的特徴

  • 統一プラットフォーム: 全機能が統合されたシングルペイン操作
  • 簡単な導入: エージェントベースの簡単セットアップ
  • 予測価格: 使用量ベースながら予測しやすい価格体系
  • 豊富なクエリ機能: NRQL(New Relic Query Language)による柔軟なデータ分析
  • ダッシュボード: カスタマイズ可能なリアルタイムダッシュボード

メリット・デメリット

メリット

  • APM分野での豊富な実績と成熟した機能
  • 直感的で使いやすいユーザーインターフェース
  • セットアップが簡単で短時間で導入可能
  • 統一されたプラットフォームで全機能を管理
  • 予測しやすい価格設定
  • 強力なクエリ言語(NRQL)
  • ユーザー体験とバックエンドパフォーマンスの相関分析

デメリット

  • Datadogと比較するとインフラ監視機能が限定的
  • 大規模環境でのコスト増加
  • カスタマイズ性がやや限定的
  • 一部の新しい技術への対応が遅れがち
  • データ保持期間の制限

参考ページ

設定・監視例

基本セットアップ

# Ruby アプリケーション用 New Relic エージェント設定
gem 'newrelic_rpm'

# 手動スタート(必要に応じて)
NewRelic::Agent.manual_start

メトリクス収集

# Python でのカスタムメトリクス送信
import newrelic.agent

# カスタムメトリクス記録
newrelic.agent.record_custom_metric('Custom/Users/SignupCount', 1)

# トランザクション追跡
@newrelic.agent.function_trace(name='Custom/MyFunction')
def my_function():
    # ビジネスロジック
    pass

# バックグラウンドタスク監視
@newrelic.agent.background_task(name='Custom/BackgroundTask')
def background_task():
    # バックグラウンド処理
    pass

アラート設定

// New Relic API でアラート条件作成
const alertCondition = {
  "condition": {
    "type": "apm_app_metric",
    "name": "High Response Time",
    "enabled": true,
    "entities": ["12345"],
    "metric": "response_time_web",
    "condition_scope": "application",
    "terms": [
      {
        "duration": "5",
        "operator": "above",
        "priority": "critical",
        "threshold": "0.5",
        "time_function": "all"
      }
    ]
  }
};

ダッシュボード作成

// New Relic One Dashboard 作成
const dashboard = {
  "dashboard": {
    "title": "Application Performance Dashboard",
    "description": "Monitor application key metrics",
    "permissions": "PUBLIC_READ_WRITE",
    "pages": [
      {
        "name": "Application Overview",
        "widgets": [
          {
            "title": "Response Time",
            "visualization": {
              "id": "viz.line"
            },
            "rawConfiguration": {
              "nrqlQueries": [
                {
                  "query": "SELECT average(duration) FROM Transaction WHERE appName = 'MyApp' TIMESERIES"
                }
              ]
            }
          }
        ]
      }
    ]
  }
};

ログ分析

# New Relic Logs 設定
# fluentd プラグイン使用例
<match **>
  @type newrelic
  license_key YOUR_LICENSE_KEY
  <buffer>
    @type file
    path /var/log/fluentd-buffers/newrelic.buffer
    flush_mode interval
    flush_interval 5s
  </buffer>
</match>

インテグレーション設定

# New Relic Infrastructure Agent 設定
# /etc/newrelic-infra/integrations.d/nginx-config.yml
integration_name: com.newrelic.nginx

instances:
  - name: nginx-server-metrics
    command: status_url
    arguments:
      status_url: http://127.0.0.1/nginx_status
      remote_monitoring: true
    labels:
      env: production
      role: load_balancer
      
  - name: nginx-server-inventory
    command: inventory
    arguments:
      config_path: /etc/nginx/nginx.conf
    labels:
      env: production
      role: load_balancer

NRQL クエリ例

-- アプリケーションエラー率の監視
SELECT percentage(count(*), WHERE error IS true) 
FROM Transaction 
WHERE appName = 'MyApp' 
SINCE 1 hour ago 
TIMESERIES

-- データベースクエリパフォーマンス
SELECT average(duration) 
FROM DatabaseSample 
WHERE provider = 'MySQL' 
FACET query 
SINCE 1 day ago 
LIMIT 10

-- インフラリソース使用率
SELECT average(cpuPercent), average(memoryUsedPercent) 
FROM SystemSample 
WHERE hostname LIKE 'web-%' 
SINCE 30 minutes ago 
TIMESERIES