Sürüm: 0.71.0Bu dokümantasyon Spitfire 0.71.0 içindir.
PHP servisini OTel ile bağlamak
OpenTelemetry PHP eklentisi (opentelemetry) ve SDK, kütüphanelerin otomatik enstrümantasyon
paketleriyle koda dokunmadan trace ve log toplar. PHP kendiliğinden metrik üretmez: servis,
uygulama kendi metriklerini kaydettiğinde (Metrics API) Tower'lar ve
metrikler → Kaynaklar'da görünür; sunucunun metrikleri için
Collector. Değerler ve genel
kurallar: Servisleri OTel ile bağlamak: genel.
Sürüm tablosu
| PHP | PECL opentelemetry |
open-telemetry/sdk |
open-telemetry/exporter-otlp |
|---|---|---|---|
| 8.1 ve sonrası | 1.4.2 | 1.15.0 | 1.4.0 |
| 8.0 ve öncesi | desteklenmiyor | – | PHP 8.1+'ya yükseltin ya da yalnız sunucu metrikleri: Collector |
Sürümünüzü bulun: php --version (PHP-FPM için php-fpm<php-version> --version).
PHP 8.0: bu sürüm için son paketler güvenlik uyarısı olan google/protobuf sürümlerini ister, Composer bunları kurmaz. PHP 8.1+'ya yükseltin.
Doğrulandı: 2026-11-02. Kaynak: PHP zero-code belgesi (PHP 8.0+), PECL opentelemetry (sürüm başına en düşük PHP), Packagist open-telemetry/sdk, Packagist open-telemetry/exporter-otlp.
Gerekenler
- Spitfire adresi
https://<spitfire>ve OTLP alıcısı anahtarısfotlp_… - Tower adresi
http://<tower>:4318ve Collector token'ısfcol_… - Protokol
http/protobuf - Servis adı
<service-name>, sürümü<service-version>, ortamı<environment> - Özel CA varsa CA dosyası
/etc/spitfire-otel/ca.pem - Proxy varsa Tower ve Spitfire
NO_PROXYiçinde - Örnekleme
parentbased_traceidratio,0.1 - Uygulamada Composer (
vendor/autoload.php)
Linux (PHP-FPM, systemd)
- Eklentiyi derleyip kurun (Debian/Ubuntu; RHEL'de Remi deposundan
php-pecl-opentelemetrypaketi de olur):
sudo apt-get install -y gcc make autoconf php-dev php-pear
sudo pecl install opentelemetry-1.4.2- Eklentiyi açın:
/etc/php/<php-version>/mods-available/opentelemetry.inidosyasını oluşturun, şunu yapıştırın, sonrasudo phpenmod opentelemetryçalıştırın:
[opentelemetry]
extension=opentelemetry.so- Açık olduğunu görün:
php --ri opentelemetry(opentelemetry support => enabled). - Uygulamanın klasöründe SDK'yı, exporter'ı ve çatınızın enstrümantasyon paketini kurun
(
opentelemetry-auto-laravelyerine kendi çatınızınkini yazın:-auto-symfony,-auto-slim; tam liste Packagist):
composer config allow-plugins.php-http/discovery true
composer require open-telemetry/sdk:1.15.0 open-telemetry/exporter-otlp:1.4.0 php-http/guzzle7-adapter \
open-telemetry/opentelemetry-auto-laravel open-telemetry/opentelemetry-auto-psr3
sudo mkdir -p /opt/spitfire-otel /etc/spitfire-otel/etc/spitfire-otel/<service-name>.envdosyasını oluşturun, şunu yapıştırın:
IS_OTEL_ENABLED=true
OTEL_SERVICE_NAME=<service-name>
OTEL_RESOURCE_ATTRIBUTES=service.version=<service-version>,deployment.environment=<environment>
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://<spitfire>/otlp/v1/traces
OTEL_EXPORTER_OTLP_TRACES_HEADERS=authorization=sfotlp_…
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://<spitfire>/otlp/v1/logs
OTEL_EXPORTER_OTLP_LOGS_HEADERS=authorization=sfotlp_…
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://<tower>:4318/v1/metrics
OTEL_EXPORTER_OTLP_METRICS_HEADERS=authorization=sfcol_…
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
OTEL_TRACES_SAMPLER=parentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG=0.1
NO_PROXY=<tower>,<spitfire>
#OTEL_EXPORTER_OTLP_CERTIFICATE=/etc/spitfire-otel/ca.pem- İzni kısın:
sudo chmod 600 /etc/spitfire-otel/<service-name>.env /opt/spitfire-otel/otel-rundosyasını oluşturun, şunu yapıştırın:
#!/bin/sh
# IS_OTEL_ENABLED=true: OTel otomatik yüklenir; başka her değer: yüklenmez, SDK kapalı.
if [ "$IS_OTEL_ENABLED" = "true" ]; then
export OTEL_PHP_AUTOLOAD_ENABLED=true
else
export OTEL_PHP_AUTOLOAD_ENABLED=false
export OTEL_SDK_DISABLED=true
fi
exec "$@"- Çalıştırılabilir yapın:
sudo chmod 755 /opt/spitfire-otel/otel-run - PHP-FPM'in ortam değişkenlerini worker'lara geçirmesi için pool dosyasında
(
/etc/php/<php-version>/fpm/pool.d/www.conf) şu satırı açın ya da ekleyin:
clear_env = no- FPM servisinin şimdiki başlatma komutunu bulun:
systemctl cat php<php-version>-fpm | grep ^ExecStart sudo systemctl edit php<php-version>-fpmaçın, şunu yapıştırın (son satırdaExecStart='tan sonraki komutu 10. adımdaki komutla değiştirin):
[Service]
EnvironmentFile=/etc/spitfire-otel/<service-name>.env
ExecStart=
ExecStart=/opt/spitfire-otel/otel-run /usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf- Yeniden başlatın:
sudo systemctl daemon-reload && sudo systemctl restart php<php-version>-fpm
Komut satırından çalışan PHP (kuyruk worker'ı, cron) için aynı drop-in'i o servisin
<unit>'ine uygulayın: ExecStart=/opt/spitfire-otel/otel-run /usr/bin/php /srv/app/artisan queue:work.
Docker
otel-rundosyasını (Linux 7. adım)Dockerfile'ın yanına koyun.- Resmi
phpimage'ındaDockerfile'a ekleyin (Composer adımı Linux 4. adımdaki gibi);ENTRYPOINT'in başına/opt/spitfire-otel/otel-rungelir, gerisi sizin komutunuzdur:
RUN pecl install opentelemetry-1.4.2 && docker-php-ext-enable opentelemetry
RUN echo "clear_env = no" >> /usr/local/etc/php-fpm.d/www.conf
COPY --chmod=755 otel-run /opt/spitfire-otel/otel-run
ENTRYPOINT ["/opt/spitfire-otel/otel-run", "php-fpm"]- Ortam dosyasını (Linux 5. adım) Docker makinesinde
/etc/spitfire-otel/<service-name>.envolarak kaydedin. - Çalıştırın:
docker run --env-file /etc/spitfire-otel/<service-name>.env …ya da compose'da servisin altınaenv_file: /etc/spitfire-otel/<service-name>.env. - Ortam dosyası değişince konteyneri yeniden oluşturun (
restartyetmez):docker compose up -d --force-recreate <service>
Kubernetes
- Image'ı Docker bölümündeki gibi hazırlayın.
- Ortam dosyasını (Linux 5. adım)
<service-name>.envolarak kaydedip Secret yapın:
kubectl create secret generic <service-name>-otel --from-env-file=<service-name>.env \
--dry-run=client -o yaml | kubectl apply -f -- Deployment'ta container'ın altına ekleyin:
envFrom:
- secretRef:
name: <service-name>-otel- Yeniden başlatın:
kubectl rollout restart deployment/<deployment>
Windows (IIS)
- PHP'nizin sürümünü ve derlemesini bulun:
php -i | findstr /C:"PHP Version" /C:"Thread Safety" /C:"Architecture"(IIS NTS derlemesini çalıştırır,Thread Safety => disabled). - PECL Windows sayfasından PHP sürümünüze,
ntsvex64'e uyan zip'i indirin (ör.https://downloads.php.net/~windows/pecl/releases/opentelemetry/1.4.2/php_opentelemetry-1.4.2-8.3-nts-vs16-x64.zip) ve içindekiphp_opentelemetry.dll'i PHP'ninextklasörüne (ör.C:\php\ext) koyun. php.ini'nin sonuna bu satırı ekleyin (hangi dosya olduğunuphp --inigösterir):
extension=opentelemetry- Açık olduğunu görün:
php --ri opentelemetry(opentelemetry support => enabled). - Uygulamanın klasöründe Linux 4. adımdaki iki
composerkomutunu çalıştırın (sudo mkdirsatırı Windows'ta gerekmez). - Yönetici PowerShell'de
C:\php\php-cgi.exeyerine sitenin kullandığıphp-cgi.exe'yi (IIS Yöneticisi → FastCGI Settings → Full Path) yazıp çalıştırın (IIS yeniden başlar):
Import-Module WebAdministration
$PhpCgi = "C:\php\php-cgi.exe"
$IS_OTEL_ENABLED = "true"
$Vars = [ordered]@{
IS_OTEL_ENABLED = $IS_OTEL_ENABLED
OTEL_SERVICE_NAME = "<service-name>"
OTEL_RESOURCE_ATTRIBUTES = "service.version=<service-version>,deployment.environment=<environment>"
OTEL_EXPORTER_OTLP_PROTOCOL = "http/protobuf"
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = "https://<spitfire>/otlp/v1/traces"
OTEL_EXPORTER_OTLP_TRACES_HEADERS = "authorization=sfotlp_…"
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = "https://<spitfire>/otlp/v1/logs"
OTEL_EXPORTER_OTLP_LOGS_HEADERS = "authorization=sfotlp_…"
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT = "http://<tower>:4318/v1/metrics"
OTEL_EXPORTER_OTLP_METRICS_HEADERS = "authorization=sfcol_…"
OTEL_TRACES_EXPORTER = "otlp"
OTEL_METRICS_EXPORTER = "otlp"
OTEL_LOGS_EXPORTER = "otlp"
OTEL_TRACES_SAMPLER = "parentbased_traceidratio"
OTEL_TRACES_SAMPLER_ARG = "0.1"
NO_PROXY = "<tower>,<spitfire>"
}
# Özel CA: $Vars.OTEL_EXPORTER_OTLP_CERTIFICATE = "C:\spitfire-otel\ca.pem"
if ($IS_OTEL_ENABLED -eq "true") {
$Vars.OTEL_PHP_AUTOLOAD_ENABLED = "true"
} else {
$Vars.OTEL_PHP_AUTOLOAD_ENABLED = "false"
$Vars.OTEL_SDK_DISABLED = "true"
}
$Filter = "system.webServer/fastCgi/application[@fullPath='$PhpCgi']/environmentVariables"
foreach ($Name in @($Vars.Keys) + @("OTEL_SDK_DISABLED")) {
Remove-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter $Filter -Name "." -AtElement @{ name = $Name } -ErrorAction SilentlyContinue
}
foreach ($Name in $Vars.Keys) {
Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter $Filter -Name "." -Value @{ name = $Name; value = $Vars[$Name] }
}
iisreset /restart- Sitede birkaç sayfa açın ve Doğrulama adımlarını uygulayın.
IIS bu değişkenleri php-cgi.exe'yi başlatırken ona verir
(IIS belgesi).
Kapatma ve kaldırma
- Kapatmak: ortam dosyasında (Windows'ta betikte)
IS_OTEL_ENABLED=falseyapın ve servisi yeniden başlatın (Linux 12. adım, Docker 5. adım, Kubernetes 4. adım ya da Windows betiğini yeniden çalıştırın). - Kaldırmak:
sudo systemctl revert php<php-version>-fpm,sudo phpdismod opentelemetry,sudo rm -r /opt/spitfire-otel /etc/spitfire-otelvecomposer removeileopen-telemetry/paketlerini kaldırın; Docker'daDockerfile'a eklenen satırları silin; Windows'taphp.ini'denextension=opentelemetrysatırını ve IIS Yöneticisi → FastCGI Settings → Environment Variables'taki OTel değişkenlerini silin.
Sık karşılaşılan sorunlar
| Belirti | Neden | Çözüm |
|---|---|---|
php --ri opentelemetry "not present" diyor |
Eklenti açılmadı ya da başka bir PHP'ye kuruldu | phpenmod adımını yineleyin; FPM için php-fpm<php-version> -m ile bakın |
| Eklenti açık ama trace yok | clear_env = no yok ya da çatının enstrümantasyon paketi kurulmadı |
9. ve 4. adımları kontrol edin |
pecl install PHP sürümü hatası veriyor |
PHP sürümü bandın dışında | PHP 8.1+'ya yükseltin |
| Composer sürüm çakışması | Paket sürümleri PHP sürümünüze uymuyor | php --version ile PHP 8.1+ olduğunu kontrol edin; çatı paketinde sürüm yazmayın |
| Trace, metrik gelmiyor | Adres, token ya da ağ | Doğrulama adımlarını uygulayın |