摘要:一什么是预警预警可以理解成我们日常生活中的体检,每个人不管是富贵,还是贫穷,有一个健康的身体才是事业和生活的基础。
一、什么是预警?
预警可以理解成我们日常生活中的体检,每个人不管是富贵,还是贫穷,有一个健康的身体才是事业和生活的基础。
项目的健康我们形象比喻成“1”,项目的N多子功能/子模块,比如登录模块、注册模块等都是“1”后面的“0”,如果项目都出问题了(比如 Http Status Code 502, 页面或者接口响应慢),相当于前面的“1”已经不存在了,即使后面再多的“0”也没有任何意义。
二、预警能起到什么作用?从医学的名词来表述,包括了三个方面:
治未病
早发现,早治疗
确诊了,马上治疗
三、Asf 预警解决方案关于 Asf 框架的入门教程,请看这里 >>> Get Start
关于 Asf 框架支持的配置项及配置详情,请看这里 >>> Get Start
Asf PHP扩展框架已经内置了一套预警机制,预警范围包括了两个方面,每一个方面又包括两种不同的预警处理方法。
PHP脚本执行异常预警
Fatal Error | Warning | Notice | Strict | Deprecated | Unknown Error |
---|---|---|---|---|---|
E_PARSE | E_WARNING | E_NOTICE | E_STRICT | E_DEPRECATED | E_OTHERS |
E_ERROR | E_USER_WARNING | E_USER_NOTICE | - | - | - |
E_CORE_ERROR | E_CORE_WARNING | - | - | - | - |
E_COMPILE_ERROR | E_COMPILE_WARNING | - | - | - | - |
E_USER_ERROR | E_RECOVERABLE_ERROR | - | - | - | - |
PHP脚本执行时间耗时预警 (非CLI模式下)
配置项 | 类型 | 默认值 (秒) | 含义 |
---|---|---|---|
asf.dispathcer.timeout.max_script_time | double | 1.0 | 脚本超时预警 |
asf.dispathcer.timeout.max_db_time | double | 0.1 | SQL超时预警 |
asf.dispathcer.timeout.max_cache_time | double | 0.1 | NoSQL超时预警 |
asf.dispathcer.timeout.max_curl_time | double | 0.1 | CURL超时预警 |
本地日志记录方案,支持 Log Buffer,性能指标请看这里 >>> Get Start
4.1 PHP脚本执行异常预警日志格式规范请参考这里 >>> Get Start
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php array( "root_path" => dirname(__DIR__) . "/apps", "log_path" => "/data/logs", /* 日志保存目录,写入权限 */ "dispatcher" => [ "log" => ["err" => 1] /* 开启 */ ] ) ); $app = new App($configs); $app->run();4.1.1 /data/logs/Asf_Err_Log 样本
[dongshuang@box3 /data/logs]$ tailf Asf_Err_Log 2019-02-22 16:01:11 Asia/Shanghai | NOTICE | 28984 | Notice: Undefined variable: b in /data/www/box3.cn/apps/Bootstrap.php on line 21 2019-02-22 16:01:11 Asia/Shanghai | WARNING | 31486 | Warning: include(test.php): failed to open stream: No such file or directory in /data/www/box3.cn/apps/Bootstrap.php on line 20 2019-02-22 16:02:24 Asia/Shanghai | ERROR | 4137 | Fatal Error: AsfApplication::run() No method listaaction in DeviceService in /data/www/box3.cn/public/index.php on line 23 Stack trace: ## settled_uri = /v1/device/lista #0 /data/www/box3.cn/public/index.php(23): AsfApplication->run() #1 {main}4.2 PHP脚本执行时间耗时预警
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php array( "root_path" => dirname(__DIR__) . "/apps", "log_path" => "/data/logs", /* 日志保存目录,写入权限 */ "dispatcher" => [ "log" => ["timeout" => 1] /* 开启 */ ] ) ); $app = new App($configs); $app->run();4.2.1 /data/logs/Asf_Timeout_Log 样本
[dongshuang@box3 /data/logs]$ tailf Asf_Timeout_Log 2019-02-25 09:06:48 UTC | INFO | 26026 | 127.0.0.1:6379 Redis::set(110) executing too slow 0.201406 sec 2019-02-25 09:06:48 UTC | INFO | 26026 | 127.0.0.1:6379 Redis::get(111) executing too slow 0.201349 sec 2019-02-25 09:06:48 UTC | INFO | 26026 | /index/redis executing too slow 1.008510 sec五、函数回调(callable)方案 Demo 5.1 PHP脚本执行异常预警
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php array( "root_path" => dirname(__DIR__) . "/apps", ) ); $app = new App($configs); $app->setErrorHandler("myErrorHandler"); $app->run();5.1.1 异常预警 - 结果样本
int(999) string(33) "Fatal Error: Class "ck" not found" string(53) "/data/www/box3.cn/apps/api/services/Index.php" int(42)5.2 PHP脚本执行时间耗时预警
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php array( "root_path" => dirname(__DIR__) . "/apps", ) ); $app = new App($configs); $app->setTimeoutHandler("myTimeoutHandler"); $app->run();5.2.1 耗时预警 - 结果样本
int(976) string(44) "/index/redis executing too slow 0.508643 sec"六、Asf 预警错误号区间段说明 6.1 《异常预警》错误号区间段 990 ~ 999
errno = 999, 表示含义: Fatal Error (框架会对异常信息进行有效拦截, 防止服务端信息泄露)
errno = 998, 表示含义: Warning
errno = 997, 表示含义: Notice
errno = 996, 表示含义: Strict
errno = 995, 表示含义: Deprecated
errno = 994, 表示含义: Unkown Error
6.2 《超时预警》错误号区间段 970 ~ 989errno = 970, 表示含义: MySQL 单条SQL执行时间超过预设阀值
errno = 971, 表示含义: Redis 单条NoSQL执行时间超过预设阀值
errno = 972, 表示含义: Memcached 单条NoSQL执行时间超过预设阀值
errno = 973, 表示含义: PgSQL 单条SQL执行时间超过预设阀值
errno = 974, 表示含义: SQLite 单条SQL执行时间超过预设阀值
errno = 975, 表示含义: CURL 请求时间超过预设阀值
errno = 976, 表示含义: 脚本完整生命周期请求时间超过预设阀值
持续开放更多的功能
七、结束语感谢大家的阅读,希望能给大家带来帮助,如果使用中有疑问请联系我们,当然了我们也可以聊点更好玩的 ^_^
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/30179.html
摘要:一是什么全称用语言编写的轻量级扩展框架专注于开发。这里只是给出了一种测试方法通过多次不同并发数测试结果得知与原生性能消耗是。业务开发速度结论采用框架开发业务代码量能节约。 showImg(https://segmentfault.com/img/bVbamHp?w=320&h=320); 一、Asf 是什么? 全称 API Services Framework, 用C语言编写的轻量级P...
摘要:传统与比较传统的框架每次请求都会去重新加载配置文件。开启情况下还是有执行的过程时间框架读取到配置文件的内容保存到系统内存下一次请求直接去内存读取数据。也提供非常简单的配置实现。 传统MVC 与 Asf 比较 传统的MVC框架 每次请求都会去重新加载配置文件。即使配置文件内容没有更新, 也会去重新加载一次。这是一个很不好的设计。(开启Opcache情况下, 还是有执行的过程时间) Asf...
摘要:通过业务处理异常,将不正常的业务处理结果返回给调用者或其他。通常会在层中写与数据库相关的代码,如表的关联关系,表属性的可取值等。返回此类响应表示服务器抛出了未捕捉处理的异常或错误。 前言 之前在公司负责了一个项目,进行了前后端分离,笔者负责了整个项目的基本结构的搭建,在此总结一些经验。本文主要介绍后端web api的设计与实现。demo代码链接:github代码 基本架构 代码分层 应...
阅读 3171·2021-09-22 15:05
阅读 2748·2019-08-30 15:56
阅读 1054·2019-08-29 17:09
阅读 791·2019-08-29 15:12
阅读 2075·2019-08-26 11:55
阅读 3035·2019-08-26 11:52
阅读 3369·2019-08-26 10:29
阅读 1373·2019-08-23 17:19