問題
オンホストECS統合のトラブルシューティング 、エラーを発見して調査するために、数分間の詳細なログを生成することができます。これは、自分自身のトラブルシューティングを行う際や、 New Relic のサポート に情報を提供する際に役立ちます。
詳細なロギングは、非常に迅速に大量のデータを生成します。ログの生成が終了したら、ディスク領域の消費を減らすために必ずverbose: 0
を設定してください。
newrelic-infra-ctl
コマンドを使用して、このプロセスを自動化できます。詳しくは、実行中のエージェントのトラブルシューティングを参照してください。
解決
冗長なログファイルを生成するには、タスク定義ファイルを編集する必要があります。該当するすべての設定を含む設定ファイルのサンプルについては、 Infrastructure configuration settings を参照してください。
冗長なログの実装にはいくつかのオプションがあります。
- タスク定義の環境変数を変更し、タスクの再起動を行う
- EC2起動タイプの場合: SSH経由でのログの取得
- CloudWatchに転送し、awscliでダウンロードする。
- 実行中のコンテナからコマンドを実行する
タスク定義環境変数の使用
環境変数を変更してタスクの再起動を行うことで、冗長なログを有効にすることができます。
タスク定義を編集します。
NRIA_VERBOSE
の値を0
から次のように変更します。1
常時詳細ログ用2
スマートロギング用3
New Relicへの送信用
これらのオプションについて 詳しく読む.
タスク定義を保存します。
新しく登録されたタスク定義を使用するように、サービスを更新します。
NRIA_VERBOSE=3
を選択し、ログを New Relic に直接送信しない場合は、ログを表示およびダウンロードするための 2 つのオプションがあります。- EC2起動タイプの場合: SSHによるログの取得 、または
- CloudWatchへのログ転送
設定をデフォルトに戻します。
- タスク定義を編集し、
NRIA_VERBOSE
を0
に設定して、詳細ログを無効にします。 - タスク定義を保存します。
- サービスを最新のタスクに更新してください。
- タスク定義を編集し、
ログファイルにエラーがないか調べてください。
ログファイルを New Relic support に送る必要がある場合。
ECSインテグレーションのバージョンを含む行をログファイルに含めてください。
New Relic ECS integration version X.YY.ZZZそのログファイルを、タスク定義の.ymlファイルと一緒にサポートチケットに添付してください。
SSHによるログの取得(EC2起動タイプのみ)
SSHでログを取得するには
タスク定義を編集します。
NRIA_VERBOSE
の値を0
から次のように変更します。1
常時詳細ログ用2
スマートロギング用3
New Relicへの送信用
これらのオプションについて 詳しく読む.
いずれかのコンテナ・インスタンスにSSHで接続します。
コマンド
docker ps -a
を実行して、New Relic 統合コンテナーのコンテナー ID を見つけます。コンテナーの名前はnri-ecs
でなければなりません。コマンド
docker logs NRI_ECS_CONTAINER_ID > logs.txt
を使用してコンテナからログを保存します。コマンドを約 3 分間実行したままにして、十分なログ データを生成します。enable verbose logs のセクションの指示に従ってください。
ログをCloudWatchに転送し、awscliでダウンロードする。
CloudWatchでログを取得するには
タスク定義を編集します。
NRIA_VERBOSE
の値を0
から次のように変更します。1
常時詳細ログ用2
スマートロギング用3
New Relicへの送信用
これらのオプションについて 詳しく読む.
/newrelic-infra/ecs
という CloudWatch ログ グループを使用してログを転送します。既に存在するかどうかを確認するには、次を実行します。bash$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": []}ロググループが存在しない場合は、実行して作成してください。
bash$aws logs create-log-group --log-group-name /newrelic-infra/ecsタスク定義を編集します。
newrelic-infra
コンテナのコンテナ定義で、次のlogConfiguration
を追加します。"logConfiguration": {"logDriver": "awslogs","options": {"awslogs-group": "/newrelic-infra/ecs","awslogs-region": "AWS_REGION_OF_YOUR_CLUSTER","awslogs-stream-prefix": "verbose"}}新しいタスクのバージョンを登録し、サービスを更新します。
次に、関連するログ ストリームを探します。実行中のタスクのインスタンスが複数ある場合、それらはすべてログを同じログ グループに送信しますが、それぞれに独自のログ ストリームがあります。ログ ストリーム名は構造
AWSLOGS_STREAM_PREFIX/TASK_FAMILY_NAME/TASK_ID
に従います。この場合、verbose/newrelic-infra/TASK_ID
になります。指定したロググループのすべてのログストリームを取得するには、次のコマンドを実行します。
bash$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}]}ログ ストリームの前のリストから、ログを取得するタスク ID を持つものを特定し、次のコマンドで logStreamName を使用します。
bash$aws logs get-log-events --log-group-name /newrelic-infra/ecs --log-stream-name "LOG_STREAM_NAME" --output text > logs.txtenable verbose logs の指示に従ってください。
実行中のコンテナから
実行中のコンテナからコマンドを実行して冗長なログを有効にするには
いずれかのコンテナ・インスタンスにSSHで接続します。
コマンド
docker ps -a
を実行して、New Relic 統合コンテナーのコンテナー ID を見つけます。コンテナーの名前はnri-ecs
でなければなりません。newrelic-infra-ctl
を使用して、限られた期間の詳細ログを有効にします。次のコマンドを実行します。bash$docker exec INTEGRATION_CONTAINER_ID /usr/bin/newrelic-infra-ctl詳細については、 Troubleshoot agent をご覧ください。
コマンドでコンテナのログを保存します。
bash$docker logs INTEGRATION_CONTAINER_ID > logs.txt十分なログデータを生成するため、コマンドを約3分間実行します。
ログファイルにエラーがないか調べてください。
ログファイルを New Relic support に送る必要がある場合。
ECSインテグレーションのバージョンを含む行をログファイルに含めてください。
New Relic ECS integration version X.YY.ZZZそのログファイルを、タスク定義の.ymlファイルと一緒にサポートチケットに添付してください。