linkorb/spark

Spark: 应用程序监控

v1.5.0 2020-08-14 09:40 UTC

This package is auto-updated.

Last update: 2024-09-14 18:47:48 UTC


README

Spark是一个应用程序监控与配置库。

它用于从应用程序中提取相关数据以供外部处理。

对于每个请求 + 响应(事务),都会注册一系列收集器,以捕获每个事务的详细报告。

使用可用的报告器之一,可以将提取的数据转发到外部服务进行进一步处理。

用例

  • 将Spark集成到您的应用程序中,并在应用程序外部处理日志、性能监控、指标、事件处理、异常跟踪等
  • 将应用程序事件报告给事件总线进行进一步处理
  • 将异常和日志转发到可以分析、存储或转发(使用任何自定义后端)的中央服务
  • 分析应用程序事务以收集指标

通过将Spark集成到您的应用程序中,您无需为每个应用程序单独添加监控和其他通用应用程序服务。

收集器

现有收集器

  • HTTP: 捕获完整的HTTP请求和响应细节,包括查询和POST参数、头信息、属性和服务器变量(环境)
  • EventDispatcher: 捕获在事务期间调度的所有事件,包括名称、负载和时间戳
  • DoctrineSQLLogger: 捕获通过DBAL连接执行的所有查询
  • Logger: 捕获所有PSR-3日志消息
  • Exception: 捕获所有异常,包括堆栈跟踪

未来收集器

  • Guzzle: 捕获应用程序执行的所有HTTP请求
  • PDO: 原始PDO查询收集器
  • Cache: 捕获缓存命中和未命中
  • Stopwatch: 捕获详细的时间跨度

报告器

事务结束时,收集的信息可以报告给多个后端之一。

现有报告器

  • EchoReporter: 将数据作为格式化的JSON在页尾的代码标签中输出
  • NdJsonReporter: 将数据作为NDJSON行写入文件
  • GuzzleReporter: 使用HTTP POST提交数据为JSON

未来报告器

  • NATS
  • Kafka
  • 本地缓存(用于批量优化)

使用方法

在您的项目中安装Spark

composer require linkorb/spark

Symfony 4 / 5

services.yaml中注册Spark,使用以下配置行

services:
    # Register a Spark instance
    Spark\Spark:
        public: true
        factory: ['Spark\Spark', 'getInstance']

    # Decorate the Symfony EventDispatcher to capture event data
    # Be sure to select the dispatcher that matches your version of the event dispatcher
    Spark\EventDispatcher\SparkEventDispatcherV5:
        decorates: 'event_dispatcher'

    # Capture PSR-3 Log data
    Spark\Logger\SparkLogger:
        decorates: 'logger'

    # Capture Doctrine DBAL data
    Spark\Doctrine\SparkDoctrineEventSubscriber:
        tags:
            - { name: doctrine.event_subscriber, connection: default }
    Spark\Doctrine\SparkSQLLogger:
        public: true

    # Register Event Subscriber to automatically report data on
    # kernel.terminate and capture kernel.exception data
    Spark\EventSubscriber\SparkEventSubscriber:
        public: true

由于Symfony的事件调度器方法签名在各个版本中有所变化,因此提供了V3、V4和V5的多重装饰器。

有关详细信息,请参阅src/EventDispatcher/README.md

其他框架/库

  1. 使用$spark = \Spark\Spark::getInstance()实例化spark实例
  2. 通过装饰事件调度器、日志记录器等注册收集器
  3. 事务完成后,调用$spark->report();

报告键的白名单

默认情况下,Spark报告每个事务收集数据中的所有键。您可以通过指定带有模式数组的SPARK_REPORT_WHITELIST来应用白名单过滤器,以限制报告的数据。例如

SPARK_REPORT_WHITELIST=id,type,http.response.*,queries.*

许可协议

MIT。有关详细信息,请参阅许可文件

由LinkORB工程团队提供


查看我们的其他项目linkorb.com/engineering

顺便说一句,我们正在招聘!