> ## Documentation Index
> Fetch the complete documentation index at: https://docs.logbrew.co/llms.txt
> Use this file to discover all available pages before exploring further.

# LogBrew で Supabase のログドレインと Edge Functions のログを扱う

> ログドレインで Supabase のプラットフォームのログを LogBrew に送信します。JavaScript SDK で Supabase Edge Functions のログとエラーを取得します。

Supabase の2種類のデータを LogBrew に送信できます。

* ログドレインは、Supabase プロジェクトのプラットフォームのログを送信します。たとえば、Postgres、Auth、Storage、Edge Functions のログです。
* LogBrew JavaScript SDK は、自分で書いた Edge Function のコードが取得したログとエラーを送信します。

どちらか一方だけでも、両方でも使えます。どちらにもプロジェクトの取り込みキーが必要です。用途ごとに `server` キーを作成します。キーの種類については、[プロジェクトキーの種類](https://docs.logbrew.co/ja/guides/verify-setup.md#project-key-kinds)を参照してください。

## ログドレインでプラットフォームのログを送信する

Supabase のログドレインは、Supabase の Pro、Team、Enterprise プランで利用できます。Supabase は、ドレインごとの料金と、ドレインが送信するイベントの料金を請求します。ドレインを追加する前に、Supabase の料金を確認してください。

**1. ログドレインの設定を開く**

Supabase のダッシュボードでプロジェクトを開きます。**Project Settings** に移動し、**Log Drains** を開きます。

**2. OpenTelemetry の送信先を追加する**

種類が **OpenTelemetry (OTLP)** の送信先を追加します。次の値を設定します。

| フィールド | 値 |
| - | - |
| Endpoint | `https://api.logbrew.co/v1/logs` |
| Protocol | `http/protobuf` |
| Gzip | On |
| Headers | `x-logbrew-key`（値は取り込みキー） |

`x-logbrew-key` の代わりに、値が `Bearer lbw_ingest_...` の `Authorization` ヘッダーも使えます。

**3. 送信先を保存する**

送信先を保存します。Supabase が LogBrew へのログの送信を始めます。

**確認ポイント**：新しい Supabase のログが、LogBrew プロジェクトのログに表示されます。CLI で読み取るには、[テストイベントを読み戻す](https://docs.logbrew.co/ja/guides/verify-setup.md#verify-telemetry-arrival)の手順に従います。

LogBrew は、ドレインのデータを OTLP のログとして読み取ります。各ログのサービスは、リソース属性 `service.name` で決まります。その他のリソース属性は、ログのメタデータに残ります。LogBrew は、ログを保存する前に、URL や `authorization` などの属性から認証情報を取り除きます。対応関係の一覧は、[OpenTelemetry（OTLP）](https://docs.logbrew.co/ja/guides/opentelemetry.md)を参照してください。

ログが届かない場合は、エンドポイント、プロトコル、ヘッダーを確認します。取り込みキーは、読み取る LogBrew プロジェクトのキーである必要があります。

## Edge Functions でログとエラーを取得する

Supabase Edge Functions は Deno で動作します。npm の `@logbrew/node` を使います。このセットアップは、Deno 2.9、`@logbrew/node` 0.1.20、`@logbrew/sdk` 0.1.35 で動作します。

**1. 取り込みキーを関数のシークレットとして保存する**

Supabase CLI を使います。プレースホルダーを自分のキーに置き換えます。

```bash theme={null}
supabase secrets set LOGBREW_SERVER_API_KEY=lbw_ingest_placeholder
```

**2. クライアントを作成し、レスポンスを返す前にフラッシュする**

クライアントは、リクエストハンドラーの外で1回だけ作成します。イベントはハンドラーの中で取得します。レスポンスを返す前に `flush()` を呼び出します。関数はレスポンスを返した後に停止することがあるためです。

```ts theme={null}
import { createIssueAttributesFromError, SdkError } from "npm:@logbrew/sdk@^0.1.35";
import { createLogBrewNodeClient } from "npm:@logbrew/node@^0.1.20";

const logbrew = createLogBrewNodeClient({
  serverApiKey: Deno.env.get("LOGBREW_SERVER_API_KEY"),
  captureRuntimeContext: false,
  context: {
    schemaVersion: 1,
    resource: {
      service: { name: "checkout-function", version: "checkout@1" },
      runtime: { name: "deno", version: Deno.version.deno },
    },
  },
});

Deno.serve(async (request) => {
  const occurredAt = new Date().toISOString();
  logbrew.log(crypto.randomUUID(), occurredAt, {
    message: "checkout request",
    level: "info",
    metadata: { method: request.method },
  });
  let response = new Response("ok");
  try {
    await checkout(request);
  } catch (error) {
    logbrew.issue(
      crypto.randomUUID(),
      occurredAt,
      createIssueAttributesFromError(error, { service: "checkout-function" }),
    );
    response = new Response("checkout failed", { status: 500 });
  }
  try {
    await logbrew.flush();
  } catch (error) {
    console.error(error instanceof SdkError ? error.code : "logbrew_delivery_failed");
  }
  return response;
});

async function checkout(_request: Request) {
  // Your function code.
}
```

`captureRuntimeContext: false` と `runtime` コンテキストを指定すると、LogBrew はランタイムとして Deno を表示します。指定しない場合、SDK は Deno がエミュレートする Node.js のバージョンを報告します。

送信に失敗すると、`flush()` は `SdkError` をスローします。たとえば、エラーコードは `network_failure` です。この例では、関数のログにエラーコードだけを書き込みます。関数はそのままレスポンスを返します。

**3. 関数をデプロイして呼び出す**

`supabase functions deploy checkout` で関数をデプロイします。関数を1回呼び出します。

**確認ポイント**：LogBrew プロジェクトに `checkout request` のログが表示されます。

イベントのメタデータに、認証情報、リクエストの本文、顧客データを入れないでください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.