TransferStatistics 使用webman开发的一个应用监控系统,用于查看应用调用记录、请求量、调用耗时、调用分析等。
系统使用 HTTP 接收上报数据;使用 Redis 进行数据汇总统计;使用 MySql 存储统计数据和上报信息。
#上报请求信息地址
TRANSFER_REPORT_URL='http://127.0.0.1:8788/report/statistic/transfer'
ip地址:端口或域名根据项目实际情况调整。
```
env('APP_NAME', 'fin-api'),
'app_env' => env('APP_ENV', 'local'),
'report_url' => env('TRANSFER_REPORT_URL'),
];
```
```
ip(); // 请求IP
$transfer = config('report_request_info.app_env'); // 调用入口
$finishTime = microtime(true); // 结束时间
$costTime = $finishTime - $startTime; // 运行时长
//$code = mt_rand(2, 5) * 100; // 状态码
$code = response($response)->getStatusCode(); // 状态码
//$success = $code < 400; // 是否成功
$success = ($response->original['code'] ?? -1) ? 0 : 1; // 是否成功
// 详细信息,自定义设置
$details = [
// 请求时间(包含毫秒时间)
'time' => date('Y-m-d H:i:s.', (int)$startTime) . substr((string)$startTime, 11),
// 运行时长
'run_time' => $costTime,
// .....
];
// 执行上报
try {
// 数据打包 多条 换行 隔开
$data = json_encode([
'time' => date('Y-m-d H:i:s.', (int)$startTime) . substr((string)$startTime, 11),
'project' => $project,
'ip' => $ip,
'transfer' => $transfer,
'costTime' => $costTime,
'success' => $success ? 1 : 0,
'code' => $code,
'details' => json_encode($details, 320),
], 320) . "\n";
$client = new \GuzzleHttp\Client(['verify' => false]);
$reportUrl = config('report_request_info.report_url');
if ($reportUrl) {
$res = $client->post(
// 上报地址
$reportUrl,
[
'headers' => [
// 上报认证,不设置默认为当前年份的md5值
'authorization' => md5(date('Y'))
],
'form_params' => [
// 上报数据
'transfer' => $data
],
]
);
}
//} catch (\Throwable $th) {
} catch (\Exception $e) {
//throw $th;
//throw new \Exception($e->getMessage(), 200);
}
return $response;
}
}
```
```
protected $middleware = [
//原有中间件......
//上报请求信息后置中间件
\App\Http\Middleware\AfterReportRequestInfoMiddleware::class,
];
```
至此,上报接口调用信息的中间件开发完成,每次调用接口后都会触发该中间件调用TransferStatistics项目的接口,将数据推送入库,从而形成调用统计信息,TransferStatistics项目的安装使用可以参考其GitHub的readme指导。
效果如下: