xuanwolei / inspect

健康检查

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

健康检查服务

架构

架构

特性

  • 多协议支持 http1.1/http2.0/websocket/tcp/udp
  • 多维度监控
  • 数据可视化
  • 实时报警通知

异常判断规则

符合以下任意一条规则,都属于异常

  • 接口响应时间超出设置的阈值
  • 网络连接异常
  • 状态码和预期不一致
  • DNS解析超时/失败
  • 返回数据内容/类型和预期不一致

对于http1.1/http2.0/websocket协议,会验证HTTP状态码,tcp、udp协议只验证网络错误码。

响应时间说明

协议 域名 ip
http1.1/http2.0 相比ip会多一个DNS解析时间,不计入响应时间内 一个项目下的多个path(接口),每次都会发起一个http请求,默认未开启keepalive,所以每次请求都会创建一个新的tcp连接
websocket/tcp 同上 不包含tcp3次握手的连接建立过程,响应时间=消息发送+数据接收
udp 同上 响应时间=数据发送+数据接收

报警级别

每个级别对应不同的预警级别,具体如下

级别 每次通知间隔 一小时内通知次数上限
1 2分钟 30
2 15分钟 4
3 30分钟 2

一般业务建议设置3级,等级越低,收到的通知越多,消息太多容易引起*扰。

状态码返回说明

除了常见的状态码外,报错中还有4个特殊的状态,如下:

状态码 说明
-1 连接超时,服务器未监听端口或网络丢失 可以读取$errCode获取具体的网络错误码
-2 请求超时,服务器未在规定的timeout时间内返回response
-3 客户端请求发出后,服务器强制切断连接
-4 DNS解析失败

对于http相关协议,会存在http状态码,其他协议除了上诉的4个状态外,还有会返回linux错误码(具体可查看linux错误码参照表)。

部署

依赖环境

  • php7+
  • php swoole4.x
  • php inotify扩展
  • php yaf扩展
  • influxdb数据库
  • mysql数据库

数据库表

CREATE TABLE `config` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'http' COMMENT '监控类型:包含http,tcp,udp',
  `name` varchar(225) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '配置名称',
  `http_host` varchar(225) COLLATE utf8_unicode_ci DEFAULT NULL,
  `hosts` varchar(225) COLLATE utf8_unicode_ci DEFAULT NULL,
  `paths` text COLLATE utf8_unicode_ci,
  `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `level` int(2) unsigned DEFAULT '1',
  `timeout` int(10) unsigned NOT NULL DEFAULT '3000',
  `state` int(2) unsigned DEFAULT '1',
  `desc` varchar(225) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `notice_token` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '钉钉token',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

linux错误码参照表

C Name Value Description 含义
Success 0 Success 成功
EPERM 1 Operation not permitted 操作不允许
ENOENT 2 No such file or directory 没有这样的文件或目录
ESRCH 3 No such process 没有这样的过程
EINTR 4 Interrupted system call 系统调用被中断
EIO 5 I/O error I/O 错误
ENXIO 6 No such device or address 没有这样的设备或地址
E2BIG 7 Arg list too long 参数列表太长
ENOEXEC 8 Exec format error 执行格式错误
EBADF 9 Bad file number 坏的文件描述符
ECHILD 10 No child processes 没有子进程
EAGAIN 11 Try again 资源暂时不可用
ENOMEM 12 Out of memory 内存溢出
EACCES 13 Permission denied 拒绝许可
EFAULT 14 Bad address 错误的地址
ENOTBLK 15 Block device required 块设备请求
EBUSY 16 Device or resource busy 设备或资源忙
EEXIST 17 File exists 文件存在
EXDEV 18 Cross-device link 无效的交叉链接
ENODEV 19 No such device 设备不存在
ENOTDIR 20 Not a directory 不是一个目录
EISDIR 21 Is a directory 是一个目录
EINVAL 22 Invalid argument 无效的参数
ENFILE 23 File table overflow 打开太多的文件系统
EMFILE 24 Too many open files 打开的文件过多
ENOTTY 25 Not a tty device 不是 tty 设备
ETXTBSY 26 Text file busy 文本文件忙
EFBIG 27 File too large 文件太大
ENOSPC 28 No space left on device 设备上没有空间
ESPIPE 29 Illegal seek 非法移位
EROFS 30 Read-only file system 只读文件系统
EMLINK 31 Too many links 太多的链接
EPIPE 32 Broken pipe 管道破裂
EDOM 33 Math argument out of domain 数值结果超出范围
ERANGE 34 Math result not representable 数值结果不具代表性
EDEADLK 35 Resource deadlock would occur 资源死锁错误
ENAMETOOLONG 36 Filename too long 文件名太长
ENOLCK 37 No record locks available 没有可用锁
ENOSYS 38 Function not implemented 功能没有实现
ENOTEMPTY 39 Directory not empty 目录不空
ELOOP 40 Too many symbolic links encountered 符号链接层次太多
EWOULDBLOCK 41 Same as EAGAIN 和 EAGAIN 一样
ENOMSG 42 No message of desired type 没有期望类型的消息
EIDRM 43 Identifier removed 标识符删除
ECHRNG 44 Channel number out of range 频道数目超出范围
EL2NSYNC 45 Level 2 not synchronized 2 级不同步
EL3HLT 46 Level 3 halted 3 级中断
EL3RST 47 Level 3 reset 3 级复位
ELNRNG 48 Link number out of range 链接数超出范围
EUNATCH 49 Protocol driver not attached 协议驱动程序没有连接
ENOCSI 50 No CSI structure available 没有可用 CSI 结构
EL2HLT 51 Level 2 halted 2 级中断
EBADE 52 Invalid exchange 无效的交换
EBADR 53 Invalid request descriptor 请求描述符无效
EXFULL 54 Exchange full 交换全
ENOANO 55 No anode 没有阳极
EBADRQC 56 Invalid request code 无效的请求代码
EBADSLT 57 Invalid slot 无效的槽
EDEADLOCK 58 Same as EDEADLK 和 EDEADLK 一样
EBFONT 59 Bad font file format 错误的字体文件格式
ENOSTR 60 Device not a stream 设备不是字符流
ENODATA 61 No data available 无可用数据
ETIME 62 Timer expired 计时器过期
ENOSR 63 Out of streams resources 流资源溢出
ENONET 64 Machine is not on the network 机器不上网
ENOPKG 65 Package not installed 没有安装软件包
EREMOTE 66 Object is remote 对象是远程的
ENOLINK 67 Link has been severed 联系被切断
EADV 68 Advertise error 广告的错误
ESRMNT 69 Srmount error srmount 错误
ECOMM 70 Communication error on send 发送时的通讯错误
EPROTO 71 Protocol error 协议错误
EMULTIHOP 72 Multihop attempted 多跳尝试
EDOTDOT 73 RFS specific error RFS 特定的错误
EBADMSG 74 Not a data message 非数据消息
EOVERFLOW 75 Value too large for defined data type 值太大,对于定义数据类型
ENOTUNIQ 76 Name not unique on network 名不是唯一的网络
EBADFD 77 File descriptor in bad state 文件描述符在坏状态
EREMCHG 78 Remote address changed 远程地址改变了
ELIBACC 79 Cannot access a needed shared library 无法访问必要的共享库
ELIBBAD 80 Accessing a corrupted shared library 访问损坏的共享库
ELIBSCN 81 A .lib section in an .out is corrupted 库段. out 损坏
ELIBMAX 82 Linking in too many shared libraries 试图链接太多的共享库
ELIBEXEC 83 Cannot exec a shared library directly 不能直接执行一个共享库
EILSEQ 84 Illegal byte sequence 无效的或不完整的多字节或宽字符
ERESTART 85 Interrupted system call should be restarted 应该重新启动中断的系统调用
ESTRPIPE 86 Streams pipe error 流管错误
EUSERS 87 Too many users 用户太多
ENOTSOCK 88 Socket operation on non-socket 套接字操作在非套接字上
EDESTADDRREQ 89 Destination address required 需要目标地址
EMSGSIZE 90 Message too long 消息太长
EPROTOTYPE 91 Protocol wrong type for socket socket 协议类型错误
ENOPROTOOPT 92 Protocol not available 协议不可用
EPROTONOSUPPORT 93 Protocol not supported 不支持的协议
ESOCKTNOSUPPORT 94 Socket type not supported 套接字类型不受支持
EOPNOTSUPP 95 Operation not supported on transport 不支持的操作
EPFNOSUPPORT 96 Protocol family not supported 不支持的协议族
EAFNOSUPPORT 97 Address family not supported by protocol 协议不支持的地址
EADDRINUSE 98 Address already in use 地址已在使用
EADDRNOTAVAIL 99 Cannot assign requested address 无法分配请求的地址
ENETDOWN 100 Network is down 网络瘫痪
ENETUNREACH 101 Network is unreachable 网络不可达
ENETRESET 102 Network dropped 网络连接丢失
ECONNABORTED 103 Software caused connection 软件导致连接中断
ECONNRESET 104 Connection reset by 连接被重置
ENOBUFS 105 No buffer space available 没有可用的缓冲空间
EISCONN 106 Transport endpoint is already connected 传输端点已经连接
ENOTCONN 107 Transport endpoint is not connected 传输终点没有连接
ESHUTDOWN 108 Cannot send after transport endpoint shutdown 传输后无法发送
ETOOMANYREFS 109 Too many references: cannot splice 太多的参考
ETIMEDOUT 110 Connection timed 连接超时
ECONNREFUSED 111 Connection refused 拒绝连接
EHOSTDOWN 112 Host is down 主机已关闭
EHOSTUNREACH 113 No route to host 没有主机的路由
EALREADY 114 Operation already 已运行
EINPROGRESS 115 Operation now in 正在运行
ESTALE 116 Stale NFS file handle 陈旧的 NFS 文件句柄
EUCLEAN 117 Structure needs cleaning 结构需要清洗
ENOTNAM 118 Not a XENIX-named 不是 XENIX 命名的
ENAVAIL 119 No XENIX semaphores 没有 XENIX 信号量
EISNAM 120 Is a named type file 是一个命名的文件类型
EREMOTEIO 121 Remote I/O error 远程输入 / 输出错误
EDQUOT 122 Quota exceeded 超出磁盘配额
ENOMEDIUM 123 No medium found 没有磁盘被发现
EMEDIUMTYPE 124 Wrong medium type 错误的媒体类型
ECANCELED 125 Operation Canceled 取消操作
ENOKEY 126 Required key not available 所需键不可用
EKEYEXPIRED 127 Key has expired 关键已过期
EKEYREVOKED 128 Key has been revoked 关键被撤销
EKEYREJECTED 129 Key was rejected by service 关键被拒绝服务
EOWNERDEAD 130 Owner died 所有者死亡
ENOTRECOVERABLE 131 State not recoverable 状态不可恢复
ERFKILL 132 Operation not possible due to RF-kill 由于 RF-kill 而无法操作
EHWPOISON 133 Memory page has hardware error 分页硬件错误

常见问题

收到了报警通知,但是自己访问确没有异常?

在排查时,先确认以下几个情况:

  1. 监控的应用是否是带域名,域名是否加过cdn加速
  2. 应用是否有负载均衡或web防火墙。

==对于情况1:==

  • 监控机器dns服务解析存在异常。
  • 监控机器到某些的cdn节点连接异常。

==对于情况2:==

  • 负载均衡的某一台机器异常,所以出现概率性的异常
  • web防火墙做了拦截

对于有域名的项目,建议配置域名监控外,再加上目标服务器ip监控,在出现dns或cdn节点异常时可以提供参考。

钉钉自定义机器人配置参考

image

配置关键词“项目”

About

健康检查

License:Apache License 2.0


Languages

Language:PHP 99.7%Language:HTML 0.1%Language:Dockerfile 0.1%Language:Shell 0.1%Language:Makefile 0.0%