Error Reporting 用の PHP アプリのインストルメント化

ライブラリの有効化

PHP アプリケーションから Error Reporting にエラーレポートを送信するには、PHP 用 Error Reporting ライブラリを使用します。

Error Reporting は、App EngineCompute EngineGoogle Kubernetes Engine などの一部の Google Cloud サービスに統合されています。Error Reporting は、こうしたサービスで実行されるアプリケーションによって Cloud Logging に記録されたエラーを表示します。詳細については、このページの Google Cloud Platform での実行をご覧ください。

Logging を使用して、エラーデータを Error Reporting に送信することもできます。データ形式の要件については、Logging のエラー メッセージの形式設定をご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Error Reporting API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Error Reporting API を有効にします。

    API を有効にする

クライアント ライブラリのインストール

PHP 用 Error Reporting ライブラリを使用すると、ほぼすべての場所で動作している PHP アプリケーションから報告されるエラーをモニタリングして表示できます。

インストールの詳細については、PHP 用 Error Reporting ライブラリのドキュメントをご覧ください。公開バグトラッカーを使用して問題を報告することもできます。

クライアント ライブラリの構成

PHP 用 Error Reporting ライブラリの動作をカスタマイズできます。構成可能なオプションのリストについては、ライブラリの構成をご覧ください。

エラーの報告

1. 次のコマンドを使用して、クラウド ライブラリをインストールします。

$ composer require google/cloud-error-reporting
2. 次の行を php.ini に追加します。ここで、WORKSPACE はワークスペースのルート ディレクトリの絶対パスです。
auto_prepend_file='/WORKSPACE/vendor/google/cloud-error-reporting/src/prepend.php'

このプリペンド ファイルは、エラーを自動的に Error Reporting に送信する例外ハンドラとエラーハンドラをインストールします。

App Engine フレキシブル環境を使用している場合は、このページの App Engine フレキシブル環境をご覧ください。

Google Cloud での実行

PHP 用 Error Reporting ライブラリを使用するには、Identity and Access Management Error Reporting Writer ロールが必要です。ほとんどの Google Cloud コンピューティング プラットフォームでは、デフォルトでこの役割が付与されます。

次の Google Cloud 環境で、PHP 用 Error Reporting を構成できます。

App Engine フレキシブル環境

App Engine は、デフォルトで Error Reporting Writer 役割を付与します。

PHP 用 Error Reporting ライブラリは、明示的に認証情報を提示しなくても使用できます。

App Engine フレキシブル環境で Error Reporting を有効にするには、次の手順を実行します。

  1. 次のコマンドを使用して必要なライブラリをインストールします。

    $ composer require google/cloud-error-reporting
  2. 次の行を app.yamlruntime_config セクションに追加します。

enable_stackdriver_integration: true

その後、ライブラリが、自動的に、すべてのエラーと捕捉されなかった例外を Error Reporting に収集します。独自の例外ハンドラをインストールするウェブ フレームワークを使用している場合は、フレームワークの統合のセクションをご覧ください。

Google Kubernetes Engine

GKE では、次のサンプル コマンドのように、クラスタの作成時に cloud-platform アクセス スコープを追加する必要があります。

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/cloud-platform

Compute Engine

Compute Engine VM インスタンスを使用する場合は、各インスタンスに cloud-platform アクセス スコープを追加します。Google Cloud Console から新しいインスタンスを作成する場合は、[インスタンスの作成] パネルの [ID と API へのアクセス] のセクションで行います。Compute Engine のデフォルト サービス アカウントまたは別のサービス アカウントを使用し、[ID と API へのアクセス] セクションの [すべての Cloud API に完全アクセス権を許可] を選択します。どのサービス アカウントを選択する場合でも、Google Cloud コンソールの IAM と管理 セクションで、そのアカウントに Error Reporting 書き込み役割が付与されていることを確認してください。

ローカルやその他の場所での実行

自分のワークステーション、データセンターのコンピュータ、別のクラウド プロバイダの VM インスタンスでライブラリを実行するなど、Google Cloud の外部で PHP 用 Error Reporting ライブラリを使用するには、Google Cloud プロジェクト ID と適切なサービス アカウント認証情報を PHP 用 Error Reporting ライブラリに直接提供する必要があります。

サービス アカウントの認証情報は手動で作成して取得できます。[ロール] フィールドを指定する場合は、Error Reporting Writer ロールを使用します。Identity and Access Management のロールの詳細については、アクセス制御ガイドをご覧ください。

エラーレポートの表示

Google Cloud コンソールで Error Reportingを使用するか、次のボタンをクリックしてプロジェクトを選択します。

Error Reporting に移動

詳細については、エラーの表示をご覧ください。

フレームワークの統合

一部のウェブ フレームワークは例外ハンドラをオーバーライドします。Laravel と Symfony で Error Reporting を有効にする例を以下に示します。他のフレームワークでは、Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler を例外ハンドラとして使用できます。

Laravel

次のように、ファイル app/Exceptions/Handler.php 内の report 関数を編集します。

public function report(Exception $exception)
{
    if (isset($_SERVER['GAE_SERVICE'])) {
        // Ensure Stackdriver is initialized and handle the exception
        Bootstrap::init();
        Bootstrap::exceptionHandler($exception);
    } else {
        parent::report($exception);
    }
}

また、ファイルの先頭に 1 行の use ステートメントを追加する必要もあります。

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

次の内容の新しいファイル src/AppBundle/EventSubscriber/ExceptionSubscriber.php を作成します。

// src/AppBundle/EventSubscriber/ExceptionSubscriber.php
namespace AppBundle\EventSubscriber;

use Google\Cloud\ErrorReporting\Bootstrap;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class ExceptionSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        // return the subscribed events, their methods and priorities
        return [KernelEvents::EXCEPTION => [
            ['logException', 0]
        ]];
    }

    public function logException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
        Bootstrap::exceptionHandler($exception);
    }
}