ログエントリのストリーミングとライブ テーリング

概要

このページでは、ログエントリをリアルタイムで表示する方法について説明します。

Cloud Logging では、Logging が書き込むログエントリを次の機能を使用してリアルタイムで表示できます。

ログのストリーミング。ログのストリーミングはログ エクスプローラで行うことができます。

ライブ テーリング。リアルタイム テールは、gcloud コマンドライン ツール gcloud alpha logging tail および Cloud Logging API のメソッド entries.tail として行うことができます。

ログ エクスプローラ、gcloud logging read、または API メソッド entries.list を使用してログを表示して分析すると、Cloud Logging がすでに保存したログエントリが表示されます。一方、ログエントリをストリーミングまたはライブ テーリングすると、アプリケーションが Cloud Logging API にログエントリを書き込むと直ちにログエントリが表示されます。

ログ エクスプローラのログのストリーミング

ログ エクスプローラでは、ログのストリーミングを使用してログデータをリアルタイムで表示できます。ログのストリーミングを使用する場合は、クエリをログ エクスプローラに追加して、クエリに一致するログのみをストリーミングできます。

クエリに基づいてログをストリーミングするには、[クエリビルダー] ペインにクエリを追加して、[ログをストリーミングする] を選択します。Logging がログデータを書き込むと、[クエリ結果] ペインにクエリに一致するログのみが表示されます。クエリが指定されない場合、Logging は各ログを書き込みどおりに表示します。

クエリ式に一致するログをストリーミングする

ストリーミングを停止するには、[ストリーミングを停止する] をクリックするか、[クエリ結果] ペインで下にスクロールします。

gcloud コマンドライン ツールを使用したライブ テーリング

ライブ テーリングによって、gcloud コマンドライン ツールまたは Cloud Logging API を使用して、Cloud Logging によって書き込まれたログエントリをリアルタイムで表示できます。

ライブ テーリングのための API メソッドについては、entries.tail メソッドをご覧ください。

gcloud alpha logging tail のインストール

gcloud alpha logging tail を使用するには、Python 3 と grpcio Python パッケージをインストールしている必要があります。

Python をインストールする手順については、Python のページをご覧ください。grpcio パッケージのインストールに必要な Python パッケージ マネージャー pip をインストールする手順については、Python パッケージ インストーラのページをご覧ください。

次の手順に沿って gcloud alpha logging tail をインストールします。

  1. gcloud コマンドライン ツールをインストール済みであることを確認します。gcloud コマンドライン ツールをインストールする手順については、Cloud SDK のインストールをご覧ください。

  2. gcloud ツールのバージョン 302.0.0 以降を使用していることを確認します。

    gcloud version
    

    gcloud ツールの更新手順については、gcloud components update をご覧ください。

  3. gcloud ツールのアルファ版コンポーネントをインストールします。

    gcloud components install alpha
    
  4. MacOS、Linux、Cloud Shell のユーザーの場合:

    1. gRPC クライアント ライブラリをインストールします。

       sudo pip3 install grpcio
      
    2. 環境変数 CLOUDSDK_PYTHON_SITEPACKAGES を任意の値に設定します。

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. Cloud プロジェクト ID を設定して認証するには、次のコマンドを使用します。

    gcloud config set project PROJECT_ID
    gcloud auth login
    
  6. 次のコマンドを実行して、gcloud alpha logging tail がインストールされていることを確認します。

    gcloud alpha logging tail
    

    これで、Logging がログを書き込むと、プロジェクトのログエントリが表示されるようになりました。

    ライブテーリング セッション中のログエントリ。

ライブ テーリングの使用について詳しくは、gcloud alpha logging tail リファレンス ガイドをご覧ください。

バッファリングと順序付け

Logging は時系列順以外のログエントリを受信できることから、ライブ テーリングにはログエントリについて、書き込み時に表示する場合と昇順で表示する場合との間でトレードオフのバランスを取ることができるよう、バッファ時間の設定も用意されています。バッファ時間は 060 秒の間で設定できます。

バッファ時間の次の特性に留意してください。

  • デフォルトのバッファ時間は 2 秒です。

  • Logging によって、バッファ時間枠内のログエントリの取り込みが遅延されます。

  • ログエントリがバッファ時間枠の範囲外に書き込まれると、Logging は受信時にログエントリを返します。

バッファ時間を構成すると、ログを取り込み時に表示する場合と、エントリを順不同で表示する場合との間でトレードオフを行うことになります。

バッファ時間 トレードオフ
0 最新のログエントリが返されるものの、順不動になっている可能性が高くなります。
60 返されたエントリが表示されるまでに 60 秒間の遅延が発生。ただし、ほとんどのログは昇順で返されます。

上限と割り当て

次の表に、ライブ テーリングの上限と割り当てを示します。

上限と割り当て
1 分あたりに返されるエントリ数 60,000 件
フィルタと一致するエントリが 60,000 件を超える場合、Logging はそれらのエントリを抑制し、レスポンスで抑制されたエントリの数を返します。
1 クラウド プロジェクトあたりのオープンなライブテーリング セッション数 10

クライアントの制限事項

大量のエントリをすばやく書き込む Cloud プロジェクトでは、クライアントが作成中のエントリをすばやく使用できなくなることがあります。この場合、Logging は最新のエントリを優先して、送信されるエントリの合計数を制限します。テール セッションの最後に、Logging はクライアントの制限により表示されなかったエントリの数を返します。

クライアント ライブラリを使用したライブ テーリング

ライブ テーリングを使用することで、Cloud Logging によってログエントリが書き込まれると、リアルタイムでログエントリを表示できます。ライブ テーリングのための API メソッドについては、entries.tail メソッドをご覧ください。

この例では、特定のロガーのライブ テーリング ログエントリについて説明します。

Node.js

Logging 用のクライアント ライブラリをインストールして使用する方法については、Logging クライアント ライブラリをご覧ください。

const {Logging} = require('@google-cloud/logging');
const logging = new Logging();

/**
 * TODO(developer): Replace logName with the name of your log.
 */
const log = logging.log(logName);
console.log('running tail log entries test');

const stream = log
  .tailEntries({
    filter: 'timestamp > "2021-01-01T23:00:00Z"',
  })
  .on('error', console.error)
  .on('data', resp => {
    console.log(resp.entries);
    console.log(resp.suppressionInfo);
    // If you anticipate many results, you can end a stream early to prevent
    // unnecessary processing and API requests.
    stream.end();
  })
  .on('end', () => {
    console.log('log entry stream has ended');
  });

// Note: to get all project logs, invoke logging.tailEntries

Java

Logging 用のクライアント ライブラリをインストールして使用する方法については、Logging クライアント ライブラリをご覧ください。

import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.LogEntryServerStream;
import com.google.cloud.logging.Logging;
import com.google.cloud.logging.Logging.TailOption;
import com.google.cloud.logging.LoggingOptions;

public class TailLogEntries {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Optionally provide the logname as an argument.
    String logName = args.length > 0 ? args[0] : "";

    LoggingOptions options = LoggingOptions.getDefaultInstance();
    try (Logging logging = options.getService()) {

      // Optionally compose a filter to tail log entries only from specific log
      LogEntryServerStream stream;

      if (logName != "") {
        stream =
            logging.tailLogEntries(
                TailOption.filter(
                    "logName=projects/" + options.getProjectId() + "/logs/" + logName));
      } else {
        stream = logging.tailLogEntries();
      }
      System.out.println("start streaming..");
      for (LogEntry log : stream) {
        System.out.println(log);
        // cancel infinite streaming after receiving first entry
        stream.cancel();
      }
    }
  }
}