全部产品
Search
文档中心

Application Real-Time Monitoring Service:Gunakan OpenTelemetry untuk melaporkan data jejak aplikasi PHP

更新时间:Jun 27, 2025

Setelah Anda menggunakan OpenTelemetry untuk menginstrumentasi aplikasi dan melaporkan data jejak ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi. Anda dapat melihat data pemantauan aplikasi seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan OpenTelemetry SDK untuk PHP untuk secara otomatis atau manual menginstrumentasi aplikasi PHP dan melaporkan data jejak aplikasi PHP.

Prasyarat

Memperoleh Titik Akhir

  1. Masuk ke Application Real-Time Monitoring Service (ARMS) Console. Di bilah navigasi sisi kiri, klik Integration Center.

  2. Di halaman Pusat Integrasi, klik kartu OpenTelemetry di bagian Server-side Applications.

  3. Di panel OpenTelemetry, klik tab Start Integration, lalu pilih wilayah tempat Anda ingin melaporkan data.

    Catatan

    Saat mengakses wilayah untuk pertama kalinya, sumber daya akan diinisialisasi secara otomatis.

  4. Konfigurasikan parameter Jenis Koneksi dan Protokol Ekspor, lalu salin titik akhir.

    • Jenis Koneksi: Jika layanan Anda diterapkan di Alibaba Cloud dan berada di wilayah yang dipilih, atur parameter ini ke Jaringan VPC Alibaba Cloud. Jika tidak, atur ke Jaringan Publik.

    • Protokol Ekspor: Atur parameter ini ke HTTP (direkomendasikan) atau gRPC sesuai protokol yang didukung oleh klien.

    75.jpg

Informasi latar belakang

OpenTelemetry SDK untuk PHP memungkinkan Anda secara otomatis atau manual menginstrumentasi aplikasi PHP dengan menggunakan versi PHP yang berbeda.

  • Untuk instrumentasi otomatis, gunakan PHP 8.0 atau lebih baru.

  • Untuk instrumentasi manual, gunakan PHP 7.4 atau lebih baru.

OpenTelemetry SDK untuk PHP mendukung instrumentasi otomatis berdasarkan beberapa kerangka kerja. Untuk informasi lebih lanjut, lihat Registry.

Kerangka Kerja Berdasarkan Instrumentasi Otomatis OpenTelemetry SDK untuk PHP

  • CodeIgniter

  • Asynchronous HTTP Client PHP

  • PHP IO

  • Laravel

  • MongoDB

  • PDO

  • Middleware PSR-15

  • HTTP Client PSR-18

  • PSR-3

  • Slim

  • Symfony

  • WordPress

  • Yii

Kode contoh

Unduh kode contoh dari php-demo.

Gunakan ekstensi PHP OpenTelemetry untuk secara otomatis menginstrumentasi aplikasi dan melaporkan data jejak

Bagian ini menjelaskan cara membuat aplikasi PHP yang mensimulasikan pelemparan dadu berdasarkan kerangka kerja Slim. Bagian ini juga menjelaskan cara menggunakan OpenTelemetry untuk secara otomatis menginstrumentasi aplikasi guna melaporkan data jejak secara non-intrusif. Selama proses ini, OpenTelemetry secara otomatis menghasilkan data jejak dan rentang.

OpenTelemetry mendukung instrumentasi otomatis berdasarkan beberapa kerangka kerja, termasuk Slim. Untuk informasi lebih lanjut, lihat Registry.

Prasyarat

PHP 8.0 atau lebih baru, Composer, dan PHP Extension Community Library (PECL) telah terinstal.

Prosedur

  1. Buat aplikasi pelemparan dadu.

    1. Inisialisasi aplikasi.

    mkdir <project-name> && cd <project-name>
    
    
    composer init \
     --no-interaction \
     --stability beta \
     --require slim/slim:"^4" \
     --require slim/psr7:"^1"
    composer update
    1. Tulis kode aplikasi.

      Buat file index.php di folder <project-name> dan tambahkan kode berikut.

      Kode contoh berikut mensimulasikan permainan pelemparan dadu yang melempar dadu dan mengembalikan angka acak dalam rentang satu hingga enam:

      <?php
      use Psr\Http\Message\ResponseInterface as Response;
      use Psr\Http\Message\ServerRequestInterface as Request;
      use Slim\Factory\AppFactory;
      
      require __DIR__ . '/vendor/autoload.php';
      
      $app = AppFactory::create();
      
      $app->get('/rolldice', function (Request $request, Response $response) {
       $result = random_int(1,6);
       $response->getBody()->write(strval($result));
       return $response;
      });
      
      $app->run();

      Setelah menulis kode aplikasi, jalankan perintah php -S localhost:8080 untuk menjalankan aplikasi. Kunjungi http://localhost:8080/rolldice di browser.

  2. Bangun ekstensi PHP OpenTelemetry.

    1. Unduh alat yang diperlukan untuk membangun ekstensi PHP OpenTelemetry.

      • macOS

        brew install gcc make autoconf
      • Linux (perintah apt)

        sudo apt-get install gcc make autoconf
    2. Gunakan PECL untuk membangun ekstensi PHP OpenTelemetry.

      pecl install opentelemetry

      Beberapa baris terakhir dari respons sukses serupa dengan output berikut:

      Build process completed successfully
      Installing '/opt/homebrew/Cellar/php/8.2.8/pecl/20220829/opentelemetry.so'
      install ok: channel://pecl.php.net/opentelemetry-1.0.0beta6
      Extension opentelemetry enabled in php.ini
    3. Opsional. Aktifkan ekstensi PHP OpenTelemetry.

      Jika pesan Extension opentelemetry enabled in php.ini dikembalikan pada langkah sebelumnya, lewati langkah ini.

      Tambahkan kode berikut ke file php.ini:

      [opentelemetry]
      extension=opentelemetry.so
    4. Verifikasi apakah ekstensi PHP OpenTelemetry dibangun dan diaktifkan.

      • Metode 1:

        php -m | grep opentelemetry

        Output yang diharapkan:

        opentelemetry
      • Metode 2

        php --ri opentelemetry

        Output yang diharapkan:

        opentelemetry
        opentelemetry support => enabled
        extension version => 1.0.0beta6
    5. Tambahkan dependensi tambahan yang diperlukan untuk OpenTelemetry SDK untuk PHP melakukan instrumentasi otomatis pada aplikasi pelemparan dadu.

      # Operasi ini membutuhkan waktu yang lama. Sejumlah besar informasi ditampilkan di konsol.
      pecl install grpc
      
      
      composer config allow-plugins.php-http/discovery false
      composer require \
        open-telemetry/sdk \
        open-telemetry/opentelemetry-auto-slim \
        open-telemetry/exporter-otlp \
        php-http/guzzle7-adapter \
        open-telemetry/transport-grpc
      • open-telemetry/sdk: paket OpenTelemetry SDK untuk PHP.

      • open-telemetry/opentelemetry-auto-slim: plugin instrumentasi otomatis OpenTelemetry SDK untuk PHP berdasarkan kerangka kerja Slim.

      • open-telemetry/exporter-otlp: dependensi yang diperlukan untuk OpenTelemetry SDK untuk PHP melaporkan data melalui OpenTelemetry Protocol (OTLP).

  3. Jalankan aplikasi.

    1. Jalankan perintah berikut:

      env OTEL_PHP_AUTOLOAD_ENABLED=true \
       OTEL_SERVICE_NAME=<your-service-name> \
       OTEL_TRACES_EXPORTER=otlp \
       OTEL_METRICS_EXPORTER=none \
       OTEL_LOGS_EXPORTER=none \
       OTEL_EXPORTER_OTLP_PROTOCOL=grpc \
       OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint> \
       OTEL_EXPORTER_OTLP_HEADERS=Authentication=<token> \
       OTEL_PROPAGATORS=baggage,tracecontext \
       php -S localhost:8080
      • <your-service-name>: nama aplikasi Anda. Contoh: php-demo.

      • <endpoint>: titik akhir gRPC yang telah Anda peroleh di bagian Prasyarat. Contoh: http://tracing-analysis-dc-hz.aliyuncs.com:8090.

      • <token>: token otentikasi yang telah Anda peroleh di bagian Prasyarat.

    2. Kunjungi URL berikut di browser:

      http://localhost:8080/rolldice

      Setiap kali Anda mengakses halaman ini, OpenTelemetry secara otomatis menghasilkan data jejak dan melaporkannya ke Managed Service for OpenTelemetry.

    3. Lihat data jejak.

      Masuk ke Managed Service for OpenTelemetry Console. Di halaman Applications, temukan aplikasi dan klik namanya. Di halaman detail aplikasi, lihat data jejak aplikasi.

Gunakan OpenTelemery SDK untuk PHP untuk secara manual menginstrumentasi aplikasi dan melaporkan data jejak

Bagian ini menjelaskan cara membuat aplikasi PHP yang mensimulasikan pelemparan dadu berdasarkan kerangka kerja Slim. Bagian ini juga menjelaskan cara menggunakan OpenTelemetry SDK untuk PHP untuk secara manual menginstrumentasi aplikasi guna melaporkan data jejak berdasarkan pengaturan kustom. Selama proses ini, Anda dapat membuat rentang di kode dan mengonfigurasi atribut, acara, dan status untuk rentang tersebut.

Jika instrumentasi otomatis tidak dapat memenuhi persyaratan bisnis Anda atau Anda ingin menambahkan instrumentasi secara manual berdasarkan persyaratan bisnis Anda, Anda dapat secara manual menginstrumentasi aplikasi untuk melaporkan data.

Prasyarat

PHP 7.4 atau lebih baru, Composer, dan PECL telah terinstal.

Prosedur

  1. Buat aplikasi pelemparan dadu.

    1. Inisialisasi aplikasi.

    mkdir <project-name> && cd <project-name>
    
    
    composer init \
     --no-interaction \
     --stability beta \
     --require slim/slim:"^4" \
     --require slim/psr7:"^1"
    composer update
    1. Tulis kode aplikasi.

      Buat file index.php di folder <project-name> dan tambahkan kode berikut.

      Kode contoh berikut mensimulasikan permainan pelemparan dadu yang melempar dadu dan mengembalikan angka acak dalam rentang satu hingga enam:

      <?php
      use Psr\Http\Message\ResponseInterface as Response;
      use Psr\Http\Message\ServerRequestInterface as Request;
      use Slim\Factory\AppFactory;
      
      require __DIR__ . '/vendor/autoload.php';
      
      $app = AppFactory::create();
      
      $app->get('/rolldice', function (Request $request, Response $response) {
       $result = random_int(1,6);
       $response->getBody()->write(strval($result));
       return $response;
      });
      
      $app->run();

      Setelah menulis kode aplikasi, jalankan perintah php -S localhost:8080 untuk menjalankan aplikasi. Kunjungi http://localhost:8080/rolldice di browser.

  2. Tambahkan dependensi OpenTelemetry SDK untuk PHP.

    gRPC

    1. Unduh pustaka klien HTTP PHP untuk melaporkan data jejak.

      composer require guzzlehttp/guzzle
    2. Unduh paket OpenTelemetry SDK untuk PHP.

      composer require \
       open-telemetry/sdk \
       open-telemetry/exporter-otlp
    3. Unduh dependensi yang diperlukan untuk melaporkan data melalui gRPC.

      pecl install grpc # Jika gRPC sudah diunduh dan diinstal, lewati langkah ini.
      composer require open-telemetry/transport-grpc

    HTTP

    1. Unduh pustaka klien HTTP PHP untuk melaporkan data jejak.

      composer require guzzlehttp/guzzle
    2. Unduh paket OpenTelemetry SDK untuk PHP.

      composer require \
       open-telemetry/sdk \
       open-telemetry/exporter-otlp
  3. Tulis kode inisialisasi OpenTelemetry.

    1. Buat file opentelemetry_util.php di direktori yang sama dengan file index.php.

    2. Tambahkan kode berikut ke file opentelemetry_util.php:

      gRPC

      <?php
      use OpenTelemetry\API\Common\Instrumentation\Globals;
      use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
      use OpenTelemetry\Contrib\Otlp\SpanExporter;
      use OpenTelemetry\SDK\Common\Attribute\Attributes;
      use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
      use OpenTelemetry\SDK\Resource\ResourceInfo;
      use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
      use OpenTelemetry\SDK\Sdk;
      use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
      use OpenTelemetry\SDK\Trace\Sampler\ParentBased;
      use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
      use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessorBuilder;
      use OpenTelemetry\SDK\Trace\TracerProvider;
      use OpenTelemetry\SemConv\ResourceAttributes;
      use OpenTelemetry\Contrib\Grpc\GrpcTransportFactory;
      use OpenTelemetry\Contrib\Otlp\OtlpUtil;
      use OpenTelemetry\API\Signals;
      // Inisialisasi OpenTelemetry selama inisialisasi aplikasi PHP.
      function initOpenTelemetry()
      { 
          // 1. Tentukan informasi tentang sumber daya OpenTelemetry.
          $resource = ResourceInfoFactory::emptyResource()->merge(ResourceInfo::create(Attributes::create([
              ResourceAttributes::SERVICE_NAME => '<your-service-name>', # Diperlukan. Nama aplikasi Anda.
              ResourceAttributes::HOST_NAME => '<your-host-name>' # Opsional. Nama host.
          ])));
      
          // 2. Buat SpanExporter yang mengekspor data rentang ke konsol.
          // $spanExporter = new SpanExporter(
          //     (new StreamTransportFactory())->create('php://stdout', 'application/json')
          // );
      
          // 2. Buat SpanExporter yang melaporkan data rentang melalui gRPC.
          $headers = [
              'Authentication' => "<your-token>",
          ];
          $transport = (new GrpcTransportFactory())->create('<grpc-endpoint>' . OtlpUtil::method(Signals::TRACE), 'application/x-protobuf', $headers);
          $spanExporter = new SpanExporter($transport);
      
          // 3. Tambahkan TracerProvider global untuk membuat tracer.
          $tracerProvider = TracerProvider::builder()
              ->addSpanProcessor(
                  (new BatchSpanProcessorBuilder($spanExporter))->build()
              )
              ->setResource($resource)
              ->setSampler(new ParentBased(new AlwaysOnSampler()))
              ->build();
      
          Sdk::builder()
              ->setTracerProvider($tracerProvider)
              ->setPropagator(TraceContextPropagator::getInstance())
              ->setAutoShutdown(true)  // Menentukan apakah akan menutup TracerProvider secara otomatis saat Anda keluar dari aplikasi PHP. Ini memastikan bahwa semua data jejak dilaporkan.
              ->buildAndRegisterGlobal(); // Tambahkan TracerProvider secara global.
      }
      ?>
      • <your-service-name>: nama aplikasi Anda

      • <your-host-name>: nama host

      • <your-token>: token otentikasi yang digunakan untuk melaporkan data melalui gRPC

      • <grpc-endpoint>: titik akhir yang digunakan untuk melaporkan data melalui gRPC

      HTTP

      <?php
      use OpenTelemetry\API\Common\Instrumentation\Globals;
      use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
      use OpenTelemetry\Contrib\Otlp\SpanExporter;
      use OpenTelemetry\SDK\Common\Attribute\Attributes;
      use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
      use OpenTelemetry\SDK\Resource\ResourceInfo;
      use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
      use OpenTelemetry\SDK\Sdk;
      use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
      use OpenTelemetry\SDK\Trace\Sampler\ParentBased;
      use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
      use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessorBuilder;
      use OpenTelemetry\SDK\Trace\TracerProvider;
      use OpenTelemetry\SemConv\ResourceAttributes;
      use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
      use OpenTelemetry\SDK\Common\Export\TransportFactoryInterface;
      
      // Inisialisasi OpenTelemetry selama inisialisasi aplikasi PHP.
      function initOpenTelemetry()
      { 
          // 1. Tentukan informasi tentang sumber daya OpenTelemetry.
          $resource = ResourceInfoFactory::emptyResource()->merge(ResourceInfo::create(Attributes::create([
              ResourceAttributes::SERVICE_NAME => '<your-service-name>', # Diperlukan. Nama aplikasi Anda.
              ResourceAttributes::HOST_NAME => '<your-host-name>' # Opsional. Nama host.
          ])));
      
          // 2. (Opsional) Buat SpanExporter yang mengekspor data rentang ke konsol.
          // $spanExporter = new SpanExporter(
          //     (new StreamTransportFactory())->create('php://stdout', 'application/json')
          // );
      
          
          // 2. Buat SpanExporter yang melaporkan data rentang melalui HTTP.
          $transport = (new OtlpHttpTransportFactory())->create('<http-endpoint>','application/x-protobuf');
          $spanExporter = new SpanExporter($transport);
      
          // 3. Tambahkan TracerProvider global untuk membuat tracer.
          $tracerProvider = TracerProvider::builder()
              ->addSpanProcessor(
                  (new BatchSpanProcessorBuilder($spanExporter))->build()
              )
              ->setResource($resource)
              ->setSampler(new ParentBased(new AlwaysOnSampler()))
              ->build();
      
          Sdk::builder()
              ->setTracerProvider($tracerProvider)
              ->setPropagator(TraceContextPropagator::getInstance())
              ->setAutoShutdown(true)  // Menentukan apakah akan menutup TracerProvider secara otomatis saat Anda keluar dari aplikasi PHP. Ini memastikan bahwa semua data jejak dilaporkan.
              ->buildAndRegisterGlobal(); // Tambahkan TracerProvider secara global.
      }
      ?>
      • <your-service-name>: nama aplikasi Anda

      • <your-host-name>: nama host

      • <http-endpoint>: titik akhir yang digunakan untuk melaporkan data melalui HTTP

  4. Modifikasi kode aplikasi dan gunakan API OpenTelemetry untuk membuat rentang.

    1. Impor paket yang diperlukan di file index.php.

      <?php
      
      use OpenTelemetry\API\Common\Instrumentation\Globals;
      use OpenTelemetry\SDK\Common\Attribute\Attributes;
      use OpenTelemetry\SDK\Trace\TracerProvider;
      
      require __DIR__ . '/opentelemetry_util.php';
    2. Panggil metode initOpenTelemetry untuk menginisialisasi OpenTelemetry. Operasi ini harus dilakukan selama inisialisasi aplikasi PHP.

      // Inisialisasi OpenTelemetry. Tentukan nama aplikasi, mode ekspor data jejak, dan titik akhir yang digunakan untuk melaporkan data jejak, serta buat TracerProvider global.
      initOpenTelemetry();
    3. Buat rentang saat memanggil operasi rolldice.

      /**
       * 1. Deskripsi operasi: mensimulasikan permainan pelemparan dadu yang melempar dadu dan mengembalikan angka acak dalam rentang satu hingga enam.
       * Buat rentang, dan konfigurasikan atribut, acara, dan acara dengan atribut untuk rentang tersebut.
       */
      $app->get('/rolldice', function (Request $request, Response $response) {
       // Dapatkan tracer.
       $tracer = \OpenTelemetry\API\Globals::tracerProvider()->getTracer('my-tracer');
       // Buat rentang.
       $span = $tracer->spanBuilder("/rolldice")->startSpan();
       // Konfigurasikan atribut untuk rentang.
       $span->setAttribute("http.method", "GET");
       // Konfigurasikan acara untuk rentang.
       $span->addEvent("Init");
       // Konfigurasikan acara dengan atribut.
       $eventAttributes = Attributes::create([
       "key1" => "value",
       "key2" => 3.14159,
       ]);
      
       // Kode bisnis.
       $result = random_int(1,6);
       $response->getBody()->write(strval($result));
      
       $span->addEvent("End");
       // Hancurkan rentang.
       $span->end();
      
       return $response;
      });
    4. Buat rentang bersarang.

      Buat operasi rolltwodices untuk mensimulasikan permainan pelemparan dadu yang melempar dua dadu dan mengembalikan angka acak dalam rentang satu hingga enam.

      Kode contoh berikut memberikan contoh cara membuat rentang bersarang:

      $app->get('/rolltwodices', function (Request $request, Response $response) {
       // Dapatkan tracer.
       $tracer = \OpenTelemetry\API\Globals::tracerProvider()->getTracer('my-tracer');
       // Buat rentang induk.
       $parentSpan = $tracer->spanBuilder("/rolltwodices/parent")->startSpan();
       $scope = $parentSpan->activate();
      
       $value1 = random_int(1,6);
      
       $childSpan = $tracer->spanBuilder("/rolltwodices/parent/child")->startSpan();
       
       // Kode bisnis.
       $value2 = random_int(1,6);
       $result = "dice1: " . $value1 . ", dice2: " . $value2; 
      
       // Hancurkan rentang.
       $childSpan->end();
       $parentSpan->end();
       $scope->detach();
      
       $response->getBody()->write(strval($result));
       return $response;
      });
    5. Gunakan rentang untuk mencatat pengecualian yang terjadi di kode.

      Buat operasi error untuk mensimulasikan kasus di mana pengecualian terjadi di operasi.

      Kode contoh berikut memberikan contoh cara menggunakan rentang untuk mencatat pengecualian yang terjadi di kode:

      $app->get('/error', function (Request $request, Response $response) {
       // Dapatkan tracer.
       $tracer = \OpenTelemetry\API\Globals::tracerProvider()->getTracer('my-tracer');
       // Buat rentang.
       $span3 = $tracer->spanBuilder("/error")->startSpan();
       try {
       // Simulasikan kasus di mana pengecualian terjadi di kode.
       throw new \Exception('exception!');
       } catch (\Throwable $t) {
       // Set status rentang ke error.
       $span3->setStatus(\OpenTelemetry\API\Trace\StatusCode::STATUS_ERROR, "pengecualian di span3!");
       // Catat jejak tumpukan pengecualian.
       $span3->recordException($t, ['exception.escaped' => true]);
       } finally {
       $span3->end();
       $response->getBody()->write("error");
       return $response;
       }
      });
  5. Jalankan aplikasi.

    1. Jalankan perintah berikut:

      php -S localhost:8080
    2. Kunjungi URL berikut di browser:

      http://localhost:8080/rolldice
      http://localhost:8080/rolltwodices
      http://localhost:8080/error

      Setiap kali Anda mengakses halaman, OpenTelemetry menghasilkan data jejak dan melaporkannya ke Managed Service for OpenTelemetry.

    3. Lihat data jejak.

      Masuk ke Managed Service for OpenTelemetry Console. Di halaman Applications, temukan aplikasi dan klik namanya. Di halaman detail aplikasi, lihat data jejak aplikasi.