ifcastle/open-telemetry

OpenTelemetry 简化库。

dev-main 2024-08-19 08:04 UTC

This package is auto-updated.

Last update: 2024-09-19 08:06:41 UTC


README

这是 OpenTelemetry 标准在 PHP 上的库的替代版本。

为什么需要这个?

原始的 OpenTelemetry 库具有复杂的跟踪构建架构,导致支持代码的增加。这个库提供了一个更简单、更扁平的界面来生成遥测数据。

安装

示例

<?php

declare(strict_types=1);

require_once __DIR__ . '/vendor/autoload.php';

use IfCastle\OpenTelemetry\Tracer;

$tracer = new Tracer(...);

$span = $tracer->createSpan('example-span', SpanKindEnum::INTERNAL);

try {
    $span->addEvent('event-name', ['key' => 'value'])
         ->setStatus(StatusCodeEnum::OK);
} catch (Throwable $exception) {
    $span->registerException($exception);
    throw $e;
} finally {
    $span->end();
}

简化图示

简化图示显示了创建跟踪所使用的结构。

  • TracerInterface 负责在应用程序中聚合遥测数据。它是一个工厂类,用于创建 Trace

  • TraceInterfaceSpanInterface 分别表示 TraceSpan 结构,根据 OpenTelemetry 定义。它们允许以方便的方式操作实体内的数据。

  • 要记录遥测数据,您可以使用 TracerInterface,或者结合使用 SpanInterface

@startuml class-diagram

  interface "TracerInterface" as TracerInterface {
    +newTelemetryContext()
    +createTrace()
    +endTrace(trace)
    +createSpan(spanName, spanKind, instrumentationScope, attributes)
    +endSpan(span)
    +registerLog(instrumentationScope, level, body, attributes)
    +registerException(throwable, attributes)
  }

  interface "SpanInterface" as SpanInterface {
    +addEvent(name, attributes, timestamp)
    +recordException(exception, attributes)
    +end(endEpochNanos)
    +addLink(link)
  }

  interface "TraceInterface" as TraceInterface {
    +newSpanId()
    +getTraceId()
    +getCurrentSpanId()
    +getCurrentSpan()
    +createSpan(spanName, spanKind, instrumentationScope, attributes)
    +endSpan(span)
    +end()
  }

  TraceInterface ..> SpanInterface
  TracerInterface ..> SpanInterface
  TracerInterface ..> TraceInterface

@enduml