rstgroup / zf-grafana-module
与 Grafana API 集成。
Requires
- php: ^5.6 || ^7
- doctrine/dbal: ^2.5
- php-http/client-implementation: ^1
- php-http/httplug: ^1.1
- php-http/message-factory: ^1.0
- php-http/message-factory-implementation: ^1
- webmozart/assert: ^1.2
- zendframework/zend-mvc-console: ^1.1
Requires (Dev)
- guzzlehttp/psr7: ^1.4
- mikey179/vfsstream: ^1.6
- php-http/message: ^1.6
- phpunit/dbunit: ^2.0
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2020-01-10 16:38:44 UTC
README
本模块通过其 HTTP APIs 与 Grafana 工具集成。
安装
composer require rstgroup/zf-grafana-module
然后使用 ZF 系统配置(config/application.config.php
)将模块添加到您的应用程序中
return [ 'modules' => [ 'RstGroup\ZfGrafanaModule', ], ]
最后一步是提供数据库连接和 HTTP 客户端,以便库可以与其他服务通信。使用 Zend 的 Service Manager 的别名功能定义
\RstGroup\ZfGrafanaModule\Repository\DashboardApiRepositoryFactory::HTTP_CLIENT_SERVICE
实现Http\Client\HttpClient
接口的 HTTP 客户端\RstGroup\ZfGrafanaModule\Repository\DashboardApiRepositoryFactory::REQUEST_FACTORY_SERVICE
用于创建 HTTP 请求的请求工厂\RstGroup\ZfGrafanaModule\Repository\DbalMetadataRepositoryFactory::SERVICE_CONNECTION
存储仪表板元数据的数据库的 Doctrine DBAL 连接\RstGroup\ZfGrafanaModule\Repository\DbalIdMappingRepositoryFactory::SERVICE_CONNECTION
存储仪表板 ID 映射的数据库的 Doctrine DBAL 连接
仪表板
模块为您提供与指定的 Grafana 实例自动同步仪表板的功能。
使用
模块提供 CLI 命令
php public/index.php grafana migrate
目前不需要任何参数。所有关于仪表板的信息都是从应用程序的配置中获取的。
定义要同步的仪表板
默认情况下,脚本会扫描 build/dashboards
目录,寻找包含仪表板定义的 .json
文件。
搜索目录可以在配置文件中轻松更改,以下是一个示例
return [ 'dashboard-migrations' => [ 'repositories' => [ \RstGroup\ZfGrafanaModule\Repository\FilesystemDirectoryRepository::class => [ 'path' => 'path/to/your/directory', ], ], ], ];
自定义仪表板定义源
还可以将仪表板定义存储在其他地方。为此,您需要做两件事
-
实现您自己的
DashboardApiRepository
,在 Zend 的 Service Manager 中定义它,并配置模块使用它return [ 'service_manager' => [ 'factories' => [ MyOwnRepository::class => MyOwnRepositoryFactory::class, ] ], 'dashboard-migrations' => [ 'source-repository' => [ 'service' => MyOwnRepository::class, ] ] ]
-
实现您自己的
DashboardIdsProvider
,该提供程序将返回从您的自定义存储库中获取的 ID。然后只需通过接口名称别称您的自定义提供程序return [ 'service_manager' => [ 'aliases' => [ \RstGroup\ZfGrafanaModule\Controller\Helper\DashboardIdsProvider::class => \Your\Custom\Provider::class, ]; ] ];
定义远程存储库
为了使同步工作,您需要传递 Grafana API 的基本 URL 和 API 密钥。这些值应通过配置文件(或者更好的是,如果您的应用程序可以从其中获取配置,则在 Consul 中)传递给应用程序的配置
return [ 'dashboard-migrations' => [ 'repositories' => [ \RstGroup\ZfGrafanaModule\Repository\DashboardApiRepository::class => [ 'url' => 'http://url.to.grafana.com/api', 'api-key' => 'grafana-api-key', ], ], ], ];
接下来,您需要 HTTP 客户端(实现 PSR 的客户端接口)和 HTTP 消息工厂实现(见 http://docs.php-http.org/en/latest/message/message-factory.html)
您应该在应用程序的配置中传递这些信息,别称预定义的服务名称,如下例所示
return [ 'service_manager' => [ 'aliases' => [ \RstGroup\ZfGrafanaModule\Repository\DashboardApiRepositoryFactory::HTTP_CLIENT_SERVICE => \Http\Adapter\Guzzle6\Client::class, \RstGroup\ZfGrafanaModule\Repository\DashboardApiRepositoryFactory::REQUEST_FACTORY_SERVICE => \Http\Message\MessageFactory\GuzzleMessageFactory::class, ] ] ];
元数据
为什么有元数据?
模块需要存储仪表板的元数据。这是因为 Grafana API 为发布的仪表板生成额外的标识符和参数。
首先是仪表板的别名。别名是仪表板标题的文本表示,且对URL安全。别名在API的GET请求中作为必需参数使用,因此可以视为标识符。
其次是仪表板的ID,在仪表板创建后立即生成。ID是一个正整数。它用于更新请求(POST
)中,并需要在JSON中的仪表板定义中提供,因此也可以视为仪表板的标识符——第二个,不那么重要的标识符 :))
下一个元数据参数是仪表板的版本——每次更新后,版本都会增加。如果您尝试使用版本号较低的仪表板进行更新,API将拒绝更改。
最后一个参数是架构版本,它决定了定义架构的版本,因此Grafana实例可以确定其是否足够新,可以解析给定的仪表板定义。
存储
默认情况下——元数据存储在MySQL数据库中,因此需要为映射器别名Doctrine DBAL连接,以便映射器能够工作
return [ 'service_manager' => [ 'aliases' => [ \RstGroup\ZfGrafanaModule\Repository\DbalIdMappingRepositoryFactory::SERVICE_CONNECTION => 'Your\Doctrine\Dbal\Connection' ] ] ]
表应遵循以下定义
CREATE TABLE dashboard_metadata ( dashboard_id VARCHAR(255) NOT NULL PRIMARY KEY, grafana_id INT NOT NULL, dashboard_version INT NOT NULL, dashboard_schema_version INT DEFAULT NULL ) DEFAULT CHARACTER SET 'utf8';
ID映射
由于别名是在Grafana API的侧创建的,因此需要保留本地-远程ID映射。
默认情况下,仪表板的本地标识符是其定义的文件名。映射存储在数据库中,因此需要为映射器别名Doctrine DBAL连接,以便映射器能够工作
return [ 'service_manager' => [ 'aliases' => [ \RstGroup\ZfGrafanaModule\Repository\DbalIdMappingRepositoryFactory::SERVICE_CONNECTION => 'Your\Doctrine\Dbal\Connection' ] ] ]
映射表应遵循以下定义
CREATE TABLE dashboard_id_mapping ( local_id VARCHAR(255) NOT NULL PRIMARY KEY, remote_id VARCHAR(255) NOT NULL ) DEFAULT CHARACTER SET 'utf8';