OpenTelemetry PHP exporter
The OpenTelemetry PHP SDK supports vendor-specific exporters. The spans that are created with the SDK can be sent to an Instana agent. For more information on exporters and the OpenTelemetry PHP SDK, refer to their documentation.
Installing the exporter
To install the exporter through Composer, run the following command:
composer require open-telemetry/opentelemetry-exporter-instana
Configuring the exporter
You can create and configure the exporter in three ways:
- Using the Instana
SpanFactory - Configuring the
SpanExporterinstance manually - Using the OpenTelemetry registry
To use the exporter, complete the following steps:
- Install the composer package into your project.
- Create an instance of the
InstanaExporter.
You must provide the following two Instana environment variables to the application for the factory and registry:
INSTANA_AGENT_HOST
INSTANA_AGENT_PORT
If the INSTANA_AGENT_HOST and
INSTANA_AGENT_PORT environment variables are not set,
the following default values are used:
INSTANA_AGENT_HOST=127.0.0.1
INSTANA_AGENT_PORT=42699
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor(
(new \Instana\SpanExporterFactory)->create()
)
);
To manually configure SpanExporter, run the
following command:
$transport = new InstanaTransport('127.0.0.1:42699');
$exporter = new SpanExporter(
$transport,
new SpanConverter($transport->getUuid(), $transport->getPid())
);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
To configure the exporter by using the OpenTelemetry registry,
use the key "instana" when you construct a span
exporter:
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor(
Registry::spanExporterFactory("instana")->create()
)
);
Example of exporter usage
After the tracer provider is set up, you can initialize an OpenTelemetry PHP tracer and use the SDK as normal.
$tracer = $tracerProvider->getTracer('io.instana.opentelemetry.php');
$span = $tracer->spanBuilder('root')->startSpan();
$span->setAttribute('remote_ip', '1.2.3.4')
->setAttribute('country', 'CAN');
$span->addEvent('generated_session', [
'id' => md5((string) microtime(true)),
]);
$span->end();
$tracerProvider->shutdown();
Auto instrumentation
The exporter supports auto-instrumentation, and you can configure the exporter in conjunction with the OpenTelemetry SDK. To enable auto-instrumentation, use the following environment variables or configure the php.ini file:
OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_TRACES_EXPORTER=instana
OTEL_PROPAGATORS=instana,baggage
After you configure the exporter, the traces that are exported to the Instana agent are installed in your application. The traces are dependent on the instrumentation libraries. Therefore, you must add the appropriate instrumentation libraries that your application requires.
composer require open-telemetry/opentelemetry-auto-curl
composer require open-telemetry/opentelemetry-auto-wordpress
Setting a custom service name
You can define a custom service name for your application by
using the environment variables INSTANA_SERVICE_NAME
or OTEL_SERVICE_NAME. If both variables are present,
the value of INSTANA_SERVICE_NAME takes precedence over
OTEL_SERVICE_NAME.
Capturing custom HTTP headers
In the PHP Instana exporter, you can capture the custom HTTP headers from both requests and responses by using the environment variables. You can use the following environment variables to specify the custom HTTP headers:
OTEL_PHP_INSTRUMENTATION_HTTP_RESPONSE_HEADERS=content-type,server
OTEL_PHP_INSTRUMENTATION_HTTP_REQUEST_HEADERS=host,accept
Context propagation
The Instana PHP exporter supports the following types of context propagation for distributed tracing:
- W3C trace context propagation: Enabled by default.
- Instana native trace context propagation: Not enabled by default. To enable Instana trace context propagation, use the Instana OpenTelemetry propagator.
See OpenTelemetry Instana propagator for more details.