Skip to content

Instantly share code, notes, and snippets.

@Showichiro
Last active October 3, 2024 07:25
Show Gist options
  • Select an option

  • Save Showichiro/5013e0c824480b9f3f3fec4235f78987 to your computer and use it in GitHub Desktop.

Select an option

Save Showichiro/5013e0c824480b9f3f3fec4235f78987 to your computer and use it in GitHub Desktop.
New Relic周りをAIに聞く

NewRelicについて教えてください。


NewRelicは、デジタルインテリジェンスプラットフォームを提供するテクノロジー企業です。主に以下の特徴があります:

  1. アプリケーションパフォーマンス監視 (APM): ウェブアプリケーションやモバイルアプリの性能を監視し、問題を特定します。

  2. インフラストラクチャ監視: サーバー、クラウドサービス、コンテナなどのインフラ全体を監視します。

  3. リアルタイムアラート: パフォーマンスの問題や異常を検出すると、即座に通知します。

  4. ダッシュボードとレポート: システムの状態や性能指標を視覚化し、分析を容易にします。

  5. エラートラッキング: アプリケーションのエラーやクラッシュを追跡し、デバッグを支援します。

  6. 分散トレーシング: マイクロサービスアーキテクチャにおけるリクエストの流れを追跡します。

NewRelicは、開発者やITオペレーションチームが、アプリケーションとインフラストラクチャの性能を最適化し、問題をすばやく特定・解決するのに役立ちます。

より詳細な情報や特定の機能について知りたい場合は、お聞かせください。


例えば、APIの開発を行っている場合、どのような監視ができますか


APIの開発において、NewRelicを使用すると以下のような監視が可能です:

  1. パフォーマンス監視:

    • レスポンスタイム: APIのエンドポイントごとの応答時間を測定します。
    • スループット: 1分あたりのリクエスト数を追跡し、負荷状況を把握します。
    • エラーレート: APIコールの成功率と失敗率を監視します。
  2. エンドポイント分析:

    • 最も頻繁に使用されるエンドポイントや、最も遅いエンドポイントを特定します。
    • 各エンドポイントのパフォーマンス傾向を時系列で分析できます。
  3. トランザクショントレース:

    • APIリクエストの処理過程を詳細に追跡し、ボトルネックを特定します。
    • データベースクエリやサードパーティーサービスへの呼び出しなど、各ステップにかかる時間を可視化します。
  4. エラー追跡:

    • APIで発生するエラーを自動的に収集し、スタックトレースと共に表示します。
    • エラーの発生頻度や影響を分析し、優先順位付けを支援します。
  5. 依存関係の監視:

    • データベース、キャッシュ、外部APIなど、依存するサービスのパフォーマンスと可用性を監視します。
  6. リソース使用率:

    • CPU、メモリ、ディスクI/Oなど、APIサーバーのリソース使用状況を追跡します。
  7. カスタムメトリクス:

    • ビジネスロジックに関連する特定のメトリクスを定義し、追跡することができます。
  8. アラートとインシデント管理:

    • 設定したしきい値を超えた場合に、即座に通知を受け取ることができます。
    • インシデントの自動分類や、オンコール担当者への通知などが可能です。
  9. SLA(Service Level Agreement)監視:

    • APIの可用性や性能に関するSLAを定義し、遵守状況を追跡します。
  10. セキュリティ監視:

    • 異常なトラフィックパターンや潜在的な攻撃を検出します。

これらの機能を活用することで、APIの品質、パフォーマンス、安定性を継続的に監視し、改善することができます。特に注目したい分野や、さらに詳しく知りたい点があれば、お知らせください。


NewRelicでは色々な項目を監視することができるようですが、どのようなアーキテクチャーによってそれを実現していますか


NewRelicのアーキテクチャーは複雑で多層的ですが、主要な構成要素と動作原理を説明します。

NewRelicのアーキテクチャー概要

NewRelicは、分散システムの監視を実現するために、以下のような複雑なアーキテクチャーを採用しています:

  1. エージェント

    • 各アプリケーション、サーバー、コンテナにインストールされる軽量ソフトウェア
    • パフォーマンスデータを収集し、NewRelicのバックエンドに送信
  2. コレクター

    • エージェントからのデータを受信し、処理するサービス
    • データの初期フィルタリングと集約を行う
  3. データ処理パイプライン

    • 大量のデータを高速で処理するための分散システム
    • Apache Kafka等のメッセージングシステムを使用してデータを流す
  4. 時系列データベース

    • 収集されたメトリクスを効率的に保存・クエリするための特殊なデータベース
    • 例:InfluxDB, TimescaleDB等
  5. メタデータストア

    • エンティティ(アプリケーション、サーバー等)の関係性や設定情報を保存
    • 例:Cassandra, PostgreSQL等
  6. 分析エンジン

    • 収集されたデータに対して複雑なクエリや分析を実行
    • 異常検知、トレンド分析、相関分析等を行う
  7. アラートエンジン

    • 設定されたしきい値やルールに基づいてアラートを生成
    • 通知サービスと連携して適切な担当者に通知
  8. APIサーバー

    • 外部システムやカスタムインテグレーションのためのRESTful APIを提供
  9. ウェブインターフェース

    • ユーザーがデータを可視化し、分析するためのダッシュボードとツール
    • リアルタイムデータ更新のためのWebSocketを使用
  10. 分散トレーシングシステム

    • マイクロサービスアーキテクチャにおけるリクエストの流れを追跡
    • OpenTelemetry等の標準規格をサポート
  11. 機械学習モデル

    • 異常検知、予測分析、根本原因分析等の高度な機能を提供

このアーキテクチャーにより、NewRelicは大規模で複雑なシステムを効率的に監視し、リアルタイムでインサイトを提供することができます。

NewRelicのアーキテクチャーについて、主要な構成要素と動作原理を説明しました。このアーキテクチャーは、大規模で複雑なシステムを効率的に監視し、リアルタイムでインサイトを提供することを可能にしています。

特に注目すべき点は以下の通りです:

  1. 分散型のデータ収集システム(エージェント)
  2. スケーラブルなデータ処理パイプライン
  3. 専用の時系列データベースによる効率的なデータ保存
  4. リアルタイム分析と異常検知のための分析エンジン
  5. 柔軟なアラートシステムとAPIによる拡張性

このアーキテクチャーの詳細や特定の部分についてさらに詳しく知りたい点があれば、お聞かせください。


かなり多層的な仕組みになっていますね、このうち、どのような要素がNewRelic側で隠蔽されてパッケージ化されているものなのでしょうか、開発者側がどの程度セットアップしなければならないのでしょうか。


NewRelicのシステムは確かに複雑ですが、開発者の負担を軽減するために多くの要素が隠蔽されています。以下に、NewRelic側で管理される部分と、開発者が設定する必要がある部分を整理します:

NewRelic側で管理される(隠蔽された)要素:

  1. データ処理パイプライン
  2. 時系列データベース
  3. メタデータストア
  4. 分析エンジン
  5. アラートエンジン
  6. APIサーバー
  7. ウェブインターフェース
  8. 分散トレーシングシステムのバックエンド
  9. 機械学習モデル

これらの要素はNewRelicのクラウドインフラストラクチャ上で動作し、開発者が直接管理する必要はありません。

開発者側で設定が必要な要素:

  1. エージェントのインストールと設定:

    • アプリケーションサーバーやコンテナにNewRelicエージェントをインストールします。
    • 言語やフレームワークに応じたSDKを組み込みます。
    • 設定ファイルでアプリケーション名やライセンスキーを指定します。
  2. カスタムメトリクスの定義(必要に応じて):

    • ビジネスロジックに関連する特定のメトリクスを定義します。
  3. アラートルールの設定:

    • 監視したい指標とそのしきい値を設定します。
    • 通知先(メール、Slack等)を設定します。
  4. ダッシュボードのカスタマイズ:

    • 必要なメトリクスを表示するダッシュボードを作成します。
  5. APIキーの管理(必要に応じて):

    • カスタム統合やデータエクスポートのためのAPIキーを生成・管理します。
  6. ユーザーアクセス管理:

    • チームメンバーのアクセス権限を設定します。

一般的なセットアッププロセス:

  1. NewRelicアカウントの作成
  2. アプリケーションの種類(Web、モバイル、インフラ等)を選択
  3. エージェントのインストール手順に従い、必要なパッケージをインストール
  4. 設定ファイルを編集(ライセンスキーの追加など)
  5. アプリケーションの再起動

多くの場合、この基本的なセットアップだけで、主要なメトリクスの収集が開始されます。その後、必要に応じてカスタマイズや詳細な設定を行うことができます。

NewRelicは「設定より規約」の原則に従っており、多くのケースでデフォルト設定が適切に機能するよう設計されています。これにより、開発者は最小限の設定で監視システムを稼働させることができます。

特定の言語やフレームワーク、あるいは特殊な環境でのセットアップについて詳しく知りたい場合は、お知らせください。


AWSのECSコンテナ上にサーバを持っており、それらにエージェントをインストールする方法などについて知りたいです。


AWSのElastic Container Service (ECS)上でNewRelicエージェントをインストールする方法について説明します。ECSコンテナ環境でNewRelicを使用する場合、主に2つのアプローチがあります:

  1. コンテナ内にエージェントをインストールする方法
  2. サイドカーコンテナとしてエージェントを実行する方法

ここでは、より一般的で柔軟性の高い、コンテナ内にエージェントをインストールする方法を詳しく説明します。

# ベースイメージを指定
FROM your-base-image:tag

# 環境変数を設定
ENV NEW_RELIC_LICENSE_KEY=your_license_key_here
ENV NEW_RELIC_APP_NAME=your_app_name_here

# NewRelicエージェントをインストール
RUN curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash && \
    sudo NEW_RELIC_API_KEY=your_api_key_here NEW_RELIC_ACCOUNT_ID=your_account_id_here /usr/local/bin/newrelic install

# アプリケーションの依存関係をインストール
# 例: RUN pip install -r requirements.txt

# アプリケーションコードをコピー
COPY . /app
WORKDIR /app

# NewRelicエージェントを使用してアプリケーションを起動
CMD ["newrelic-admin", "run-program", "your_start_command_here"]

このDockerfileの例は、ECS上でNewRelicエージェントをセットアップする基本的な手順を示しています。以下に、主要なステップと注意点を説明します:

  1. ベースイメージの選択:

    • アプリケーションに適したベースイメージを選択します。
  2. 環境変数の設定:

    • NEW_RELIC_LICENSE_KEY: NewRelicアカウントのライセンスキー
    • NEW_RELIC_APP_NAME: アプリケーションの名前
  3. NewRelicエージェントのインストール:

    • NewRelic CLIを使用してエージェントをインストールします。
    • NEW_RELIC_API_KEYNEW_RELIC_ACCOUNT_IDは、NewRelicダッシュボードから取得できます。
  4. アプリケーションのセットアップ:

    • 通常のアプリケーションのセットアップ手順を行います。
  5. アプリケーションの起動:

    • newrelic-admin run-programコマンドを使用して、NewRelicエージェントとともにアプリケーションを起動します。

ECS特有の設定:

  1. タスク定義の作成:

    • ECSコンソールで新しいタスク定義を作成し、上記のDockerイメージを指定します。
  2. 環境変数の設定:

    • セキュリティ上の理由から、ライセンスキーなどの機密情報はECSタスク定義の環境変数セクションで設定することをお勧めします。
  3. IAMロールの設定:

    • NewRelicがEC2メタデータにアクセスできるように、適切なIAMロールをタスクに割り当てます。
  4. リソース制限の設定:

    • NewRelicエージェントの実行に必要なCPUとメモリリソースを考慮してタスク定義を設定します。

注意点:

  • 言語やフレームワークによって、エージェントのインストール方法が異なる場合があります。
  • コンテナ化された環境では、ホストベースのインフラストラクチャ監視には制限があるかもしれません。
  • ECSのオートスケーリングを使用している場合、動的に変化するインスタンス数に対応できるようNewRelicの設定を調整する必要があるかもしれません。

このセットアップにより、ECS上で実行されているコンテナ化されたアプリケーションのパフォーマンスデータをNewRelicで収集・分析することができます。特定の言語やフレームワーク、あるいはより詳細な設定について知りたい場合は、お知らせください。


コンテナ内にエージェントをインストールする方法とサイドカーコンテナとしてエージェントを実行する方法とがあるとの話でしたが、どちらを採用すればいいかわからないのでそれぞれメリット・デメリットなどありますか。


コンテナ内にエージェントをインストールする方法とサイドカーコンテナとしてエージェントを実行する方法、それぞれにメリットとデメリットがあります。以下に両方のアプローチを比較します:

NewRelicエージェント導入方法の比較

1. コンテナ内にエージェントをインストールする方法

メリット

  • シンプルな構成:単一のコンテナですべてを管理できる
  • リソース効率:追加のコンテナを必要としないため、やや軽量
  • セットアップの簡易さ:既存のDockerfileに数行追加するだけで済む
  • アプリケーションとの緊密な統合:アプリケーションコードと直接やり取りしやすい

デメリット

  • イメージの肥大化:アプリケーションイメージにエージェントが含まれるため、サイズが大きくなる
  • 柔軟性の低下:エージェントのアップデートにはアプリケーションイメージの再ビルドが必要
  • 言語依存:アプリケーションの言語やフレームワークに合わせたエージェントが必要

2. サイドカーコンテナとしてエージェントを実行する方法

メリット

  • 分離:アプリケーションとエージェントが分離されているため、互いに影響を与えにくい
  • 柔軟性:エージェントの更新が容易で、アプリケーションコンテナに影響を与えない
  • 汎用性:言語やフレームワークに依存せず、様々なアプリケーションに適用可能
  • スケーラビリティ:エージェントのリソース割り当てを独立して管理できる

デメリット

  • 複雑さの増加:タスク定義やオーケストレーションがやや複雑になる
  • リソース消費:追加のコンテナを実行するため、若干のオーバーヘッドがある
  • ネットワーク設定:コンテナ間の通信設定が必要になる場合がある
  • コスト:追加のコンテナを実行するため、わずかながらコストが増加する可能性がある

これらの比較を踏まえ、以下のような状況に応じて適切な方法を選択することをお勧めします:

  1. コンテナ内にエージェントをインストールする方法が適している場合:

    • シンプルな構成を好む場合
    • リソースの制約が厳しい環境で運用している場合
    • アプリケーションとエージェントの緊密な統合が必要な場合
    • 単一言語のアプリケーションを運用している場合
  2. サイドカーコンテナとしてエージェントを実行する方法が適している場合:

    • マイクロサービスアーキテクチャを採用している場合
    • 頻繁なエージェントの更新が予想される場合
    • 異なる言語やフレームワークを使用した複数のアプリケーションを監視する場合
    • アプリケーションコンテナの変更を最小限に抑えたい場合

最終的な選択は、以下の要因を考慮して決定するとよいでしょう:

  • チームの経験とスキルセット
  • 既存のインフラストラクチャとオーケストレーションツール
  • セキュリティ要件
  • パフォーマンス要件
  • 将来的なスケーリング計画

どちらの方法を選択しても、NewRelicエージェントは効果的に機能します。プロジェクトの特性や要件に応じて、最適なアプローチを選択してください。

特定の状況や懸念事項について、さらに詳しいアドバイスが必要な場合はお知らせください。


異なる言語やフレームワークを利用している場合は、サイドカーコンテナのほうがいいということですね。サイドカーコンテナを利用する場合の導入手順などを教えてください。


はい、その通りです。異なる言語やフレームワークを利用している場合、サイドカーコンテナアプローチの方が柔軟性が高く、管理しやすいです。サイドカーコンテナとしてNewRelicエージェントを導入する手順を説明します。

NewRelicエージェントをサイドカーコンテナとして導入する手順

1. NewRelicエージェントコンテナの準備

NewRelicは公式のインフラストラクチャエージェントDockerイメージを提供しています。これをサイドカーコンテナとして使用します。

2. ECSタスク定義の作成

以下のようなタスク定義JSONを作成します:

{
  "family": "app-with-newrelic",
  "containerDefinitions": [
    {
      "name": "app",
      "image": "your-app-image:tag",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 8080,
          "hostPort": 8080
        }
      ]
    },
    {
      "name": "newrelic-infra",
      "image": "newrelic/infrastructure:latest",
      "essential": true,
      "environment": [
        {
          "name": "NRIA_LICENSE_KEY",
          "value": "your_license_key_here"
        },
        {
          "name": "NRIA_DISPLAY_NAME",
          "value": "ECS-${ECS_CONTAINER_METADATA_URI_V4}"
        }
      ]
    }
  ],
  "requiresCompatibilities": [
    "EC2"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512"
}

3. IAMロールの設定

NewRelicエージェントがEC2メタデータとECSメタデータにアクセスできるように、適切なIAMロールを設定します。

4. ECSサービスの作成

作成したタスク定義を使用して、ECSサービスを作成します。

5. アプリケーションの設定

アプリケーションコンテナ内で、NewRelicエージェントと通信するための設定を行います。これは言語やフレームワークによって異なりますが、一般的には環境変数を設定します。

例(Node.js):

const newrelic = require('newrelic');
// アプリケーションコード

6. ログの設定

NewRelicエージェントがアプリケーションのログを収集できるように、ログドライバーを設定します。

7. カスタムメトリクスの設定(オプション)

必要に応じて、アプリケーションからカスタムメトリクスをNewRelicに送信するよう設定します。

8. アラートとダッシュボードの設定

NewRelicのWebインターフェースで、必要なアラートルールとダッシュボードを設定します。

これらの手順に従うことで、NewRelicエージェントをサイドカーコンテナとしてECS環境に導入できます。以下に、いくつかの重要なポイントと注意事項を追加します:

  1. スケーリングの考慮: サイドカーアプローチでは、アプリケーションコンテナとNewRelicエージェントコンテナが1:1でスケールします。これにより、各アプリケーションインスタンスが確実に監視されます。

  2. リソース割り当て: タスク定義でNewRelicエージェントコンテナに適切なCPUとメモリリソースを割り当てることが重要です。これにより、エージェントがアプリケーションのパフォーマンスに影響を与えることなく効果的に動作します。

  3. セキュリティ考慮事項: NewRelicライセンスキーなどの機密情報は、ECSのSecrets Managementを使用して安全に管理することをお勧めします。

  4. ネットワーキング: awsvpcネットワークモードを使用することで、各タスクは独自のElastic Network Interfaceを持ち、NewRelicエージェントとアプリケーションコンテナ間の通信が容易になります。

  5. モニタリングの範囲: サイドカーアプローチでは、コンテナレベルとホストレベルの両方のメトリクスを収集できます。これにより、アプリケーションとインフラストラクチャの包括的な視点が得られます。

  6. アップデート戦略: NewRelicエージェントのアップデートは、アプリケーションコンテナに影響を与えることなく独立して行うことができます。ただし、エージェントの更新時にはタスクの再デプロイが必要になります。

このアプローチを採用することで、異なる言語やフレームワークを使用しているアプリケーションでも、一貫した方法でモニタリングを実装できます。また、アプリケーションコードの変更を最小限に抑えつつ、NewRelicの機能を最大限に活用することができます。

具体的な言語やフレームワーク、あるいは特定のユースケースについてさらに詳しい情報が必要な場合は、お知らせください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment