Crater服务健康检查端点:自定义健康状态实现

Crater服务健康检查端点:自定义健康状态实现

【免费下载链接】crater Open Source Invoicing Solution for Individuals & Businesses 【免费下载链接】crater 项目地址: https://gitcode.com/gh_mirrors/cr/crater

健康检查端点概述

在现代应用开发中,服务健康检查(Health Check)是保障系统稳定性的关键组件。它通过定期检查应用的关键依赖(如数据库连接、缓存服务等)来确认系统是否正常运行,是监控告警、自动恢复机制的基础。Crater作为开源发票管理解决方案,虽然未提供默认健康检查端点,但可以通过简单扩展实现这一功能。

现有端点分析

通过分析Crater的路由配置文件,可以发现系统已存在基础的服务状态检查机制。在routes/api.php中定义了一个ping端点,代码如下:

// ping
//----------------------------------
Route::get('ping', function () {
    return response()->json([
        'success' => 'crater-self-hosted',
    ]);
})->name('ping');

该端点位于API路由文件的第125-129行,通过返回固定JSON响应来确认应用服务器是否可访问。但这只是最基础的存活检查,无法反映应用的实际健康状态。

自定义健康检查实现

1. 创建健康检查控制器

首先,创建一个专用的健康检查控制器,用于实现详细的健康状态检查逻辑:

<?php

namespace Crater\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;

class HealthCheckController extends Controller
{
    public function check()
    {
        $status = 'ok';
        $database = 'down';
        $cache = 'down';
        
        // 检查数据库连接
        try {
            DB::connection()->getPdo();
            $database = 'up';
        } catch (\Exception $e) {
            $status = 'error';
        }
        
        // 检查缓存服务
        try {
            Cache::put('health_check', true, 1);
            $cache = 'up';
        } catch (\Exception $e) {
            $status = 'error';
        }
        
        $response = [
            'status' => $status,
            'services' => [
                'database' => $database,
                'cache' => $cache,
                'app' => 'up',
                'version' => config('app.version', 'unknown')
            ],
            'timestamp' => now()->toISOString()
        ];
        
        return response()->json($response, $status === 'ok' ? 200 : 503);
    }
}

2. 注册健康检查路由

编辑routes/api.php文件,添加健康检查路由定义:

use Crater\Http\Controllers\HealthCheckController;

// 健康检查端点
//----------------------------------
Route::get('health', [HealthCheckController::class, 'check'])->name('health.check');

该路由应添加在现有ping端点附近,建议放在routes/api.php的第130行之后,保持路由文件结构清晰。

3. 配置Nginx状态检查

对于生产环境,建议在Nginx配置中添加健康检查支持,编辑docker-compose/nginx/nginx.conf文件:

location /health {
    proxy_pass http://php:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    access_log off;
    error_log /dev/null;
}

健康检查响应格式

实现后的健康检查端点将返回以下JSON响应:

{
    "status": "ok",
    "services": {
        "database": "up",
        "cache": "up",
        "app": "up",
        "version": "6.0.6"
    },
    "timestamp": "2025-10-30T02:48:46.000000Z"
}
  • status: 整体健康状态,ok表示所有关键服务正常,error表示至少一项服务异常
  • services: 各组件详细状态
    • database: 数据库连接状态
    • cache: 缓存服务状态
    • app: 应用本身状态
    • version: 应用版本号
  • timestamp: 检查时间戳

当任意关键服务(数据库或缓存)不可用时,状态码将变为503,便于监控系统快速识别异常。

健康检查集成方案

1. Docker健康检查配置

编辑docker-compose.yml文件,为应用服务添加健康检查配置:

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

2. 监控告警配置

可以将健康检查端点与Prometheus、Grafana等监控工具集成,通过以下Prometheus配置示例实现指标收集:

scrape_configs:
  - job_name: 'crater'
    metrics_path: '/health'
    static_configs:
      - targets: ['crater-instance:80']

高级扩展

自定义检查项

可以通过添加更多服务检查来扩展健康检查控制器,例如检查文件存储:

// 检查文件存储
$storage = 'down';
try {
    $disk = \Storage::disk('local');
    $testFile = 'health_check.txt';
    $disk->put($testFile, 'test');
    $disk->delete($testFile);
    $storage = 'up';
} catch (\Exception $e) {
    $status = 'error';
}

然后在services数组中添加存储状态:

'storage' => $storage,

权限控制

对于需要保护的健康检查端点,可以添加认证中间件,编辑routes/api.php

Route::get('health', [HealthCheckController::class, 'check'])
    ->name('health.check')
    ->middleware('auth:sanctum');

实现总结

通过以上步骤,我们为Crater系统添加了功能完善的健康检查端点,相比基础的ping端点,新实现的health端点具有以下优势:

  1. 全面检查关键依赖服务状态
  2. 返回结构化的JSON响应
  3. 提供HTTP状态码指示健康状态
  4. 包含时间戳和版本信息
  5. 支持扩展自定义检查项

这一实现符合生产级应用的监控需求,可帮助管理员及时发现并解决系统问题,提高Crater服务的可靠性和稳定性。

完整的实现涉及以下文件修改:

【免费下载链接】crater Open Source Invoicing Solution for Individuals & Businesses 【免费下载链接】crater 项目地址: https://gitcode.com/gh_mirrors/cr/crater

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值