主题
接口监控
接口监控功能可以很好的监控接口的请求情况,分析接口的监控以及频率
WARNING
接口监控使用强依赖 Redis,所以你必须先要开启 Redis
监控功能默认是关闭,需要通过配置开启
php
return [
// 默认关闭,在 .env 添加 CATCH_SYSTEM_API_LOG 配置
'system_api_log' => env('CATCH_SYSTEM_API_LOG', false),
];
在.env
文件配置,如下配置即可
php
CATCH_SYSTEM_API_LOG=true
表结构
表结构设计
sql
CREATE TABLE `system_connector_log` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`username` VARCHAR ( 100 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
`path` VARCHAR ( 255 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '接口地址',
`method` VARCHAR ( 255 ) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'GET' COMMENT '请求方法',
`user_agent` VARCHAR ( 255 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ua',
`ip` VARCHAR ( 50 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ip地址',
`controller` VARCHAR ( 100 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '控制器',
`action` VARCHAR ( 50 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '方法',
`time_taken` INT NOT NULL COMMENT '耗时(ms)',
`status_code` INT NOT NULL COMMENT '状态码',
`from` TINYINT NOT NULL DEFAULT '1' COMMENT '请求来源:1=后台,2=前台',
`creator_id` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建人ID',
`created_at` INT NOT NULL COMMENT '请求开始时间',
`updated_at` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间',
`deleted_at` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT '软删除',
PRIMARY KEY ( `id` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '接口日志';
CREATE TABLE `system_connector_log_statistics` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`path` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '接口地址',
`average_time_taken` int NOT NULL DEFAULT '0' COMMENT '平均耗时(ms)',
`count` int NOT NULL DEFAULT '0' COMMENT '总请求次数',
`fail_count` int NOT NULL DEFAULT '0' COMMENT '失败次数',
`success_count` int NOT NULL DEFAULT '0' COMMENT '成功次数',
`created_at` int unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`updated_at` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
`deleted_at` int unsigned NOT NULL DEFAULT '0' COMMENT '软删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='接口日志日统计';
配置 Redis
在根目录.env
文件,找到如下配置,laravel redis 文档
php
#php redis 扩展
REDIS_CLIENT=
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
配置定时任务
配置好 redis 之后,需要配置对应的接口消费的任务。目前项目采用 crontab 的方式。找到 routes/console.php
配置
php
// 接口日志消费,每分钟执行一次
Schedule::command('connector:log:record')->everyMinute();
// 接口告警
Schedule::command('connector:frequency:warning')->everyMinute();
// 接口统计,每日一次
Schedule::command('statistics:connector:log')->daily();
如果在本地开发,可以运行下面的命令
shell
php artisan schedule:work
监听事件
如果需要应用到 C 端或者其他任意端,可以直接通过事件
php
use Modules\System\Events\ConnectorLogEvent;
// 记录接口日志,在需要日志的地方分发事件即可
Event::dispatch(new ConnectorLogEvent(
$user?->username,
$user?->id,
ConnectorLog::FROM_DASHBOARD
));
事件需要三个参数
用户名
可以为 null用户ID
可以为 null应用的接口平台
默认是后台,系统内置一个 app 枚举值ConnectorLog::FROM_APP
,具体根据实际业务更改添加