• ログイン今すぐ開始

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

ECS統合のトラブルシューティング冗長なログの生成

問題

オンホストECS統合のトラブルシューティング 、エラーを発見して調査するために、数分間の詳細なログを生成することができます。これは、自分自身のトラブルシューティングを行う際や、 New Relic のサポート に情報を提供する際に役立ちます。

Verbose ロギングでは、大量のデータがすぐに生成されます。ログの生成が終わったら、必ず verbose を設定してください。0 を設定して、ディスクスペースの消費を抑えてください。

newrelic-infra-ctl コマンドを使うことで、このプロセスを自動化することができます。詳細については、 Troubleshooting a running agent を参照してください。

解決策

冗長なログファイルを生成するには、タスク定義ファイルを編集する必要があります。該当するすべての設定を含む設定ファイルのサンプルについては、 Infrastructure configuration settings を参照してください。

冗長なログの実装にはいくつかのオプションがあります。

タスク定義環境変数の使用

環境変数を変更してタスクの再起動を行うことで、冗長なログを有効にすることができます。

  1. タスク定義を編集します。 NRIA_VERBOSE の値を 0 から変更します。

    • 1 常時稼働の冗長ログ用
    • 2 スマートロギングのための
    • 3 New Relicへの送信用

    これらのオプションについて 詳しく読む.

  2. タスク定義を保存します。

  3. 新しく登録されたタスク定義を使用するように、サービスを更新します。

  4. NRIA_VERBOSE=3 を選択し、New Relic に直接ログを送信していない場合、ログの表示とダウンロードには 2 つのオプションがあります。

  5. 設定をデフォルトに戻します。

    1. タスク定義を編集して、 NRIA_VERBOSE0 に設定することで、冗長なログを無効にします。
    2. タスク定義を保存します。
    3. サービスを最新のタスクに更新してください。
  6. ログファイルにエラーがないか調べてください。

  7. ログファイルを New Relic support に送る必要がある場合。

    1. ECSインテグレーションのバージョンを含む行をログファイルに含めてください。

      New Relic ECS integration version X.YY.ZZZ
    2. そのログファイルを、タスク定義の.ymlファイルと一緒にサポートチケットに添付してください。

SSHによるログの取得(EC2起動タイプのみ)

SSHでログを取得するには

  1. タスク定義を編集します。 NRIA_VERBOSE の値を 0 から変更します。

    • 1 常時稼働の冗長ログ用
    • 2 スマートロギングのための
    • 3 New Relicへの送信用

    これらのオプションについて 詳しく読む.

  2. いずれかのコンテナ・インスタンスにSSHで接続します。

  3. docker ps -a というコマンドを実行して、New Relic 統合コンテナのコンテナ ID を確認してください。コンテナの名前は nri-ecs とします。

  4. docker logs NRI_ECS_CONTAINER_ID> logs.txt というコマンドで、コンテナのログを保存します。十分なログデータを生成するために、このコマンドを約3分間実行しておきます。

  5. enable verbose logs のセクションの指示に従ってください。

ログをCloudWatchに転送し、awscliでダウンロードする。

CloudWatchでログを取得するには

  1. タスク定義を編集します。 NRIA_VERBOSE の値を 0 から変更します。

    • 1 常時稼働の冗長ログ用
    • 2 スマートロギングのための
    • 3 New Relicへの送信用

    これらのオプションについて 詳しく読む.

  2. /newrelic-infra/ecs というCloudWatchのロググループを使用して、ログを転送しています。すでに存在しているかどうかを確認するには、次のように実行します。

    aws logs describe-log-groups --log-group-name-prefix /newrelic-infra/ecs

    そのプレフィックスを持つロググループが存在すれば、このような出力が得られます。

    {
      "logGroups": [
        {
          "logGroupName": "/newrelic-infra/ecs",
          "creationTime": 1585828615225,
          "metricFilterCount": 0,
          "arn": "arn:aws:logs:YOUR_REGION:YOUR_AWS_ACCOUNT:log-group:/newrelic-infra/ecs:*",
          "storedBytes": 122539356
        }
      ]
    }

    このコマンドは接頭辞付きのロググループにマッチするので、返されるロググループ名が正確に /newrelic-infra/ecs であることを確認してください。ロググループが存在しない場合は、次のように出力されます。

    {
    "logGroups": []
    }
  3. ロググループが存在しない場合は、実行して作成してください。

    aws logs create-log-group --log-group-name /newrelic-infra/ecs
  4. タスク定義を編集します。 newrelic-infra コンテナのコンテナ定義で、次のように追加します logConfiguration:

    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "/newrelic-infra/ecs",
        "awslogs-region": "AWS_REGION_OF_YOUR_CLUSTER",
        "awslogs-stream-prefix": "verbose"
      }
    }
  5. 新しいタスクのバージョンを登録し、サービスを更新します。

  6. 次に、関連するログストリームを探します。タスクの複数のインスタンスが実行されている場合、それらはすべて同じロググループにログを送信しますが、それぞれには独自のログストリームがあります。ログストリームの名前は AWSLOGS_STREAM_PREFIX/TASK_FAMILY_NAME/TASK_ID という構造になっています。この場合は、 verbose/newrelic-infra/TASK_ID となります。

    指定したロググループのすべてのログストリームを取得するには、次のコマンドを実行します。

    aws logs describe-log-streams --log-group-name /newrelic-infra/ecs

    以下は、2つのストリームを持つロググループの出力例です。

    {
        "logStreams": [
            {
                "logStreamName": "verbose/newrelic-infra/9dfb28114e40415ebc399ec1e53a21b7",
                "creationTime": 1586166741197,
                "firstEventTimestamp": 1586166742030,
                "lastEventTimestamp": 1586173933472,
                "lastIngestionTime": 1586175101220,
                "uploadSequenceToken": "49599989655680038369205623273330095416487086853777112338",
                "arn": "arn:aws:logs:AWS_REGION_OF_YOUR_CLUSTER:YOUR_AWS_ACCOUNT:log-group:/newrelic-infra/ecs:log-stream:verbose/newrelic-infra/9dfb28114e40415ebc399ec1e53a21b7",
                "storedBytes": 0
            },
            {
                "logStreamName": "verbose/newrelic-infra/f6ce0be416804bc4bfa658da5514eb00",
                "creationTime": 1586166745643,
                "firstEventTimestamp": 1586166746491,
                "lastEventTimestamp": 1586173037927,
                "lastIngestionTime": 1586175100660,
                "uploadSequenceToken": "49605664273821671319096446647846424799651902350804230514",
                "arn": "arn:aws:logs:AWS_REGION_OF_YOUR_CLUSTER:YOUR_AWS_ACCOUNT:log-group:/newrelic-infra/ecs:log-stream:verbose/newrelic-infra/f6ce0be416804bc4bfa658da5514eb00",
                "storedBytes": 0
            }
        ]
    }
  7. 前述のログストリームのリストから、ログを取得したいタスクIDを持つものを特定し、このコマンドで logStreamName を使用します。

    aws logs get-log-events --log-group-name /newrelic-infra/ecs --log-stream-name "LOG_STREAM_NAME" --output text > logs.txt
  8. enable verbose logs の指示に従ってください。

実行中のコンテナから

実行中のコンテナからコマンドを実行して冗長なログを有効にするには

  1. いずれかのコンテナ・インスタンスにSSHで接続します。

  2. docker ps -a というコマンドを実行して、New Relic 統合コンテナのコンテナ ID を確認してください。コンテナの名前は nri-ecs とします。

  3. newrelic-infra-ctl を使用して、限られた期間の冗長なログを有効にします。コマンドを実行します。

    docker exec INTEGRATION_CONTAINER_ID /usr/bin/newrelic-infra-ctl

    詳細については、 Troubleshoot agent をご覧ください。

  4. コマンドでコンテナのログを保存します。

    docker logs INTEGRATION_CONTAINER_ID > logs.txt

    十分なログデータを生成するため、コマンドを約3分間実行します。

  5. ログファイルにエラーがないか調べてください。

ログファイルを New Relic support に送る必要がある場合。

  1. ECSインテグレーションのバージョンを含む行をログファイルに含めてください。

    New Relic ECS integration version X.YY.ZZZ
  2. そのログファイルを、タスク定義の.ymlファイルと一緒にサポートチケットに添付してください。

Copyright © 2022 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.