El requisito mínimo de versión de PHP para la última versión de dd-trace-php es PHP 7. Si estás usando PHP 5, aún puedes usar el rastreador de PHP hasta la versión 0.99. PHP 5 está al final de su vida útil desde la versión 1.0 de la biblioteca PHP.
Para una lista completa de la versión de PHP y el soporte de frameworks de Datadog (incluyendo versiones heredadas y de mantenimiento), consulta la página de Requisitos de Compatibilidad.
Nota: Solo APM es compatible en Windows. No utilice el --enable-appsec y --enable-profiling banderas al rastrear aplicaciones PHP en Windows.
Este comando instala la extensión en todos los binarios de PHP encontrados en el host o contenedor. Si se omite --php-bin, el instalador se ejecuta en modo interactivo y le pide al usuario que seleccione los binarios para la instalación. El valor de --php-bin puede ser una ruta a un binario específico en caso de que dd-trace-php deba instalarse solo en dicho binario.
Reinicie PHP (PHP-FPM o el SAPI de Apache) y visite un punto de conexión habilitado para trazado de su aplicación. Para ver las trazas generadas, vaya a la página de trazas de APM.
Cuando no especifique --enable-appsec, la extensión de AppSec se carga brevemente al inicio y no está habilitada por defecto. Se interrumpe inmediatamente, causando una sobrecarga de rendimiento negligible.
Puede tardar unos minutos antes de que las trazas aparezcan en la interfaz de usuario. Si las trazas aún no aparecen después de unos minutos, cree un phpinfo() página desde la máquina host y desplácese hacia abajo hasta el `ddtrace`. Las comprobaciones de diagnóstico fallidas aparecen en esta sección para ayudar a identificar cualquier problema.
Apache ZTS:
Si el binario de PHP CLI se compila como NTS (no seguro para hilos), mientras que Apache utiliza una versión ZTS (segura para hilos de Zend) de PHP, necesita cambiar manualmente la carga de la extensión para el binario ZTS. Ejecutar /path/to/php-zts --ini encontrar dónde se encuentra el archivo de Datadog, luego agregar el .ini sufijo del nombre del archivo. -zts Por ejemplo, de a extension=ddtrace-20210902.so . extension=ddtrace-20210902-zts.soSELinux:
Si las políticas de SELinux de httpd están configuradas en el host, la funcionalidad del SDK puede estar limitada, a menos que se permita explícitamente la escritura y ejecución de archivos temporales en la configuración de SELinux:
Si las políticas de SELinux de httpd están configuradas en el servidor, la funcionalidad del SDK puede estar limitada, a menos que se permita explícitamente la escritura y ejecución de archivos temporales en la configuración de SELinux.
El trazado se habilita automáticamente por defecto. Una vez que la extensión está instalada, ddtrace traza su aplicación y envía trazas al Agente.
La instrumentación automática funciona modificando el entorno de ejecución de PHP para envolver ciertas funciones y métodos y así poder trazarlos. El rastreador de PHP admite instrumentación automática para varias bibliotecas. La instrumentación automática captura:
Tiempo de ejecución del método
Datos de traza relevantes, como URL y códigos de respuesta de estado para solicitudes web o consultas SQL para acceso a bases de datos
Excepciones no controladas, incluidos los rastros de pila si están disponibles
Un conteo total de trazas (por ejemplo, solicitudes web) fluyendo a través del sistema
Configuración
Si es necesario, configure el SDK para enviar datos de telemetría de rendimiento de la aplicación según lo requiera, incluyendo la configuración de la Etiquetación de Servicio Unificada. Lea Configuración de la Biblioteca para más detalles.
Una vez completada la instalación, reinicie PHP (PHP-FPM o el SAPI de Apache).
Nota: Si está utilizando caché de segundo nivel en OPcache configurando el parámetro opcache.file_cache, elimine la carpeta de caché.
Eliminando
Para eliminar el rastreador de PHP:
Para php-fpm, detenga el servicio php-fpm, de lo contrario, detenga el servidor web Apache.
Desvincule los archivos 98-ddtrace.ini y 99-ddtrace-custom.ini de su carpeta de configuración de PHP.
Para php-fpm, reinicie el servicio php-fpm, de lo contrario, reinicie el servidor web Apache.
Nota: Si está utilizando caché de segundo nivel en OPcache configurando el parámetro opcache.file_cache, elimine la carpeta de caché.
Resolviendo un fallo de aplicación
En el inusual evento de un fallo de aplicación causado por el rastreador de PHP, típicamente debido a un fallo de segmentación, lo mejor que se puede hacer es obtener un volcado de núcleo o un trazo de Valgrind y contactar al soporte de Datadog.
Instalar símbolos de depuración
Para que los volcados de núcleo sean legibles, los símbolos de depuración para los binarios de PHP deben estar instalados en el sistema que ejecuta PHP.
Para verificar si los símbolos de depuración están instalados para PHP o PHP-FPM, use gdb.
Instale gdb:
apt|yum install -y gdb
Ejecute gdb con el binario de interés. Por ejemplo, para PHP-FPM:
gdb php-fpm
Si la salida de gdb contiene una línea similar al texto a continuación, entonces los símbolos de depuración ya están instalados.
...
Reading symbols from php-fpm...Reading symbols from /usr/lib/debug/path/to/some/file.debug...done.
...
Si la salida de gdb contiene una línea similar al texto a continuación, entonces es necesario instalar los símbolos de depuración:
...
Reading symbols from php-fpm...(no debugging symbols found)...done.
...
Centos
Instale el paquete yum-utils que proporciona el programa debuginfo-install:
yum install -y yum-utils
Encuentre el nombre del paquete para sus binarios de PHP, puede variar dependiendo del método de instalación de PHP:
yum list installed | grep php
Instale los símbolos de depuración. Por ejemplo, para el paquete php-fpm:
debuginfo-install -y php-fpm
Nota: Si el repositorio que proporciona los binarios de PHP no está habilitado por defecto, se puede habilitar al ejecutar el comando debuginfo-install. Por ejemplo:
# ... leave here all the pre-existing packages
# add a `deb` deb http://deb.debian.org/debian-debug/ $RELEASE-debug main
# For example for buster
debhttp://deb.debian.org/debian-debug/buster-debugmain
Actualizar apt:
apt update
Intente nombres de paquetes canónicos para los símbolos de depuración, primero. Por ejemplo, si el nombre del paquete es php7.2-fpm, intenta:
apt install -y php7.2-fpm-dbgsym
# if the above does not work
apt install -y php7.2-fpm-dbg
Si no se pueden encontrar los símbolos de depuración, utiliza la herramienta de utilidad find-dbgsym-packages. Instala el binario:
apt install -y debian-goodies
Intenta encontrar los símbolos de depuración desde la ruta completa al binario o el id del proceso de un proceso en ejecución:
find-dbgsym-packages /usr/sbin/php-fpm7.2
Instala el nombre del paquete resultante, si se encuentra:
Si PHP fue instalado desde el ppa:ondrej/php, edita el archivo de origen de apt /etc/apt/sources.list.d/ondrej-*.list añadiendo el componente main/debug.
Antes:
deb http://ppa.launchpad.net/ondrej/php/ubuntu <version> main
Después:
deb http://ppa.launchpad.net/ondrej/php/ubuntu <version> main main/debug
Actualiza e instala los símbolos de depuración. Por ejemplo, para PHP-FPM 7.2:
apt update
apt install -y php7.2-fpm-dbgsym
PHP instalado desde un paquete diferente
Encuentre el nombre del paquete para sus binarios de PHP, puede variar dependiendo del método de instalación de PHP:
apt list --installed | grep php
Nota: En algunos casos php-fpm puede ser un metapaquete que se refiere al paquete real, por ejemplo php7.2-fpm en el caso de PHP-FPM 7.2. En este caso, el nombre del paquete es el último.
Intente nombres de paquetes canónicos para los símbolos de depuración, primero. Por ejemplo, si el nombre del paquete es php7.2-fpm, intenta:
apt install -y php7.2-fpm-dbgsym
# if the above does not work
apt install -y php7.2-fpm-dbg
Si no se pueden encontrar los paquetes -dbg y -dbgsym, habilita los repositorios ddebs. Se puede encontrar información detallada sobre cómo instalar símbolos de depuración desde el ddebs en la documentación de Ubuntu.
Por ejemplo, para Ubuntu 18.04+, habilite el repositorio ddebs:
echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse" | tee -a /etc/apt/sources.list.d/ddebs.list
echo "deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse" | tee -a /etc/apt/sources.list.d/ddebs.list
Obtener un volcado de núcleo para aplicaciones PHP puede ser complicado, especialmente en PHP-FPM. Aquí tiene algunos consejos para ayudarle a obtener un volcado de núcleo:
Determine si PHP-FPM generó un volcado de núcleo revisando el registro de errores de la aplicación:
Busque (SIGSEGV - core dumped) porque un mensaje como este significa que se ha volcado: WARNING: [pool www] child <pid> exited on signal 11 (SIGSEGV - core dumped) after <duration> seconds from start.
Busque (SIGSEGV) porque un mensaje como este indica que el núcleo no fue volcado: WARNING: [pool www] child <pid> exited on signal 11 (SIGSEGV) after <duration> seconds from start.
Localice el volcado de núcleo ejecutando cat /proc/sys/kernel/core_pattern. El valor predeterminado es típicamente core, lo que significa que se generará un archivo llamado core en la carpeta raíz del servidor web.
Si no se generó un volcado de núcleo, verifique las siguientes configuraciones y cámbielas según sea necesario:
Si /proc/sys/kernel/core_pattern contiene una ruta que incluye directorios anidados, asegúrese de que la ruta completa del directorio exista.
Si el usuario que ejecuta los trabajadores del grupo PHP-FPM es algo diferente a root (un nombre de usuario común es www-data), otorgue a ese usuario permisos de escritura en el directorio de volcados de núcleo.
Asegúrese de que el valor de /proc/sys/fs/suid_dumpable no sea 0. Establezca el valor en 1 o 2 a menos que ejecute el grupo de trabajadores PHP-FPM como root. Consulte sus opciones con su administrador del sistema.
Asegúrese de tener un rlimit_core adecuado en la sección de configuración del grupo PHP-FPM. Puede establecerlo en ilimitado: rlimit_core = unlimited.
Asegúrese de tener un ulimit adecuado configurado en su sistema. Puede configurarlo como ilimitado: ulimit -c unlimited.
Si su aplicación se ejecuta en un contenedor Docker, los cambios en /proc/sys/* deben realizarse en la máquina host. Contacte a su administrador del sistema para conocer las opciones disponibles para usted. Si puede, intente recrear la incidencia en sus entornos de prueba o de preparación.
Obteniendo un volcado de núcleo desde dentro de un contenedor Docker
Utilice la información a continuación para ayudar a obtener un volcado de núcleo en un contenedor Docker:
El contenedor Docker necesita ejecutarse como un contenedor privilegiado, y el valor ulimit para los archivos de núcleo debe establecerse en su máximo, como se muestra en los ejemplos a continuación.
Si usa el comando docker run, agregue los argumentos --privileged y --ulimit core=99999999999
Si usa docker compose, agregue lo siguiente al archivo docker-compose.yml:
privileged:trueulimits:core:99999999999
Al ejecutar el contenedor (y antes de iniciar la aplicación PHP) debe ejecutar los siguientes comandos:
Para obtener más detalles sobre el fallo, ejecute la aplicación con Valgrind. A diferencia de los volcados de núcleo, este enfoque siempre funciona en un contenedor no privilegiado.
Nota: Una aplicación que se ejecuta a través de Valgrind es órdenes de magnitud más lenta que cuando se ejecuta de forma nativa. Este método se recomienda para entornos no productivos.
Instale Valgrind con su gestor de paquetes. Ejecute la aplicación con Valgrind lo suficiente como para generar algunas solicitudes.
La traza de Valgrind resultante se imprime por defecto en el error estándar, consulte la documentación oficial para imprimir en un destino diferente. La salida esperada es similar al ejemplo a continuación para un proceso PHP-FPM:
Algunos problemas son causados por factores externos, por lo que puede ser valioso tener un strace.
Nota: Una aplicación que se ejecuta a través de strace es órdenes de magnitud más lenta que cuando se ejecuta de forma nativa. Este método se recomienda para entornos no productivos.
Instale strace con su gestor de paquetes. Al generar un strace para enviar al soporte de Datadog, asegúrese de usar la opción -f para seguir los procesos secundarios.