Steps to Add Zipkin Trace Points in WordPress Code (docker container)
March 12th, 2025 8:02 AM Mr. Q Categories: Tools
To integrate Zipkin trace points into a WordPress site running in Docker, you’ll need to instrument the WordPress application code to create traces and send them to the Zipkin server. Here’s how you can approach this:
- Set up a Zipkin-compatible tracing library: You’ll need a PHP tracing library that integrates with Zipkin. One such library is OpenTelemetry (via the PHP SDK), which supports tracing and can send the data to Zipkin.
- Install the Zipkin Tracing Library: You need to install a PHP Zipkin client. OpenTelemetry is a great option because it provides an open standard and integrates well with Zipkin. You can use
open-telemetry/opentelemetry-php
to send traces to Zipkin. Install the OpenTelemetry SDK for PHP inside the WordPress container using Composer.- Install Composer (if not already installed in your Docker container):
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
- Install the OpenTelemetry PHP SDK: Inside your WordPress Docker container, run:
composer require open-telemetry/opentelemetry
- Set up OpenTelemetry to send traces to Zipkin: You need to configure the OpenTelemetry tracer to send data to the Zipkin server.
- Create a
zipkin.php
file (or similar) in your WordPress codebase to configure OpenTelemetry.Use theZipkinExporter
to send traces to Zipkin.
zipkin.php
: - Create a
<?php
// Include the OpenTelemetry autoloader
require_once 'vendor/autoload.php';
use OpenTelemetry\Sdk\Trace\TracerProvider;
use OpenTelemetry\Sdk\Trace\Export\BatchSpanProcessor;
use OpenTelemetry\Sdk\Trace\Export\ZipkinExporter;
use OpenTelemetry\Trace\Tracer;
// Setup Zipkin Exporter
$zipkinExporter = new ZipkinExporter('http://zipkin.local:9411/api/v2/spans');
// Create the Trace Provider with the Zipkin exporter
$traceProvider = new TracerProvider( new BatchSpanProcessor($zipkinExporter) );
// Set the tracer provider for the global context
\OpenTelemetry\Context\Context::setTracerProvider($traceProvider);
- This script sets up the Zipkin exporter to send trace data to the Zipkin server running at
http://zipkin.
.local
:9411 - Instrument Code to Generate Traces: In your WordPress code, you’ll want to create spans around specific actions or requests where you want to track performance and trace data. For example, to trace a WordPress page load, you can wrap the page load process in a span. Example
index.php
or any WordPress action file:
<?php
// Include Zipkin setup
require_once 'zipkin.php';
// Create a span for the current page load
$tracer = \OpenTelemetry\Context\Context::getTracerProvider()->getTracer('wordpress-tracer');
$span = $tracer->startAndEndSpan('page-load', function() use ($tracer) {
// Simulate page load process or log specific activities
// Your WordPress code goes here...
// You can add tags to your span to track specific values
$tracer->setAttribute('custom.page', 'home');
// Simulate some workload
sleep(1); // Simulate some processing delay
});
- You can also wrap specific actions in WordPress that you’re interested in tracing, such as plugin activations, database queries, API calls, etc. For example:
- Database queries: Wrap your
wpdb
queries in a span. - API calls: Wrap external HTTP requests made by WordPress in a span.
- Plugin actions: Track specific plugin logic using spans.
- Database queries: Wrap your
- Run and Monitor in Zipkin: After adding the tracing code, you can view the traces in Zipkin UI by accessing the Zipkin dashboard at
http://zipkin.
. You should be able to see traces for WordPress actions like page loads, database queries, and plugin calls if they are wrapped in spans.local
/zipkin/
Docker Setup Considerations
Since you’re using Docker, ensure the following:
- Network Configuration: Make sure your WordPress Docker container can communicate with the Zipkin container. If both are in the same Docker network, they should be able to reach each other. If necessary, ensure that Zipkin’s port (9411) is exposed properly. Example
docker-compose.yml
snippet for the network setup:
version: '3'
services: zipkin:
image: openzipkin/zipkin
networks:
- wordpress_network ports: - "9411:9411" wordpress:
image: wordpress networks:
- wordpress_network
environment: - WORDPRESS_DB_HOST=your_db_host
- WORDPRESS_DB_NAME=your_db_name
- WORDPRESS_DB_USER=your_db_user
- WORDPRESS_DB_PASSWORD=your_db_password networks:
wordpress_network:
driver:
bridge
- Environment Variables: Ensure the Zipkin endpoint (
http://zipkin:9411/api/v2/spans
) is correctly set as an environment variable or configuration parameter in your WordPress container. - Logging and Debugging: You can increase the verbosity of the OpenTelemetry logging to help debug issues if traces are not appearing in Zipkin. Add logging to OpenTelemetry:
use OpenTelemetry\Sdk\Trace\Export\SimpleSpanProcessor;
use OpenTelemetry\Sdk\Trace\Export\LoggerExporter;
$loggerExporter = new LoggerExporter();
$traceProvider->addSpanProcessor(new SimpleSpanProcessor($loggerExporter));
Conclusion
To add trace points to your WordPress site running in Docker with Zipkin:
- Install OpenTelemetry or another PHP tracing library that supports Zipkin.
- Set up the Zipkin exporter and configure it to send data to your Zipkin instance.
- Wrap your WordPress application code in spans to generate trace data for the actions you want to track.
- Monitor the traces in the Zipkin dashboard.
With this setup, you should start seeing traces from your WordPress application in the Zipkin UI, allowing you to analyze and debug performance issues.