エージェントのトラブルシューティング

このページでは、Stackdriver Logging エージェントのインストールまたは操作に関連する一般的な問題のトラブルシューティングについて説明します。

チェックリスト

Stackdriver Logging エージェントのインストールまたは使用に問題がある場合は、次の点を確認してください。

  • インストール コマンドでエラーが返される場合は、Linux のインストール コマンドで sudo という接頭辞を使用していることを確認します。

  • エージェントのデーモン プロセスが Linux VM で実行されているかどうかが不明な場合は、次のコマンドを使用します。

    sudo service google-fluentd status
    

    エージェントが実行されていない場合は、エージェントの再起動が必要になることがあります。Linux では、次のコマンドを使用します。

    sudo service google-fluentd restart
    

    再起動に失敗し、ログ出力に「Disabled via metadata」と表示されている場合、Cloud Marketplace からのイメージを実行している可能性があります。Cloud Marketplace では Stackdriver Logging エージェントがデフォルトで無効になっています。この動作は google-logging-enable インスタンス メタデータ キー(値 0)によって制御されています。エージェントを有効な状態に戻すには、このキーを削除するか、その値を 1 に設定します(インスタンス メタデータの設定をご覧ください)。

    エージェントがメタデータによって無効化されている場合は、エージェントを再インストールしてください。エージェントを再インストールするをご覧ください。

  • エージェント デーモンからのエラー メッセージがログに書き込まれていないかどうかを確認します。Linux の Logging エージェントは fluentd パッケージであり、ログメッセージの記録先は /var/log/syslog または /var/log/messages です。ログメッセージの先頭には google-fluentd が付加されています。

    • HTTP 429 エラーが発生している場合は、Stackdriver Logging API の割り当てを超過している可能性があります。使用可能な割り当ては、GCP Console の [API とサービス] > [ダッシュボード] から確認できます。Stackdriver Logging API を選択してください。

    • API アクセスや認証に関する問題が表示される場合は、後述の Compute Engine 認証情報を確認するをご覧ください。

  • エージェントが正常に実行されているように見えても、データを取得できていない場合、エージェントが正しいプロジェクトにデータを送信していることを確認してください。後述の Compute Engine 認証情報を確認するをご覧ください。

エージェントのインストールを確認する

インストールに成功したことを確認するには、ログビューアでエージェントのテストログ エントリを確認します。

ログビューアに移動

  1. ページの上部で、VM インスタンスが含まれているプロジェクトを選択します。

    • Compute Engine VM インスタンスの場合は、VM インスタンスが含まれているプロジェクトを選択します。
    • Amazon EC2 VM インスタンスの場合は、AWS アカウントをワークスペースに接続するときに Stackdriver が作成した AWS LINK プロジェクトを選択します。
    • Compute Engine VM インスタンスを含むプロジェクトでない限り、ワークスペース プロジェクトは選択しないでください。
  2. ウィンドウのタブで、VM インスタンスのリソースを選択します。

    • Compute Engine の場合は、[GCE VM インスタンス] を選択します。
    • Amazon EC2 の場合は、[AWS EC2 インスタンス] を選択します。
    • [syslog](Linux)、[fluent.info](Windows)、または [すべてのログ] を選択します。

「Successfully sent gRPC to Stackdriver Logging API」というログエントリがある場合、エージェントのインストールは完了しています。このメッセージは、エージェントがインストールされたときに 1 回だけ、エージェントの再起動時に毎回生成されます。

ログビューアの詳細については、ログの表示をご覧ください。

エージェントをテストする

エージェントが動作していないと思われる場合は、実行されていることを確認し、Stackdriver Logging にテスト メッセージを送信してみます。

Linux インスタンス

次の手順は、Linux が実行されている Compute Engine インスタンスと Amazon EC2 VM インスタンスの両方に適用されます。

  1. VM インスタンスで次のコマンドを実行して、Logging エージェントが実行されていることを確認します。

    ps ax | grep fluentd
    

    出力は次のようになります。

     2284 ?        Sl     0:00 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd [...]
     2287 ?        Sl    42:44 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd [...]
    
  2. VM インスタンスで次のコマンドを実行して、テストログ メッセージを送信します。

    logger "Some test message"
    

Windows インスタンス

Logging エージェントには、次の 2 つの Windows サービス名があります。

  • バージョン v1-5 以降の場合は StackdriverLogging
  • それよりも前のバージョンの場合は fluentdwinsvc

1 つのエージェント サービスのみを実行してください。PowerShell を使用して、VM インスタンスで次のコマンドを実行します。

  1. 両方のサービスのステータスを確認します。実行する必要があるサービスがわかっている場合は、そのサービス名を使用できます。

    Get-Service StackdriverLogging,fluentdwinsvc
    
  2. サービスが実行されていない場合は、エラー メッセージが表示されます。実行中の場合は、次のような出力が表示されます。

    Status    Name                DisplayName
    ------    ----                -----------
    Running  StackdriverLogging   Stackdriver Logging
    
  3. 両方のサービスにクエリを送信すると、次の 1 つのエラー メッセージと 1 つの Running ステータスが表示されます。

    • Running ステータスが表示されない場合、Logging エージェントは実行されていません。
    • StackdriverLogging が実行中であることが表示された場合は、最新のエージェント バージョンが実行されています。具体的なバージョンを確認するには、バージョンを取得するをご覧ください。
    • fluentdwinsvc が実行中であることが表示された場合は、最新バージョンにエージェントをアップグレードする必要があります。
  4. 管理者権限が必要: いずれかのエージェント バージョンが実行されている場合は、次の PowerShell コマンドを実行してテストログ メッセージを送信します。

    New-EventLog   -LogName Application -Source "Test Source"
    Write-EventLog -LogName Application -Source "Test Source" -EntryType Information -EventID 1 -Message "Testing 123 Testing."
    

テスト メッセージを検索する

テスト メッセージの送信後に、それをログビューアで探します。

ログビューアに移動

  1. ページの上部で、VM インスタンスが含まれているプロジェクトを選択します。

    • Compute Engine VM インスタンスの場合は、VM インスタンスが含まれているプロジェクトを選択します。
    • Amazon EC2 VM インスタンスの場合は、AWS アカウントをワークスペースに接続するときに Stackdriver が作成した AWS LINK プロジェクトを選択します。
    • Compute Engine VM インスタンスを含むプロジェクトでない限り、ワークスペース プロジェクトは選択しないでください。
  2. ウィンドウのタブで、VM インスタンスのリソースを選択します。

    • Compute Engine の場合は、[GCE VM インスタンス] を選択します。
    • Amazon EC2 の場合は、[AWS EC2 インスタンス] を選択します。
    • [syslog](Linux)、[fluent.info](Windows)、または [すべてのログ] を選択します。
  3. テスト メッセージを含むログエントリがあります。その場合、Logging エージェントは正常に動作しています。

Compute Engine 認証情報を確認する

秘密鍵の認証情報を使用せずに Compute Engine VM インスタンスでエージェントを実行する場合、インスタンスには適切なアクセス スコープが必要です。また、インスタンスで使用されるサービス アカウント ID には適切な IAM 権限が必要です。

VM インスタンスを作成する場合は、デフォルトのスコープとサービス アカウントの設定だけでエージェントを実行できます。非常に古いインスタンスや、デフォルトの設定を変更したインスタンスの場合、適切な認証情報がない可能性があります。

アクセス スコープを確認する

アクセス スコープを確認するには、次の操作を行います。

  1. Compute Engine VM インスタンスのページを開きます。

    [インスタンス] ページを開く

  2. VM インスタンスの名前をクリックします。インスタンスの詳細ページが表示されます。

  3. ページで [Cloud API アクセス スコープ] という見出しを探します。

    1. 「このインスタンスは、すべての Google Cloud サービスに対する完全な API アクセス権を持っています。」と表示されている場合、アクセス スコープは適切です。
    2. Stackdriver Logging API の横に書き込み専用権限または完全権限が表示されている場合、インスタンスのアクセス スコープは Stackdriver Logging エージェントに十分な範囲です。
    3. Stackdriver Monitoring API の横に書き込み専用権限または完全権限が表示されている場合、インスタンスのアクセス スコープは Stackdriver Monitoring エージェントに十分な範囲です。

問題を解決する

Compute Engine インスタンスに適切なアクセス スコープがない場合は、必要なアクセス スコープをインスタンスに追加します

次の表に、Stackdriver Logging エージェントと Stackdriver Monitoring エージェントに関連するスコープを示します。

アクセス スコープ エージェントの権限
https://www.googleapis.com/auth/logging.write Logging エージェントに必要な権限
https://www.googleapis.com/auth/monitoring.write Monitoring エージェントに必要な権限

デフォルトのサービス アカウントの権限を確認する

Compute Engine VM インスタンスのアクセス スコープが適切であっても、インスタンスのデフォルト サービス アカウントがエージェントに適切な IAM 権限を提供しない場合があります。

デフォルトのサービス アカウントの権限を確認するには、デフォルトのサービス アカウントを探します。

  1. プロジェクトの Compute Engine ダッシュボードを開きます。

    Compute Engine インスタンスのページを開く

  2. VM インスタンスの名前をクリックします。インスタンスの詳細ページが表示されます。

  3. ページで [サービス アカウント] という見出しを探します。インスタンスのデフォルトのサービス アカウントが表示されます。次のようになります。

    [ID]-compute@developer.gserviceaccount.com
    
  4. プロジェクトの [IAM と管理] > [IAM] の順に移動します。「[PROJECT_NAME] プロジェクトの権限」というページ見出しが表示されます。

    [IAM] ページを開く

  5. [表示: メンバー] を選択します。ユーザー、グループ、サービス アカウントの一覧が表示されます。[役割] 列に、プロジェクトの各メンバーの役割が表示されます。

  6. インスタンスのデフォルト サービス アカウントの行に、1 つ以上の役割が表示されます。

    • 編集者が表示されている場合、その役割はすべてのエージェントに適切です。 編集者は、Compute Engine のサービス アカウントに割り当てられるデフォルトの役割です。
    • ログ書き込みが表示されている場合は、これは Logging エージェントに十分な役割です。書き込み権限を含む他のロギング役割については、Stackdriver Logging のアクセス制御をご覧ください。
    • モニタリング指標の書き込みが表示されている場合、これは Monitoring エージェントに十分な役割です。書き込み権限を含む他のモニタリング役割については、Stackdriver Monitoring のアクセス制御をご覧ください。

問題を解決する

デフォルトのサービス アカウントに十分な役割がない場合は、[IAM と管理] > [IAM] ページの順に移動して、サービス アカウントの役割を編集してみてください。エージェントの承認に必要な Logging 役割または Monitoring 役割を追加します(Logging の場合はログ書き込みMonitoring の場合はモニタリング指標の書き込み)。

秘密鍵認証情報を確認する

Compute Engine VM インスタンスでは、適切な権限を持つデフォルト以外のサービス アカウントを使用するようにエージェントを構成できます。AWS EC2 VM インスタンスでは、このようなサービス アカウントを使用するようにエージェントを構成する必要があります。

この方法でエージェントを構成するには、該当するサービス アカウントの秘密鍵の認証情報を作成し、エージェントに渡す必要があります。エージェントは、次の 2 つの方法で認証情報を検索します。

  1. 秘密鍵の認証情報を含むファイルの名前が格納されている環境変数 GOOGLE_APPLICATION_CREDENTIALS を検索します。
  2. この環境変数が存在しない場合は、標準ファイルで認証情報を探します。

Linux

 /etc/google/auth/application_default_credentials.json

Windows

C:\ProgramData\Google\Auth\application_default_credentials.json

次の情報は、秘密鍵の認証情報の問題を診断するのに役立ちます。

  1. 秘密鍵は適切な場所にあるか
  2. 秘密鍵はサービス アカウントに対して有効か
  3. エージェントに必要な役割がサービス アカウントに付与されているか

有効な秘密鍵認証情報が VM インスタンスにインストールされていることを確認するには、まず認証情報ファイルが必要な場所に存在することを確認してから、認証情報ファイル内の情報が有効であることを確認します。以前に有効だった認証情報は、GCP Console の [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 は GCP プロジェクト、client_email はプロジェクト内のサービス アカウント、private_key_id はサービス アカウントの秘密鍵を示します。この情報を、GCP Console の [IAM と管理] > [サービス アカウント] セクションの情報と照合します。

次のいずれかに該当する場合、認証情報ファイルは無効です。

  • Compute Engine インスタンスをチェックしていますが、認証情報ファイル内の GCP プロジェクトはインスタンスを含むプロジェクトではありません。
  • Amazon EC2 インスタンスをチェックしていますが、認証情報ファイル内の GCP プロジェクトは AWS アカウントのコネクタ プロジェクト(名前は AWS Link...)ではありません。
  • リストされたサービス アカウントが存在しません。削除された可能性があります。
  • リストされたサービス アカウントで適切な役割が有効になっていません。Stackdriver Logging エージェントの場合はログ書き込み、Stackdriver Monitoring エージェントの場合はモニタリング指標の書き込みが必要です。
  • 秘密鍵が存在しません。取り消された可能性があります。

サービス アカウントに問題はないものの、秘密鍵が取り消されている場合は、新しい秘密鍵を作成してインスタンスにコピーできます。サービス アカウントキーの作成をご覧ください。

それ以外の場合は、認証情報の追加の説明に従って新しいサービス アカウントを作成する必要があります。

エージェントを再インストールする

最新バージョンのエージェントをインストールすると、多くの問題が解決する可能性があります。

その他の一般的な問題

次の表に、Stackdriver Logging エージェントで発生する可能性がある一般的な問題とその修正方法を示します。

Linux の場合、Logging エージェントはエラーを /var/log/google-fluentd/google-fluentd.log に記録します。エラークラス Google::APIClient::ClientError は、権限または API アクセスに問題があることを示します。

エージェントが正常に実行された後でも、エラーが発生する場合があります。たとえば、プロジェクトや VM インスタンスに必要な権限が誰かに取り消された場合などです。

エラー 原因 解決方法
The agent's installer on Windows fails to run(Windows 上でエージェントのインストーラの実行に失敗します) インストーラをシステム ディレクトリにダウンロードした可能性があります。 インストーラを C:\Users\[USERID]\ など、システム以外のディレクトリに移動します。
Project has not enabled the API(プロジェクトで API が有効化されていません) プロジェクトで Stackdriver Logging API を有効にしていません。 API Console に移動して、Stackdriver Logging API のステータスを ON に変更します。
Request had invalid credentials(リクエストの認証情報が無効です)
または
Unable to fetch access token (no scopes configured?)(アクセス トークンを取得できません(スコープ未構成?))
VM インスタンスに適切な認証情報がありません。Amazon EC2 VM を使用している場合は、エージェントをインストールする前に認証情報を VM インスタンスにインストールする必要があります。 エージェントの承認の説明に沿って、認証情報をインストールします。
Authorization failed(承認に失敗しました) Logging エージェント用の秘密鍵承認認証情報が正しく構成されていません。 秘密鍵認証情報の確認をご覧ください。
呼び出し元に権限がありません プロジェクトで承認に使用しているサービス アカウントに十分な権限がありません。これは、Compute Engine または App Engine の中で使用されるデフォルトのサービス アカウントのこともあれば、秘密鍵承認用に使用されるユーザー定義のサービス アカウントのこともあります。このアカウントに編集可能の権限が付与されている必要があります。 プロジェクトの IAM ページでサービス アカウントの権限を変更します。必要であれば、インスタンスのサービス アカウントとアクセス スコープを変更するの手順で既存の VM のアクセス スコープを変更できます。
Cannot obtain project ID(プロジェクト ID を取得できません) Stackdriver Logging エージェントがサービス アカウントの秘密鍵の認証情報ファイルからプロジェクト ID を取得できません。 エージェントのプロジェクト ID を追加またはオーバーライドするには、VM インスタンス上でエージェントの構成ファイル /etc/google-fluentd/google-fluentd.conf を編集します。 <match **> セクションに次の行を追加してください。
project_id [YOUR_PROJECT_ID]
またはエージェントの承認を参照して認証情報を修正または置換してください。
Logging agent stops ingesting logs in the presence of logrotate(logrotate が存在するときに、Logging エージェントがログの取り込みを停止します) logrotate が copytruncate に設定されている場合、Logging エージェントが入力ファイル内での現在の場所を見失うことがあります。 logrotate によってファイルの切り捨てではなくファイルの移動が行われるよう、nocopytruncate を設定することをおすすめします。copytruncate を設定したままにする場合は、対応策として定期的にエージェントを再起動してください。postrotate を設定してエージェントを再起動することもできます。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。