docker-compose PHP로 DatadogAPM을 사용해보십시오.

docker-compose에서 Datadog Agent 사용 의 계속입니다.

준비



우선
htps : // 기주 b. 이 m/다른 g/d dt 라세 php/bぉb/마s r/도 cs/갓친 g_s r d. md
을 바탕으로 진행합니다.
(컨테이너에 dd-trace-php를 미리 설정하는 것은 일단 후회로···)

위 문서에는
mkdir dd-trace
cd dd-trace
curl -L https://github.com/DataDog/dd-trace-php/archive/v0.2.5.tar.gz | tar x --strip-components=1
phpize # generate files needed to build PHP extension
./configure
make
sudo make install

하지만 curl 명령을 실행하면 x 옵션이 없으면 오류로 화나므로이 줄 만
curl -L https://github.com/DataDog/dd-trace-php/archive/v0.2.5.tar.gz | tar xz --strip-components=1

와 z 옵션을 더해 실행하면 좋을 것 같은 느낌이었습니다.
(컨테이너에 따라서는 Make 커멘드 사용할 수 없을지도 모르기 때문에, 「yum install make」라든가로 넣어 두어 주세요)

"Enabling the extension"에 쓰여있다.

dd.ini
extension=ddtrace.so

설정을 추가하는 것을 잊지 마십시오. "/etc/php.d/"다음에 추가하여
php -m | grep ddtrace

이 명령으로 확인하십시오. 이 근처는 문서대로 진행해 나가면 OK.

지난번 설정한 docker-compose.yml을 사용합니다.

docker-compose.yml
  hogehoge:
    image: hogehoge
    container_name: hogehoge
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./httpd/vhosts.conf:/etc/httpd/conf.d/vhosts.conf
      - ./admin/:/var/www/
    links:
      - dd-agent:dd-agent
    depends_on:
      - dd-agent

  dd-agent:
    container_name: dd-agent
    image: datadog/docker-dd-agent
    environment:
      - API_KEY=[API_KEY]
      - DD_APM_ENABLED=true
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /proc/mounts:/host/proc/mounts:ro
     - /sys/fs/cgroup:/host/sys/fs/cgroup:ro
    ports:
      - "8126:8126/tcp"

APM을 사용하는 경우 Datadog Agent 측
DD_APM_ENABLED=true

이 설정을 잊지 마십시오.

endpoint 설정



Advanced APM Setup 에 쓰여진 Manual Instrumentation 및
dd-trace-php 에 쓰여진 Using the tracer를 바탕으로 그것 같은 샘플을 만들어 보자.
그렇지만, 그대로는 움직이지 않아 일부 바꾸지 않으면 안 되는 곳의 설명.
DDTrace/Transport/Http.php 의 DEFAULT_ENDPOINT가 localhost를 향하고 있으므로 Datadog Agent를 향하도록 한다.

DDtrace/Transport/Http.php
final class Http implements Transport
{
    const DEFAULT_ENDPOINT = 'http://localhost:8126/v0.3/traces';

    /**
     * @var Encoder
     */
    private $encoder;

    /**
     * @var array
     */
    private $headers = [];

    /**
     * @var array
     */
    private $config;

    /**
     * @var LoggerInterface
     */
    private $logger;

    public function __construct(Encoder $encoder, LoggerInterface $logger = null, array $config = [])
    {
        $this->encoder = $encoder;
        $this->logger = $logger ?: new NullLogger();
        $this->config = array_merge([
            'endpoint' => self::DEFAULT_ENDPOINT,
        ], $config);

        $this->setHeader('Datadog-Meta-Lang', 'php');
        $this->setHeader('Datadog-Meta-Lang-Version', \PHP_VERSION);
        $this->setHeader('Datadog-Meta-Lang-Interpreter', \PHP_SAPI);
        $this->setHeader('Datadog-Meta-Tracer-Version', Version\VERSION);
    }

구현을 보면 config가 array_merge이므로 엔드 포인트를 전달하면 좋을 것 같습니다.

AdvancedAPMSetup 및 dd-trace-php의 sampleMerge 한 사람
<?php
use DDTrace\Tracer;
use DDTrace\Transport\Http;
use DDTrace\Encoders\Json;
use OpenTracing\GlobalTracer;
use DDTrace\Tags;
use DDTrace\Types;

$tracer = new Tracer(
    new Http(
        new Json(),
        null,
        [
            'endpoint' => 'http://dd-agent:8126/v0.3/traces',
        ]
    )
);
GlobalTracer::set($tracer);
$scope = GlobalTracer::get()->startActiveSpan("web.request");
$span = $scope->getSpan();
$span->setResource('testResource');
$span->setTag(Tags\SPAN_TYPE, Types\WEB_SERVLET);
$span->setTag('http.method', 'testMethod');
$span->finish();
GlobalTracer::get()->flush();


Http와 Json은
use DDTrace\Transport\Http;
use DDTrace\Encoders\Json;

이 녀석들을 use해서 사용할 수 있도록 한다.
그리고는 위에 쓴 대로 endpoint를 Datadog Agent의 이름으로 재기록한다.

그래서,

우선 무사동한 모양.
DatadogAPM이 대응하고 있는 framework 사용하면 분명 보다 편하게 할 수 있을 것.

※ API_KEY 본 사람은 슈퍼 봐주세요

좋은 웹페이지 즐겨찾기