vntrungld/prometheus-exporter-horizon-collector 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

vntrungld/prometheus-exporter-horizon-collector

Composer 安装命令:

composer require vntrungld/prometheus-exporter-horizon-collector

包简介

Horizon Collector for Prometheus Exporter

README 文档

README

License: MIT

A Laravel package that collects metrics from Laravel Horizon and exposes them in Prometheus format. Works seamlessly with the prometheus-exporter package.

Features

  • Automatic metric collection from Laravel Horizon
  • 8 specialized collectors covering queue status, performance, and health
  • Per-queue metrics with label-based differentiation
  • Support for split queue configurations
  • Graceful handling of empty data
  • Zero configuration required

Requirements

Installation

Install the package via Composer:

composer require vntrungld/prometheus-exporter-horizon-collector

The package will be auto-discovered by Laravel.

Configuration

Add the HorizonCollectorSet to your prometheus-exporter configuration:

// config/prometheus-exporter.php
'collector_sets' => [
    \Vntrungld\PrometheusExporterHorizonCollector\HorizonCollectorSet::class,
],

That's it! The metrics will now be available at your Prometheus exporter endpoint.

Available Metrics

The package exposes 8 Prometheus gauge metrics:

Queue Health Metrics

Metric Type Labels Description
horizon_status Gauge - Horizon status: -1 (inactive), 0 (paused), 1 (running)
horizon_master_supervisors Gauge - Number of active master supervisors

Queue Performance Metrics

Metric Type Labels Description
horizon_current_processes Gauge queue Number of worker processes per queue
horizon_current_workload Gauge queue Current queue depth (pending jobs) per queue
horizon_current_wait Gauge queue Current wait time in seconds per queue

Job Statistics Metrics

Metric Type Labels Description
horizon_jobs_per_minute Gauge - Jobs processed per minute (throughput)
horizon_recent_jobs Gauge - Number of recently processed jobs
horizon_failed_jobs_per_hour Gauge - Number of recently failed jobs

Example Prometheus Output

# HELP horizon_status The status of Horizon
# TYPE horizon_status gauge
horizon_status 1

# HELP horizon_master_supervisors The number of master supervisors
# TYPE horizon_master_supervisors gauge
horizon_master_supervisors 2

# HELP horizon_current_processes Current processes of all queues
# TYPE horizon_current_processes gauge
horizon_current_processes{queue="default"} 4
horizon_current_processes{queue="emails"} 2

# HELP horizon_current_workload Current workload of all queues
# TYPE horizon_current_workload gauge
horizon_current_workload{queue="default"} 150
horizon_current_workload{queue="emails"} 25

# HELP horizon_current_wait Current wait time of all queues
# TYPE horizon_current_wait gauge
horizon_current_wait{queue="default"} 5
horizon_current_wait{queue="emails"} 2

# HELP horizon_jobs_per_minute The number of jobs per minute
# TYPE horizon_jobs_per_minute gauge
horizon_jobs_per_minute 120

# HELP horizon_recent_jobs The number of recent jobs
# TYPE horizon_recent_jobs gauge
horizon_recent_jobs 5000

# HELP horizon_failed_jobs_per_hour The number of recently failed jobs
# TYPE horizon_failed_jobs_per_hour gauge
horizon_failed_jobs_per_hour 3

Horizon Status Values

The horizon_status metric reports the overall health of Horizon:

Value Status Description
1 Running All supervisors are running normally
0 Paused At least one supervisor is paused
-1 Inactive No master supervisors are running

Architecture

HorizonCollectorSet
├── CurrentMasterSupervisorCollector  → MasterSupervisorRepository
├── HorizonStatusCollector            → MasterSupervisorRepository
├── CurrentProcessesPerQueueCollector → WorkloadRepository
├── CurrentWorkloadCollector          → WorkloadRepository
├── CurrentWaitCollector              → WorkloadRepository
├── JobsPerMinuteCollector            → MetricsRepository
├── RecentJobsCollector               → JobRepository
└── FailedJobsPerHourCollector        → JobRepository

Each collector:

  1. Implements the Collector interface
  2. Receives dependencies via Laravel's service container
  3. Queries Horizon repositories for data
  4. Registers a Prometheus gauge metric

Example Grafana Queries

Queue Backlog Alert

horizon_current_workload{queue="default"} > 1000

Processing Rate

rate(horizon_jobs_per_minute[5m])

Failure Rate

horizon_failed_jobs_per_hour / horizon_recent_jobs * 100

Wait Time by Queue

max(horizon_current_wait) by (queue)

Horizon Health Check

horizon_status == 1

Testing

Run the test suite:

composer test

Or with PHPUnit directly:

./vendor/bin/phpunit

The package includes comprehensive tests:

  • Unit tests for all 8 collectors
  • Unit tests for the collector set
  • Feature tests for service provider integration
  • Integration tests for full collector lifecycle

Project Structure

src/
├── PrometheusExporterHorizonCollectorServiceProvider.php
├── HorizonCollectorSet.php
└── Collectors/
    ├── CurrentMasterSupervisorCollector.php
    ├── CurrentProcessesPerQueueCollector.php
    ├── CurrentWaitCollector.php
    ├── CurrentWorkloadCollector.php
    ├── FailedJobsPerHourCollector.php
    ├── HorizonStatusCollector.php
    ├── JobsPerMinuteCollector.php
    └── RecentJobsCollector.php

tests/
├── TestCase.php
├── Feature/
│   ├── CollectorIntegrationTest.php
│   └── ServiceProviderTest.php
└── Unit/
    ├── HorizonCollectorSetTest.php
    └── Collectors/
        └── [Individual collector tests]

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Write tests for your changes
  4. Ensure all tests pass (composer test)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

License

This package is open-sourced software licensed under the MIT license.

Credits

Related Packages

vntrungld/prometheus-exporter-horizon-collector 适用场景与选型建议

vntrungld/prometheus-exporter-horizon-collector 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.4k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 08 月 14 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「laravel」 「Prometheus Exporter」 「Horizon Collector」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 vntrungld/prometheus-exporter-horizon-collector 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 vntrungld/prometheus-exporter-horizon-collector 我们能提供哪些服务?
定制开发 / 二次开发

基于 vntrungld/prometheus-exporter-horizon-collector 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3.4k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 27
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-08-14