💭

MastraにおけるOpentelemetry設定例

に公開

Mastra の Install

今回はこの部分を割愛します。他の方でわかりやすく解説されている記事があるので、それを元に Install してもらうのが良いです。

公式ドキュメントはこちら: https://mastra.ai/ja/docs/getting-started/installation

OpenTelemetry の設定箇所

ローカル環境での設定例(Jaeger を使って)

今回は Docker Compose を使って Mastra と Jaeger を起動して、Mastra の Opentelemetry を Jaeger に送信する例を記載します。

Mastra 設定例

  • src/mastra/index.ts
    • ここでは、install 直後の設定から telemetry の設定を追加しています。
src/mastra/index.ts
import { Mastra } from '@mastra/core/mastra';
import { PinoLogger } from '@mastra/loggers';
import { LibSQLStore } from '@mastra/libsql';
import { weatherWorkflow } from './workflows/weather-workflow';
import { weatherAgent } from './agents/weather-agent';

export const mastra = new Mastra({
  workflows: { weatherWorkflow },
  agents: { weatherAgent },
  storage: new LibSQLStore({
    // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
    url: ":memory:",
  }),
  logger: new PinoLogger({
    name: 'Mastra',
    level: 'info',
  }),
  // ここから
  telemetry: {
    serviceName: 'mastra-app',
    enabled: true,
    sampling: {
      type: 'always_on',
    },
    export: {
      type: 'otlp',
      endpoint: 'http://jaeger:4317',
      protocol: 'grpc', // grpc or httpを設定
    },
  }
  // ここまで
});

Jaeger 設定例

  • Docker Compose ファイル
    • mastra と jaeger を compose ファイルを使って起動する
compose.yml
services:
  app:
    build:
      context: .
    ports:
      - '4111:4111'
    depends_on:
      - jaeger
    networks:
      - default

  jaeger:
    image: jaegertracing/all-in-one:latest
    ports:
      - '16686:16686'
      - '4317:4317' # Opentelemetryを受け取るポート設定(gRPC)
      - '4318:4318' # Opentelemetryを受け取るポート設定(HTTP)
    environment:
      - COLLECTOR_OTLP_ENABLED=true
      - LOG_LEVEL=debug
      - SPAN_STORAGE_TYPE=memory
      - JAEGER_DISABLED=false
      - COLLECTOR_ZIPKIN_HOST_PORT=:9411
    networks:
      - default

Jaeger UI での表示内容

以下の画像のように Services にmastra-appが表示されていて、 Find Traces ボタンを押すとトレース内容が表示されます。
この様になっていれば、Opentelemetry の送信ができていることになります。

Discussion