PHP客户端集成
介绍
Jaeger是一个开源的分布式追踪系统,用于监控和排查微服务架构中的请求链路。PHP客户端集成允许你将Jaeger的追踪能力嵌入到PHP应用中,帮助分析请求在不同服务间的流转情况。本文将指导你从零开始完成集成。
适用场景
- 微服务调用链分析
- 性能瓶颈定位
- 生产环境故障排查
前置条件
- 已安装PHP 7.2+环境
- Composer依赖管理工具
- 运行中的Jaeger Collector服务(默认地址
http://localhost:14268
)
安装客户端库
通过Composer安装官方推荐的Jaeger PHP客户端:
bash
composer require jonahgeorge/jaeger-client-php
基础配置
1. 初始化Tracer
创建 tracer.php
配置文件:
php
<?php
require_once 'vendor/autoload.php';
use Jaeger\Config;
use OpenTracing\GlobalTracer;
$config = new Config(
[
'sampler' => [
'type' => 'const',
'param' => true,
],
'logging' => true,
'local_agent' => [
'reporting_host' => 'localhost',
'reporting_port' => 6831,
]
],
'your-service-name'
);
$tracer = $config->initializeTracer();
GlobalTracer::set($tracer);
2. 创建第一个Span
php
$span = $tracer->startSpan('example-operation');
$span->setTag('http.method', 'GET');
// 模拟业务逻辑
usleep(100000);
$span->finish();
实际案例:HTTP请求追踪
场景描述
追踪一个处理用户登录的API请求,包含数据库查询和外部服务调用。
php
// 在入口文件顶部初始化追踪
require 'tracer.php';
// 示例控制器方法
function login() {
global $tracer;
$scope = $tracer->startActiveSpan('login.request');
$span = $scope->getSpan();
try {
// 标记请求参数
$span->setTag('auth.username', $_POST['username']);
// 数据库查询(子Span)
$dbScope = $tracer->startActiveSpan('db.user_query');
// 模拟数据库操作
usleep(50000);
$dbScope->close();
// 调用外部服务
$apiScope = $tracer->startActiveSpan('auth_service.verify');
// 模拟API调用
usleep(80000);
$apiScope->close();
echo "Login successful!";
} finally {
$scope->close();
$tracer->flush();
}
}
追踪数据流
高级配置
采样率控制
修改配置中的采样器,以下示例设置50%采样率:
php
'sampler' => [
'type' => 'probabilistic',
'param' => 0.5,
],
自定义日志记录
php
$span->log([
'event' => 'user_verification',
'result' => 'success',
'processing_time' => 120ms
]);
常见问题
性能注意事项
- 生产环境避免100%采样(
const: true
) - 对于高流量服务,推荐使用远程采样配置
Span生命周期
务必确保每个Span都调用finish()
或close()
,否则会导致内存泄漏和追踪数据不完整。
总结
通过本文你学会了:
- 安装Jaeger PHP客户端库
- 配置基础Tracer实例
- 创建Span记录关键操作
- 实现多层级追踪(HTTP请求→数据库→外部服务)
- 调整采样策略优化性能
扩展练习
- 尝试将追踪集成到现有框架(如Laravel中间件)
- 创建一个包含3个层级Span的订单处理流程
- 在Jaeger UI中对比不同采样率的效果