Skip to content

接口监控

CatchAdmin 专业版接口监控

接口监控功能可以很好的监控接口的请求情况,分析接口的监控以及频率

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,具体根据实际业务更改添加