APM Field LabECV Operation · Technical Enablement RHEL · Apache · PHP-FPM
DATADOG APM · HANDS-ON

ติดตั้งบน EC2 RHEL

ทำตามลำดับ Apache → PHP-FPM → Datadog Agent/SSI → Integrations → ตรวจสอบ traces

01
CHECKPOINT 01

สำรวจเครื่องก่อนติดตั้ง

3 min

บันทึก OS, เวอร์ชัน runtime, สถานะ service และ endpoint ของ PHP-FPM ก่อนแก้ configuration

bash · EC2
cat /etc/redhat-release
php -v || true
php-fpm -v || true
httpd -v || true

sudo systemctl status httpd --no-pager || true
sudo systemctl status php-fpm --no-pager || true
sudo grep -E '^[; ]*listen[ .=]' /etc/php-fpm.d/www.conf || true

# ตรวจ outbound ที่ Agent ต้องใช้
curl -I --max-time 10 https://app.datadoghq.com

ผ่านเมื่อ ยืนยันได้ว่าเป็น RHEL 8/9 และออก HTTPS ไป Datadog ได้

02
CHECKPOINT 02

ติดตั้ง Apache และ PHP-FPM

5 min

ติดตั้ง package มาตรฐานของ RHEL แล้วเปิด service ให้เริ่มพร้อมระบบ

bash · EC2
sudo dnf install -y httpd php php-fpm php-cli curl
sudo systemctl enable --now php-fpm httpd

sudo apachectl configtest
systemctl is-active httpd php-fpm
curl -I http://127.0.0.1/

ผ่านเมื่อ configtest แสดง Syntax OK และ service ทั้งสองเป็น active

03
CHECKPOINT 03

สร้าง PHP endpoint สำหรับยิง traffic

5 min

ตัวอย่างมี latency หลายช่วงเพื่อให้ trace flame graph อ่านง่าย โดยไม่ต้องมีฐานข้อมูลภายนอก

bash · EC2
sudo tee /var/www/html/index.php >/dev/null <<'PHP'
<?php
header('Content-Type: application/json');

function loadCatalog(): array {
    usleep(random_int(15000, 45000));
    return ['agent', 'apm', 'integration'];
}

$started = microtime(true);
$items = loadCatalog();
usleep(random_int(5000, 20000));

echo json_encode([
    'service' => 'customer-demo-php',
    'status' => 'ok',
    'items' => $items,
    'duration_ms' => round((microtime(true) - $started) * 1000, 2)
], JSON_PRETTY_PRINT);
PHP

sudo restorecon -Rv /var/www/html
curl -s http://127.0.0.1/index.php

ผ่านเมื่อ ได้ JSON ที่มี "status": "ok"

05
CHECKPOINT 05

กำหนด Unified Service Tags

7 min

PHP-FPM มักใช้ clear_env=yes จึงกำหนดค่าผ่าน env[] ใน pool โดยตรง แล้ว restart runtime เพื่อโหลด tracer

ini · /etc/php-fpm.d/www.conf
env[DD_SERVICE] = customer-demo-php
env[DD_ENV] = lab
env[DD_VERSION] = 1.0.0
env[DD_APM_TRACING_ENABLED] = 1
env[DD_LOGS_INJECTION] = 1
bash · apply & inspect
sudo php-fpm -t
sudo systemctl restart php-fpm httpd
sudo systemctl restart datadog-agent

php-fpm -i | grep -iE 'ddtrace|datadog|dd_library_loader'

ผ่านเมื่อ output ของ PHP-FPM พบ ddtrace หรือ Datadog library loader

06
CHECKPOINT 06

เปิด Apache และ PHP-FPM integrations

12 min

6.1 Apache mod_status

apache · /etc/httpd/conf.d/datadog-status.conf
<Location "/server-status">
    SetHandler server-status
    Require local
</Location>

ExtendedStatus On
yaml · /etc/datadog-agent/conf.d/apache.d/conf.yaml
init_config:

instances:
  - apache_status_url: http://127.0.0.1/server-status?auto
    tags:
      - env:lab
      - service:customer-demo-php

6.2 PHP-FPM status และ ping

ini · เพิ่มใน /etc/php-fpm.d/www.conf
pm.status_path = /status
ping.path = /ping
ping.response = pong
apache · เพิ่มใน datadog-status.conf
<LocationMatch "^/(status|ping)$">
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"
    Require local
</LocationMatch>
yaml · /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
init_config:

instances:
  - status_url: http://127.0.0.1/status
    ping_url: http://127.0.0.1/ping
    ping_reply: pong
    tags:
      - env:lab
      - service:customer-demo-php
bash · restart & verify
sudo apachectl configtest
sudo php-fpm -t
sudo systemctl restart php-fpm httpd datadog-agent

curl -s 'http://127.0.0.1/server-status?auto' | head
curl -s http://127.0.0.1/status | head
curl -s http://127.0.0.1/ping

sudo datadog-agent check apache
sudo datadog-agent check php_fpm

ผ่านเมื่อ Apache และ PHP-FPM checks แสดง [OK] และ ping ตอบ pong

07
CHECKPOINT 07

สร้าง traffic และยืนยัน trace

5 min
bash · EC2
for i in {1..30}; do
  curl -fsS http://127.0.0.1/index.php >/dev/null
  sleep 0.2
done

sudo datadog-agent status
sudo datadog-agent health

จากนั้นไปที่ APM → Traces ใน Datadog แล้ว filter ด้วย:

service:customer-demo-php AND env:lab

ผ่านเมื่อ เห็น request traces, runtime fpm-fcgi และ Agent รายงาน traces/spans มากกว่า 0

คัดลอกแล้ว