定制 vortos/vortos-observability 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

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

vortos/vortos-observability

Composer 安装命令:

composer require vortos/vortos-observability

包简介

Telemetry destination seam (OTel collector + off-host sinks, disk-buffered) and publishable observability templates

README 文档

README

Two cooperating subsystems:

  1. Telemetry destination seam (Sink/, Collector/, Buffer/, Heartbeat/, Driver/) — the §12.4 "emitting ≠ monitoring" plane. The app emits OTLP to a local OpenTelemetry Collector sidecar; the collector batches, disk-buffers and retries to an off-host backend. The only swap point is a driver (MetricsSinkInterface / ErrorSinkInterface); switching backends never touches app code. See "Telemetry seam" below.
  2. Template publisher (Service/, Command/, Resources/) — optional starter dashboards/alert rules for common stacks. It does not export telemetry, call external services, or run in the request path.

Telemetry seam (collector + off-host sinks)

  • Drivers (the only place a backend name appears): grafana (OTLP metrics/traces/ logs, off-host), glitchtip (error sink, disk-buffered), null (explicit no-op). Vendor SDK drivers (datadog, sentry, …) are deferred split packages.
  • Collector config is generated for the selected sink — loopback-only OTLP receiver, memory_limiter + batch, a cardinality deny-list, and a file_storage persistent queue (retry_on_failure + sending_queue) so a backend blip buffers to disk and drains on recovery. Backend credentials are referenced via ${env:...} — never inlined into the committed config.
  • Error sink spools captured errors to a bounded, crash-safe on-disk queue (BoundedSpool: byte-capped, drop-oldest + counter, CRC-checked, atomic rewrite); capture() never blocks the request path and never throws. Errors are PII-scrubbed by construction (MessageScrubber / CapturedError).
  • Dead-man heartbeat (HttpHeartbeatEmitter): the app pushes a periodic check-in to an external monitor; absence pages (detected off-host) — the only detector that catches "host dead AND its monitoring dead."

Telemetry-seam commands

php bin/console vortos:observability:collector --sink=grafana   # generate sidecar config
php bin/console vortos:observability:collector --dry-run        # preview
php bin/console vortos:observability:heartbeat --status=success # dead-man check-in (cron, ~60s)

Configuration (env)

Var Default Purpose
OBSERVABILITY_METRICS_SINK grafana Selected metrics sink driver key
OBSERVABILITY_ERROR_SINK glitchtip Selected error sink driver key
OBSERVABILITY_GRAFANA_OTLP_HOST Off-host OTLP gateway host
OBSERVABILITY_GRAFANA_OTLP_HEADERS Auth header (resolved by the collector at runtime)
OBSERVABILITY_GLITCHTIP_DSN Error backend ingest URL (read at use time, never logged)
OBSERVABILITY_SPOOL_DIR system temp Error spool directory
OBSERVABILITY_SPOOL_MAX_BYTES 256 MiB Error spool byte cap (drop-oldest past this)
OBSERVABILITY_HEARTBEAT_URL External dead-man monitor base URL

Observability Templates

This module publishes optional starter assets for common observability stacks. It does not export telemetry, call external services, or run in the request path.

Vortos runtime modules emit standard signals:

  • metrics through Prometheus or StatsD
  • traces through OpenTelemetry OTLP
  • logs as structured JSON to stdout/stderr
  • health endpoints through the foundation module

The templates help teams bootstrap dashboards and alert rules for those signals.

Messaging applications also export operational gauges for the transactional outbox and dead-letter queue:

  • vortos_outbox_backlog_size{transport,status}
  • vortos_outbox_oldest_pending_age_seconds{transport}
  • vortos_dlq_backlog_size{transport,event}
  • vortos_dlq_oldest_failed_age_seconds{transport}

With Prometheus these are refreshed during /metrics scrapes. With push-style backends such as StatsD, schedule php bin/console vortos:metrics:collect from one worker per environment so gauges are emitted without adding work to normal request handling.

Commands

php bin/console vortos:observability:list
php bin/console vortos:observability:publish --stack=grafana-oss
php bin/console vortos:observability:publish --stack=datadog
php bin/console vortos:observability:publish --stack=newrelic

Published files are written under observability/.

Use --dry-run to preview and --force to overwrite existing files.

Stacks

  • prometheus: recording and alert rules
  • grafana: Grafana dashboard JSON
  • alertmanager: Alertmanager routing example
  • grafana-oss: Prometheus + Grafana + Alertmanager
  • datadog: Datadog dashboard and monitor examples
  • newrelic: New Relic dashboard and alert examples

All thresholds and notification routes are examples. Review and tune them per environment before production use.

统计信息

  • 总下载量: 74
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 31
  • 依赖项目数: 12
  • 推荐数: 2

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-12

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固