php alarm,GitHub - tal-tech/alarm-dog-php-sdk: 哮天犬告警平台PHP SDK
哮天犬告警通知SDK
该SDK为哮天犬监控告警平台告警接口的PHP实现,增加了非常友好的方式使用,开箱即用。
特性
支持协程/非协程模式自动切换
支持 Laravel5 ~ Laravel7 开箱即用
支持 Lumen5 ~ Lumen7 开箱即用
支持 Hyperf 开箱即用
支持任意场景、框架使用
支持告警请求发送失败重试
支持记录请求日志
安装
composer require alarm-dog/alarm
使用
Hyperf
协程版Guzzle依赖安装
composer require hyperf/guzzle
配置文件发布
$ php bin/hyperf.php vendor:publish alarm-dog/alarm
Scanning app ...
Scan app completed, took 171.40197753906 milliseconds.
Detected an available cache, skip the vendor scan process.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\RegisterPropertyHandlerListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Paginator\Listener\PageResolverListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Di\Listener\BootApplicationListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener.
[alarm-dog/alarm] publishes [config] successfully.
配置文件在 config/autoload/dog.php,配置说明请参考下面章节 配置项说明
告警发送
use Dog\Alarm\Alarm;
use Dog\Alarm\Exception\AlarmException;
$content = [
'errno' => 10086,
'error' => '您的余额已不足',
];
/**
* 方法一:直接实例化
*/
$alarm = new Alarm();
try {
/**
* Alarm::report 方法返回 \Psr\Http\Message\ResponseInterface 对象
* @var \Psr\Http\Message\ResponseInterface $response
*/
$response = $alarm->report($content);
$array = $alarm->resolveResponse($response);
/**
$array 的结构请参考下方数组:
array(3) {
["data"]=>
array(2) {
["uuid"]=>
string(36) "74bfd2d8-a1c9-434b-9098-50efc0f08ee2"
["report_time"]=>
string(19) "2020-06-26 20:50:19"
}
["msg"]=>
string(7) "success"
["code"]=>
int(0)
}
*/
// 如果要一气呵成,直接返回数组,可以使用
$array = $alarm->resolveResponse($alarm->report($content));
} catch (AlarmException $e) {
// 告警发送失败会抛出该异常
}
// 指定通知时间:
$alarm->report($content, time());
// 指定告警级别
$alarm->report($content, null, Alarm::LEVEL_ERROR);
// 指定临时通知人
$alarmGroups = [1, 2];
$channelDingGroup = new DingGroup([
['webhook' => 'webhook1', 'secret' => 'secret1'],
['webhook' => 'webhook2', 'secret' => 'secret2'],
]);
$channelYachGroup = new YachGroup();
$channelYachGroup->addRobot('webhook1', 'secret1')->addRobot('webhook2', 'secret2')
->addRobots([
['webhook' => 'webhook3', 'secret' => 'secret3'],
['webhook' => 'webhook4', 'secret' => 'secret4'],
]); // 第二个参数为true是会进行全量替换,覆盖之前的,默认为false
$channelDingWorker = new DingWorker([98664, 98665]);
$channelEmail = new Email();
$channelEmail->addUid(98664)->addUid(98665)->addUids([98666, 98667]);
$channels = [$channelDingGroup, $channelYachGroup];
$receiver = new Receiver($alarmGroups, $channels);
// 或者 $receiver = new Receiver([], $channels);
// 或者 $receiver = new Receiver($alarmGroups);
// 或者 $receiver = new Receiver();
$receiver->addAlarmGroup(1)
->addAlarmGroup(3)
->addAlarmGroups([1, 5], true) // 第二个参数为true是会进行全量替换,覆盖之前的,默认为false
->addChannel($channelDingWorker)
->addChannel(new DingWorker([1]))
->addChannels($channels);
// 以上仅用于展示SDK所有支持的方法
// 指定临时通知人
$alarm->report($content, null, null, $receiver);
/**
* 方法二:使用make
*/
// 剩下使用方法同方法一
$alarm = make(Alarm::class);
/**
* 方法三:使用@Inject注解,推荐
*/
/**
* 注意Inject的命名空间引入
* @Inject
* @var Alarm
*/
protected $alarm;
// 剩下使用方法同方法一
$this->alarm->report($content);
/**
* 方法四:使用容器Container,推荐
*/
// 剩下使用方法同方法一
$alarm = ApplicationContext::getContainer()->get(Alarm::class);
// 或者
$alarm = $container->get(Alarm::class);
// 或者
$alarm = $this->container->get(Alarm::class);
/**
* 测试告警发送
* 用于验证taskid、token是否合法,不真实发送告警
*/
try {
$result = $alarm->test();
// 测试成功
} catch (Throwable $e) {
// 测试失败
$errMsg = $e->getMessage();
}
Laravel
配置文件发布
$ php artisan vendor:publish --provider="Dog\Alarm\Provider\LaravelServiceProvider"
Copied File [/alarm-dog-php-sdk/config/dog.php] To [/config/dog.php]
Publishing complete.
配置文件在 config/dog.php,配置说明请参考下面章节 配置项说明
告警发送
/**
* 方法一:直接实例化
*/
// 请参考Hyperf中直接实例化
/**
* 方法二:使用app()助手函数,推荐
*/
// 剩下使用方法同Hyperf章节中的方法一
$alarm = app(Alarm::class);
/**
* 方法三:使用门面Facade,推荐
*/
use Dog\Alarm\Provider\Laravel\AlarmFacade;
$response = AlarmFacade::report($content);
$array = AlarmFacade::resolveResponse($response);
$array = AlarmFacade::resolveResponse(AlarmFacade::report($content));
// 可以看出 AlarmFacade 和 new Alarm() 使用方式一样,不过Facade提供静态方法访问,剩下使用方法同Hyperf章节中的方法一
Lumen
配置文件发布
Lumen框架不支持配置文件自动发布,需要在 bootstrap/app.php 中配置 $app->register(Dog\Alarm\Provider\LumenServiceProvider::class);,例如:
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/
// $app->register(App\Providers\AppServiceProvider::class);
// $app->register(App\Providers\AuthServiceProvider::class);
// $app->register(App\Providers\EventServiceProvider::class);
$app->register(Dog\Alarm\Provider\LumenServiceProvider::class);
/*
|--------------------------------------------------------------------------
| Load The Application Routes
|--------------------------------------------------------------------------
|
| Next we will include the routes file so that they can all be added to
| the application. This will provide all of the URLs the application
| can respond to, as well as the controllers that may handle them.
|
*/
mkdir config && cp vendor/alarm-dog/alarm/config/dog.php config/
配置文件在 config/dog.php,配置说明请参考下面章节 配置项说明
告警发送
/**
* 方法一:直接实例化
*/
// 请参考Hyperf中直接实例化
/**
* 方法二:使用app()助手函数,推荐
*/
// 剩下使用方法同Hyperf章节中的方法一
$alarm = app(Alarm::class);
/**
* 方法三:使用门面Facade,必须Lumen开启了对Facade的支持才行,推荐
*/
use Dog\Alarm\Provider\Laravel\AlarmFacade;
$response = AlarmFacade::report($content);
$array = AlarmFacade::resolveResponse($response);
$array = AlarmFacade::resolveResponse(AlarmFacade::report($content));
// 可以看出 AlarmFacade 和 new Alarm() 使用方式一样,不过Facade提供静态方法访问,剩下使用方法同Hyperf章节中的方法一
无框架或者其他框架
不在自动支持的框架范围内,可以直接实例化,然后手动配置,例如:
$alarm = new Alarm();
$alarm->setTaskid(1);
$alarm->setToken('token');
// 如果需要修改调用域名,可以调用 $alarm->setBaseUri('http://alarm-dog-service.domain.com/alarm/report');
// 如果需要配置guzzle,可以调用 $alarm->setGuzzleConfig($guzzleConfig); 配置格式请参考config/dog.php中guzzle下面的数组
// 剩下使用方法同Hyperf章节中的方法一
$response = $alarm->report($content);
配置项说明
默认配置文件使用了 env 函数,不是所有的框架都有该函数,请根据情况修改。
在 Hyperf/Laravel/Lumen 框架中,直接在 .env 文件中配置正确的 DOG_TASKID、DOG_TOKEN 即可直接开始使用告警功能。
use GuzzleHttp\MessageFormatter;
use GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
/**
* 哮天犬配置文件
*/
return [
// 告警任务ID
'taskid' => (int) env('DOG_TASKID'),
// 告警任务token
// 获取方法请参考:https://tal-tech.github.io/alarm-dog-docs/quick-start/alarm.html#step4%EF%BC%9A%E5%91%8A%E8%AD%A6%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95
'token' => env('DOG_TOKEN'),
// 告警地址,默认为:http://alarm-dog-service.domain.com
// 请参考文档中的环境说明:https://tal-tech.github.io/alarm-dog-docs/alarm/alarm-api.html
'base_uri' => env('DOG_BASE_URI'),
/**
* GuzzleHttp配置
*/
'guzzle' => [
// guzzle原生配置选项,请参考文档:https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html
'options' => [
'http_errors' => false,
'connect_timeout' => 0,
'timeout' => 0,
// hyperf集成guzzle的swoole配置选项
'swoole' => [
'timeout' => 10,
'socket_buffer_size' => 1024 * 1024 * 2,
],
],
// guzzle中间件配置,请参考文档:https://guzzle-cn.readthedocs.io/zh_CN/latest/handlers-and-middleware.html
'middlewares' => [
// 失败重试中间件
'retry' => function ($container = null) {
return Middleware::retry(function ($retries, RequestInterface $request, ResponseInterface $response = null) {
if (
(! $response || $response->getStatusCode() >= 500) &&
$retries < 1
) {
return true;
}
return false;
}, function () {
return 10;
});
},
// // 请求日志记录中间件
// 'logger' => function ($container = null) {
// // $format中{response}调用$response->getBody()会导致没有结果输出
// $format = ">>>>>>>>\n{request}\n<<<<<<<
// $formatter = new MessageFormatter($format);
// // 在其他框架将$logger进行正确替换即可
// // hyperf框架请使用下发方式获得Logger
// // $logger = \Hyperf\Utils\ApplicationContext::getContainer()
// // ->get(\Hyperf\Logger\LoggerFactory::class)
// // ->get('influx-guzzle');
// // laravel框架请使用下发方式获得Logger
// // $logger = \Illuminate\Support\Facades\Log::getLogger();
// return Middleware::log($logger, $formatter, 'debug');
// }
],
// hyperf集成guzzle的连接池配置选项,非hyperf框架忽略
// 连接池可以参考hyperf官方的文档:https://hyperf.wiki/2.0/#/zh-cn/guzzle
'pool' => [
'option' => [
'max_connections' => 200,
]
]
],
];
php alarm,GitHub - tal-tech/alarm-dog-php-sdk: 哮天犬告警平台PHP SDK相关推荐
- linux alarm定时器,Linux 定时器alarm()(转)
系统中的每个进程都有一个私有的闹钟.这个闹钟很像一个计时器,可以设置在一定秒数后闹钟.时间一到,时钟就发送一个信号SIGALRM到进程. 函数原型:unsigned int alarm(unsigne ...
- linux alarm 多个,linux alarm定时设置
早就知道这个函数,但是学了不用还是不会,最近一个项目需要实现,触摸屏背光时间的功能,找遍了厂家提供的驱动接口, 都没有找到相关调用,回想有alarm函数,20多行代码就实现了这个功能. 使用alarm ...
- android系统的alarm机制,Android中Alarm的机制
本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler在完成定时任 ...
- linux内核alarm,linux C之alarm函数
alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程.如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回.要注意 ...
- 超50万行代码、GitHub 4200星:腾讯重磅发布全栈机器学习平台Angel 3.0
来源:新智元编辑部 [新智元导读]腾讯首个AI开源项目Angel,正式发布一个里程碑式的版本:Angel 3.0.这是一个全栈的机器学习平台,功能特性涵盖了机器学习的各个阶段,超过50万行代码,在 G ...
- GitHub 热榜:轻量级无 Agent 的自动化运维平台!
大家好,我是 JackTian. 作为一名运维工程师,大家都知道.早在几年前,偏传统运维,以 cacti.nagios 为主流,到后来的 zabbix.Prometheus.Open-Falcon 等 ...
- php sdk微信,GitHub - swayer/wechat-php-sdk: 微信公众平台 PHP SDK
微信公众平台 PHP SDK 介绍 简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App .测试方法如下: Clone 或下载项目源码,上传至服务器. 进入微信公众 ...
- 微信公众号 php sdk,GitHub - yuanchenglu/wechat-php-sdk: 微信公众平台 PHP SDK
微信公众平台 PHP SDK 介绍 简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App .测试方法如下: Clone 或下载项目源码,上传至服务器. 进入微信公众 ...
- Hex Tech,一个带编程协同能力的 BI 平台的“危”与“机”
数据从业者常在多种工具之间跳来跳去,这种碎片化导致了协作.共享和生产力方面的问题. 企业云数据量的增加以及数据转换.模型构建和可视化工具的出现,推动了现代数据堆栈的崛起.大部分公司都在加大对数据团队的 ...
最新文章
- 杭州网络推广带大家了解404页面的作用以及对网站优化的优势
- 实验1 Windows汇编语言开发环境
- 基于diff的文件同步算法(上)
- 微盟耗时 145 个小时弥补删库,血亏 1.5 亿元!
- redis-数据类型-列表list类型
- CF Educational Codeforces Round 57划水记
- 21 个必须知道的机器学习开源工具!
- ARP欺骗原理 [转]
- 干货满满,图文详解 HDFS 的 工作机制 及其原理
- java batik_batik详解1
- 7.4 倒向随机微分方程-Feynman-Kac公式
- 多元统计分析及R语言建模(王斌会)第五、六、七章答案
- 联通数据采集交换平台BDE的配置
- clonezilla(再生龙)克隆linux系统 操作指南
- html怎么控制行的字数,怎样控制Word文档一页的行数和每行的字数?
- docker命令大全英文版在线手册
- 张鑫旭html入门,HTML audio基础API完全使用指南
- 来自520的福利----视频直播平台性能测试
- 打怪升级之Windows程序基本观
- 5.1. Table Basics
热门文章
- 细说 python与其他编程语言区别
- 算法分析 | 动态规划 | 石子合并问题
- 【蓝桥杯2018Java】哪天返回、猴子分香蕉
- 事业单位计算机技术岗位中级职称,事业单位中级职称能聘任为中级岗位吗
- 零基础HTML入门教程(17)——表单的单选框和复选框
- [拜读系列]SEC'' 2018: ACM/IEEE Symposium on Edge Computing 总结(二)
- eve-ng登录没反应?
- 2021第三届传智杯决赛全题解
- 高光谱图像处理和分析
- mysql级联删除外键约束_MySQL外键设置 级联删除