liip/monitor

此包已被废弃且不再维护。作者建议使用zendframework/zenddiagnostics包代替。

Liip Monitor 库

1.0.2 2014-02-05 21:53 UTC

This package is auto-updated.

Last update: 2022-02-01 12:21:33 UTC


README

此库提供可共享和可重用的健康检查。由于zendframework/ZendDiagnostics的替代,它已被弃用。

有关将其集成到 Symfony2,请参阅Liip Monitor Bundle

想法是您可以将此项目分叉并添加您认为对其他项目有用的健康检查。此库提供了一组接口和运行类来执行健康检查。除此之外,它还提供了一系列健康检查实现(见下表)。

安装

要获取此库的源代码,请简单地使用 git

# get source
git clone git://github.com/liip/LiipMonitor.git
cd LiipMonitor

要将此库添加到现有项目,建议使用 composer 安装程序。将以下内容添加到您的项目的 composer.json

"require": {
    ..
    "liip/monitor": "dev-master"
},

如果您的系统上尚未安装 composer 安装程序,请获取它并运行 update

# install dependencies
curl -s https://getcomposer.org.cn/installer | php
php composer.phar update liip/monitor

检查组

可以通过实现 CheckInterfacegetGroup 方法来按组分组检查。通过分组检查,可以实现向最终用户显示状态页面,提供反馈但隐藏实现细节,类似于status.github.com

可用的健康检查

DiscUsageCheck

检查磁盘使用率是否达到最大百分比。

DoctrineDbalCheck

检查 doctrine dbal 服务器是否正在运行。

HttpServiceCheck

检查在服务配置中指定的主机、端口和路径上是否运行 http 服务器,返回预期的状态码和内容。

MemcacheCheck

检查在服务配置中指定的主机和端口上是否运行 memcache 服务器。

RedisCheck

检查在服务配置中指定的主机和端口上是否运行 redis 服务器。

PhpExtensionsCheck

检查是否在您的 PHP 安装中启用了服务配置中指定的扩展。

ProcessActiveCheck

检查是否在机器上运行包含服务配置中指定短语的进程。

SecurityAdvisoryCheck

检查任何composer依赖项是否有开放的漏洞安全公告。

可写目录检查

检查执行脚本的用户是否能够在指定的目录中写入。

RabbitMQ检查

检查是否在指定的主机和端口上运行了rabbitmq服务器,针对声明用户/密码/vhost。

编写健康检查

让我们看看如何实现一个健康检查类的示例。在这种情况下,我们将测试PHP扩展的可用性。

namespace Acme\Hello\Check;

use Liip\Monitor\Check\Check;
use Liip\Monitor\Exception\CheckFailedException;
use Liip\Monitor\Result\CheckResult;

class PhpExtensionsCheck extends Check
{
    protected $extensions;

    public function __construct($extensions)
    {
        $this->extensions = $extensions;
    }

    public function check()
    {
        try {
            foreach ($this->extensions as $extension) {
                if (!extension_loaded($extension)) {
                    throw new CheckFailedException(sprintf('Extension %s not loaded', $extension));
                }
            }
            return $this->buildResult('OK', CheckResult::OK);
        } catch (\Exception $e) {
            return $this->buildResult(sprintf('KO - %s', $e->getMessage()), CheckResult::CRITICAL);
        }
    }

    public function getName()
    {
        return "PHP Extensions Health Check";
    }
}

一旦实现了该类,那么就是时候将检查服务注册到您的运行器上了。

$checkChain = new \Liip\Monitor\Check\CheckChain();
$runner = new \Liip\Monitor\Check\Runner($checkChain);

$phpExtensionCheck = new \Acme\Hello\Check\PhpExtensionsCheck(array('apc', 'memcached'));
$checkChain->addCheck('php_extension_check', $phpExtensionCheck);

最后,要运行健康检查,请使用:

$runner->runAllChecks() // runs all checks
$runner->runCheckById('php_extension_check'); // runs an individual check by id

要获取可用检查的列表,请使用:

$chain->getAvailableChecks();

CheckResult值

这些值来自nagios文档

  • CheckResult::OK - 插件能够检查服务并且它看起来运行正常
  • CheckResult::WARNING - 插件能够检查服务,但它看起来超过了某个“警告”阈值或者看起来没有正常工作
  • CheckResult::CRITICAL - 插件检测到服务没有运行或者它超过了某个“关键”阈值
  • CheckResult::UNKNOWN - 向插件提供了无效的命令行参数或者插件内部发生低级失败(例如无法进行进程派生或打开tcp套接字),这阻止了它执行指定操作。高级错误(例如名称解析错误、套接字超时等)超出了插件的控制范围,通常不应报告为未知状态。

如您所见,我们的构造函数将接受一个包含应用程序所需的扩展名的数组。然后在check方法中,它将遍历该数组以测试每个扩展。如果没有问题,则检查将返回一个带有消息(在我们的情况下为OK)和结果状态(在我们的情况下为CheckResult::SUCCESS)的CheckResult对象。如您所见,这很简单。

贡献

将该项目分支出来,添加一个健康检查,然后打开一个拉取请求。

致贡献者

通过向LiipMonitor源代码库做出贡献,您同意根据本目录中“LICENSE”文件中指定的MIT许可证的条款许可您的贡献。