Laravel能用钉钉接收系统警报!

 2666

下面给大家介绍Laravel框架怎么使用钉钉聊天机器人接收系统警报 ,希望对大家有所帮助!


Laravel能用钉钉接收系统警报!


钉钉提供的聊天机器人功能,可以使用自定义机器人的 webhook 我们可以将错误日志及时的推送到相关人员。


1、获取钉钉聊天机器人 Access Token

在使用本扩展之前,你需要ding-doc.dingtalk.com/doc#/servera...获取相关信息。


2、所需知识

Carbon

GuzzleHttp


3、编写代码

  1. <?php
  2.  
  3. namespace 所在命名空间;
  4.  
  5. use CarbonCarbon;
  6. use GuzzleHttpClient;
  7. use GuzzleHttpExceptionGuzzleException;
  8. use IlluminateSupportFacadesLog;
  9.  
  10. class Ding
  11. {
  12.     CONST BASE_URI   = "https://oapi.dingtalk.com/";
  13.     CONST NOTICE_URL = [
  14.         "robot/send?access_token=*******",
  15.         'robot/send?access_token=*********'
  16.     ];
  17.  
  18.     /**
  19.      * Description: 钉钉文本通知
  20.      * @param        $data
  21.      * @param array $at
  22.      * @param bool $isAtAll
  23.      * @throws GuzzleException
  24.      */
  25.     public static function text($data, $at = [], $isAtAll = false)
  26.     {
  27.         $notice_url = self::NOTICE_URL[rand(0, count(self::NOTICE_URL) - 1)];
  28.         $data = "#### 异常触发时间".Carbon::now()->format('Y-m-d H:i:s')."n".$data;
  29.         $pushData = [
  30.             'msgtype' => 'text',
  31.             'text'    => ['content' => $data],
  32.             'at'      => ['atMobiles' => $at, 'isAtAll' => $isAtAll],
  33.         ];
  34.         self::getData($notice_url, $pushData);
  35.     }
  36.  
  37.     /**
  38.      * Description: 钉钉预警markdown
  39.      * @param        $data
  40.      * @param array $at
  41.      * @param bool $isAtAll
  42.      * @throws GuzzleException
  43.      */
  44.     public static function markdown($data, $at = [], $isAtAll = false)
  45.     {
  46.         $notice_url = self::NOTICE_URL[rand(0, count(self::NOTICE_URL) - 1)];
  47.         $data['text'] = "#### 异常触发时间".Carbon::now()->format('Y-m-d H:i:s')."n".$data['text'];
  48.         $pushData = [
  49.             'msgtype'  => 'markdown',
  50.             'markdown' => $data,
  51.             'at'       => ['atMobiles' => $at, 'isAtAll' => $isAtAll],
  52.         ];
  53.         self::getData($notice_url, $pushData);
  54.     }
  55.  
  56.     /**
  57.      * Description: 钉钉预警处理
  58.      * @param $notice_url
  59.      * @param $pushData
  60.      * @throws GuzzleException
  61.      */
  62.     public static function getData($notice_url, $pushData)
  63.     {
  64.         try {
  65.             $client = new Client(['base_uri' => self::BASE_URI, 'timeout' => 3.0]);
  66.             $res    = $client->request('POST',
  67.                 $notice_url,
  68.                 ['headers' => ['Content-Type' => 'application/json;charset=utf-8',],
  69.                     'json'    => $pushData,
  70.                     'verify'  => false]);
  71.             $result = json_decode($res->getBody()->getContents(), true);
  72.  
  73.             if ($result['errmsg'] != 'ok' && $result['errcode'] != 0) {
  74.                 Log::debug('钉钉推送数据失败', ['result' => $result,'url'=>$notice_url]);
  75.             }
  76.         }
  77.         catch (Exception $e) {
  78.             Log::debug('钉钉推送异常!',['data'=>$pushData,'url'=>$notice_url,'env'=>App::environment()]);
  79.         }
  80.     }
  81. }


4、其他建议

推荐使用redis队列进行操作,具体需要Event,Listener,redis相关操作具体可查看laravel官方文档。



TAG标签:
本文网址:https://www.zztuku.com/detail-10752.html
站长图库 - Laravel能用钉钉接收系统警报!
申明:本文转载于《learnku》,如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐