Crater服务健康监控:Prometheus与Grafana集成实践
监控需求与架构设计
Crater作为开源发票管理系统,需确保支付处理、PDF生成等核心功能稳定运行。当前架构中未实现Prometheus与Grafana集成,本文提供基于Laravel框架的实施方案,通过暴露指标接口、配置时序数据库和可视化面板,构建完整监控体系。
关键监控指标设计
基于业务场景需监控三类指标:
- 系统层:CPU/内存使用率、数据库连接数(关联config/database.php配置)
- 应用层:API响应时间、队列任务堆积数(对应app/Jobs/目录下的发票生成等任务)
- 业务层:日发票创建量、支付成功率(关联app/Models/Invoice.php模型)
集成实现步骤
1. 暴露Prometheus指标接口
创建Metrics控制器并注册路由,采集关键业务数据:
// app/Http/Controllers/MetricsController.php
namespace Crater\Http\Controllers;
use Illuminate\Http\Request;
use Prometheus\CollectorRegistry;
use Crater\Models\Invoice;
class MetricsController extends Controller
{
public function index(CollectorRegistry $registry)
{
$counter = $registry->getOrRegisterCounter(
'crater', 'invoice_created_total',
'Total number of invoices created', ['status']
);
$counter->incBy(Invoice::where('status', 'PAID')->count(), ['PAID']);
$counter->incBy(Invoice::where('status', 'SENT')->count(), ['SENT']);
return response($this->renderMetrics($registry))
->header('Content-Type', 'text/plain');
}
}
注册路由到routes/web.php:
Route::get('/metrics', [MetricsController::class, 'index'])->middleware('auth:sanctum');
2. 配置Prometheus抓取
创建Prometheus配置文件监控新增接口:
# prometheus.yml
scrape_configs:
- job_name: 'crater'
static_configs:
- targets: ['crater-app:8000']
metrics_path: '/metrics'
basic_auth:
username: 'admin'
password: 'secret'
3. 构建Grafana监控面板
导入自定义JSON面板配置,包含:
- 系统资源监控图表(CPU/内存/磁盘)
- 业务指标趋势图(发票创建量、支付转化率)
- 异常告警规则(如队列任务超过10分钟未处理)
容器化部署配置
修改docker-compose.yml,添加Prometheus和Grafana服务:
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
volumes:
- grafana-data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
volumes:
grafana-data:
验证与告警配置
- 启动服务后访问
/metrics端点验证指标输出 - 在Grafana中配置数据源指向Prometheus
- 设置关键指标告警(如支付失败率>5%时发送邮件,关联config/mail.php配置)
最佳实践与扩展
- 指标采集优化:使用队列异步更新非实时指标
- 安全加固:通过app/Providers/AuthServiceProvider.php限制metrics接口访问
- 扩展监控维度:添加客户活跃度指标(关联app/Models/Customer.php)
通过以上配置,可实现从系统到业务的全链路监控,及时发现app/Jobs/GenerateInvoicePdfJob.php等关键任务的性能瓶颈。完整配置示例可参考项目docker-compose/目录下的服务编排文件。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



