节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
2.29 KiB
Stardust
<?php
/**
 * 星尘 APM 监控基础使用示例
 * 
 * 演示如何使用 StardustTracer 进行应用性能监控
 */

require_once __DIR__ . '/../src/StardustTracer.php';

// 初始化追踪器
$tracer = new StardustTracer(
    'http://star.newlifex.com:6600',  // 星尘服务器地址
    'MyPHPApp',                        // 应用标识
    ''                                 // 应用密钥(可选)
);

// 开启调试模式(可选)
$tracer->setDebug(true);

// 登录获取令牌
if (!$tracer->login()) {
    die("登录失败\n");
}

echo "登录成功\n";

// ========== 示例1:基本埋点 ==========
echo "\n示例1:基本埋点\n";

$span = $tracer->newSpan('数据库查询');
$span->tag = 'SELECT * FROM users WHERE id = 1';

// 模拟业务操作
usleep(50000); // 50ms

$span->finish();
echo "完成数据库查询埋点\n";

// ========== 示例2:错误处理 ==========
echo "\n示例2:错误处理\n";

$span = $tracer->newSpan('API调用');
$span->tag = 'GET /api/users';

try {
    // 模拟发生错误
    throw new Exception("连接超时");
} catch (Exception $e) {
    $span->setError($e);
    echo "捕获异常: " . $e->getMessage() . "\n";
} finally {
    $span->finish();
}

// ========== 示例3:嵌套追踪 ==========
echo "\n示例3:嵌套追踪\n";

$parentSpan = $tracer->newSpan('处理订单');
$parentSpan->tag = 'orderId=12345';

// 子操作1
$childSpan1 = $tracer->newSpan('验证库存', $parentSpan->id);
usleep(20000); // 20ms
$childSpan1->finish();

// 子操作2
$childSpan2 = $tracer->newSpan('扣减库存', $parentSpan->id);
usleep(30000); // 30ms
$childSpan2->finish();

$parentSpan->finish();
echo "完成嵌套追踪\n";

// ========== 示例4:批量操作 ==========
echo "\n示例4:批量操作\n";

for ($i = 1; $i <= 10; $i++) {
    $span = $tracer->newSpan('批量插入');
    $span->tag = "batch_no={$i}";
    
    usleep(10000); // 10ms
    
    // 模拟部分失败
    if ($i % 3 == 0) {
        $span->setError("批次{$i}失败");
    }
    
    $span->finish();
}
echo "完成批量操作\n";

// ========== 上报数据 ==========
echo "\n上报数据到监控中心...\n";
if ($tracer->flush()) {
    echo "上报成功!\n";
} else {
    echo "上报失败\n";
}

echo "\n示例运行完成\n";
echo "请访问星尘监控平台查看追踪数据\n";