troopers / metrics-bundle
Symfony Bundle 用于指标管理
Requires
- php: >=5.3.2
- doctrine/common: ~2.3
- elasticsearch/elasticsearch: ~2.1
- graylog2/gelf-php: ^1.5
- monolog/monolog: 1.*
- symfony/framework-bundle: ~2.7|~3.0
README
MetricsBundle
概述
此包与 Monolog 一起工作,用于通过 ELK(Elasticsearch、Logstash、Kibana)改进监控或指标记录过程。
安装
composer require troopers/metrics-bundle
并在 AppKernel 中注册
class AppKernel extends Kernel { public function registerBundles() { $bundles = array( ... new Troopers\MetricsBundle\MetricsBundle(), ... ); return $bundles
确保启用了某些序列化器
处理器
用户处理器
此处理器将自动将用户信息添加到每条日志中。在可用的信息中,我们可以知道用户是否 认证
(认证:true/false),在适当的情况下,其 id
和 username
。此外,此处理器还将检查您是否在 metrics.serializer_user_groups
配置中定义了某些序列化器组。
以下配置将指示 symfony 序列化器使用配置文件组序列化认证用户
metrics: serializer_user_groups: - profile
默认情况下,此处理器仅适用于 app
通道,您可以通过添加其他处理器或覆盖服务声明以在其他处理器或通道上使用。
结果将以前缀 user_
开头(user_id, user_city...),您不需要提供任何其他上下文。
上下文序列化器处理器
此处理器用于序列化对象,以避免您需要在记录日志的地方传递序列化器。要与此处理器通信并指示它执行其工作,您需要将对象包装在 ContextSerializerProcessor
中,并按照以下方式提供它们
$logger->info('a log with some context object', [ new SerializeContextItem($someObject, ['serializingGroupLambda'], 'myalias'), 'a_different_simple_context_prop' => 42, new SerializeContextItem($anotherOne, ['serializingGroup1', 'serializingGroup2']), ]);
当处理器找到您的 SerializeContextItems 时,它将处理上下文并开始工作,并使用第 2 个构造函数参数中给出的组将序列化对象添加到上下文中。如果给出了别名,它将使用该别名存储属性,否则它将以类名作为前缀。
修改日期处理器
出于某种原因,您可能想记录过去(或未来如何?)的事件。AlterDateTimeProcessor
会为您做这件事,您只需要定义带有所需 \DateTime 值的 @datetime
上下文属性。
$logger->info('a test in the past', ['@datetime' => new \DateTime('10 days ago')]);
默认情况下,此处理器仅适用于 app
通道,您可以通过添加其他处理器或覆盖服务声明以在其他处理器或通道上使用。
域处理器
在某些情况下,您可能需要添加一些额外信息以改进日志:应用程序名称、环境... 您可以在 extra_fields
中添加它们
metrics: extra_fields: app: 'Acme App' env: 'preprod'
仅允许 标量
值。 (字符串、整数、布尔值、浮点数、null)
如果定义了请求 Uri,此处理器还会添加请求 Uri
默认情况下,此处理器适用于所有通道。
Git 处理器
此处理器尝试使用 git 命令或在应用程序根目录中的 REVISION
文件中查找 git 修订版本
默认情况下,此处理器适用于所有通道。
日志沙盒
有时我们只想发送日志来测试某些功能,这个日志沙盒可以帮助你完成这个小任务。
检查度量路由是否已注册(在你的 app/config/routing.yml
或 routing_dev.yml
中)
MetricsBundle: resource: "@MetricsBundle/Controller/" type: annotation prefix: /metrics
然后前往 /metrics/sandbox/newLog
获取你的控制台:
仪表板和时间过滤器
一旦你在Kibana中完成仪表板的构建,你将能够获取一个iframe来嵌入到你的网站上。要在你的管理后台使用带有时间过滤器的仪表板,请在数据库中添加一行,如下所示
INSERT INTO `metrics_dashboard` (`id`, `name`, `url`, `height`, `width`) VALUES (1, 'base', '<iframe src="http://your.kibana.url[...]"></iframe>', 768, 1200);
然后,嵌入 MetricsBundle:Dashboard:show
并覆盖(或不覆盖)可用的块
{% embed 'MetricsBundle:Dashboard:show.html.twig' %} {% block body_title %} Some thing before the title {{ parent() }} {% endblock body_title %} {# disable the timeFilterForm #} {% block body_timeFilterForm %}{% endblock %} {% endembed %}
时间过滤器
Kibana没有将其时间过滤器集成到嵌入的仪表板中。这里的 TimeFilter
和 TimeFilterForm
用于在仪表板中进行导航。
尽管如此,TimeFilter是一个实体,因此你可以添加一些关系,使你的用户与某些仪表板相关联。
以下是可用的时间过滤器
- 今天
- 本周
- 本月
- 今年
- 昨天
- 前天
- 过去15分钟
- 过去30分钟
- 过去1小时
- 过去4小时
- 过去12小时
- 过去24小时
- 过去7天
- 过去30天
- 过去60天
- 过去90天
- 过去6个月
- 过去1年
- 过去2年
- 过去5年