このドキュメントでは、Compute Engine VM インスタンスに関する Ops エージェントの承認の問題や認証情報の問題のトラブルシューティングを行う際に役立つ情報を提供します。
Ops エージェントがアクセスエラーまたは承認エラーを報告している場合、エージェントが正しく実行されているようでもデータが存在しない場合、またはアラート ポリシーが意図したとおりに機能しない場合は、VM インスタンスの認証情報が正しいかどうか(正しいプロジェクトを指定しているかどうかなど)を確認してください。
秘密鍵ではなく標準の認証情報で Compute Engine VM インスタンスを使用している場合は、データが間違ったプロジェクトに送信されている可能性は低いものの、認証情報が不完全な可能性があります。認証情報の詳細については、Ops エージェントを認可するをご覧ください。認証情報を確認するには、Compute Engine 認証情報を確認するをご覧ください。
Compute Engine インスタンスで秘密鍵認証情報を使用している場合は、認証情報が無効であるか、異なるプロジェクトの認証情報であることが考えられます。認証情報の詳細については、Ops エージェントを認可するをご覧ください。認証情報を確認するには、秘密鍵認証情報を確認するをご覧ください。
Compute Engine 認証情報を確認する
Google Cloud コンソールの Compute Engine の [VM インスタンス] ページを使用して、Compute Engine VM インスタンスに Ops エージェント用の適切な認証情報があることを確認します。認証情報は、通常はすべての新規 Compute Engine VM インスタンスのデフォルトのサービス アカウントに追加されますが、インスタンスの作成時にこれらのデフォルトを上書きできます。
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Compute Engine] の結果を選択します。
- 必要に応じて、現在の Google Cloud プロジェクトを Compute Engine VM インスタンスに関連付けられたプロジェクトに変更します。たとえば、[課金を有効にする] のプロンプトが表示された場合は、現在のプロジェクトに Compute Engine VM インスタンスがないことを意味します。
- [VM インスタンス] ページで、VM インスタンスの名前をクリックします。VM インスタンスの詳細ページが表示されます。
- [VM インスタンスの詳細] ページで、[Cloud API アクセス スコープ] の見出しの下を見ます。
- 「すべての Cloud APIs に完全アクセス権を許可」と表示されている場合は、適切な認証情報があります。
- Stackdriver Monitoring API(Cloud Monitoring API の古い名前)の横に、書き込みのみまたはフル権限があることが表示されている場合、適切な認証情報があります。
- それ以外の場合、インスタンスのデフォルトのサービス アカウントにエージェントが必要とする認証情報はありません。インスタンスでエージェントを使用するには、秘密鍵サービス アカウント認証情報を追加する必要があります。手順については、認証情報の追加をご覧ください。
デフォルト認証情報が正しい場合は、Linux と Windows へのインストールに進みます。
秘密鍵認証情報を確認する
有効な秘密鍵認証情報が VM インスタンスにインストールされていることを確認するには、まず認証情報ファイルが予期されるロケーションに存在することを確認してから、認証情報ファイル内の情報が有効であることを確認します。以前に有効だった認証情報は、Google Cloud コンソールの [IAM と管理] > [サービス アカウント] セクションを使用して取り消すことができます。有効な認証情報が存在しない場合は、認証情報の追加を参照して、既存の認証情報を置換するか新しい認証情報を追加します。
認証情報は存在するか
秘密鍵サービス アカウント認証情報がインスタンスに存在するかどうかを確認するには、インスタンスで次の Linux コマンドを実行します。
sudo cat $GOOGLE_APPLICATION_CREDENTIALS
sudo cat /etc/google/auth/application_default_credentials.json
どちらかのコマンドで次のようなファイルが表示される場合は、インスタンスに有効な秘密鍵認証情報が存在する可能性があります。両方のコマンドでファイルが表示される場合は、GOOGLE_APPLICATION_CREDENTIALS
で示されたファイルが使用されます。
{
"type": "service_account",
"project_id": "{your-project-id}",
"private_key_id": "{your-private-key-id}",
"private_key": "{your-private-key}",
"client_email": "{your-project-number}-{your-key}@developer.gserviceaccount.com",
"client_id": "{your-client-id}",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "{x509-cert-url}",
"client_x509_cert_url": "{client-x509-cert-url}"
}
認証情報ファイルが存在しない場合は、認証情報の追加をご覧ください。
認証情報は有効か
認証情報ファイルで、project_id
フィールドは Google Cloud プロジェクトであり、client_email
はプロジェクト内のサービス アカウント、private_key_id
はサービスの秘密鍵を識別します。この情報を、Google Cloud コンソールの [IAM と管理] > [サービス アカウント] セクションに表示されている情報と照合します。
次のいずれかに該当する場合、認証情報ファイルは有効ではありません。
- Compute Engine VM インスタンスをチェックしているものの、認証情報ファイル内の Google Cloud プロジェクトがインスタンスを含むプロジェクトではない。
- リストされたサービス アカウントが存在しない。削除された可能性があります。
- リストされたサービス アカウントで適切なロールが有効になっていない。少なくとも、指標収集用の
roles/monitoring.metricWriter
(モニタリング指標の書き込み)と、ログの書き込みのためのroles/logging.logWriter
(ログ書き込み)が必要です。 - 秘密鍵が存在しない。取り消された可能性があります。
サービス アカウントに問題はないものの、秘密鍵が取り消されている場合は、新しい秘密鍵を作成してインスタンスにコピーできます。それ以外の場合は、次の認証情報の追加の説明に従って新しいサービス アカウントを作成する必要があります。
新しい認証情報の生成
認証情報が有効でない場合は、次の操作を行います。
- 秘密鍵で承認しなければならないインスタンスを含む接続プロジェクト(アクセス スコープ
https://www.googleapis.com/auth/monitoring.write
を含めずに作成された Compute Engine インスタンス)ごとにサービス アカウントを作成し、秘密鍵を生成します(まだ存在しない場合)。手順は次のとおりです。-
Google Cloud コンソールで、[settings設定] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。
- [SUMMARY] タブを選択します。問題の Compute Engine リソースを含むプロジェクトを特定し、Google Cloud コンソールに移動します。
- Google Cloud コンソールの [IAM Service Accounts] ページに移動します。Google Cloud プロジェクトを選択して新しいサービス アカウントを作成し、そのサービス カウント用に新しい秘密鍵を生成します。
これらの手順を行うには、次のいずれかを行います。
[IAM Service Accounts] ページに移動して、Google Cloud プロジェクトを選択し、サービス アカウントの作成の手順を行います。
次のボタンをクリックして、Google Cloud プロジェクトを選択します。
前のボタンを使用すると、エージェント固有のサービス アカウントの鍵を作成し、ローカル システムにダウンロードするプロセスが自動化されます。必要に応じて、このプロセスによって必要なサービス アカウントも作成され、サービス アカウントに正しい権限が付与されます。エージェント固有のサービス アカウントの名前は
stackdriver-1234@PROJECT_ID.iam.gserviceaccount.com
のようになります。これらのアクションが完了すると、次のようなダイアログが表示されます。
-
対象のサービス アカウントに対応するインスタンスで秘密鍵を置き換えます。
- Linux では、
/etc/google/auth/application_default_credentials.json
にある秘密鍵を置き換えます。 - Windows では、
C:\ProgramData\Google\Auth\application_default_credentials.json
にある秘密鍵を置き換えます。詳細については、秘密鍵をインスタンスにコピーするをご覧ください。
- Linux では、
エージェントを再起動する
- Linux の場合、
sudo service stackdriver-agent restart
を実行します。 - Windows では、サービス管理コンソールを開いて
Cloud Monitoring
サービスを再起動します。
- Linux の場合、
新しい秘密鍵が必要なプロジェクトが複数ある場合は、同じ手順をプロジェクトごとに繰り返します。
秘密鍵が正しいことを確認するには、認証情報は存在するかをご覧ください。具体的には、次のシナリオです。
- インスタンス上の秘密鍵 JSON ファイルの内容を表示します。たとえば、Linux の場合は
sudo cat /etc/google/auth/application_default_credentials.json
を実行します。 project_id
フィールドの値が、先ほど認証情報を生成したモニタリング対象プロジェクトのものと一致することを確認します。