为什么服务需要监控
监控进程状态 及时发现问题 掌握主动权
监控什么
1、进程运行状态 2、机器资源状态 (机器广义上包括PM/VM/Docker) (资源包括cpu\memory\disk\network\io) Linux下如何监控: a、磁盘 df -h b、内存 free -g c、cpu vmstat d、网络 ifstat
磁盘情况
一块网卡就是etc0 两块网卡就是 etc0 etc1 In 进包 out 发包
监控数据如何采集
- 用户请求日志打印
- 服务端数据上报
- 前端页面数据埋点
日志规范
- 格式key=value
- 空格分割key=value对
服务传统监控手段
1、进程活着 但不代表正常运行即可能存在进程假死的情况 2、通过语义监控保证进程不是假死状态即模拟用户对接口发出请求 3、服务稳定的表现是每分钟错误量都是固定的 4、数据波动监控 比如数据流量突然增加了50% 可能是别人通过爬虫调用你的接口
进程监控
进程是否存活
- 原始解决方案
1、ps -aux|grep 进程名 2、不断轮询 没有输出解决触发告警
- 优雅解决方案
Linux daemontools supervise
supervise监控启动方法
父进程 fork 开启子进程 子进程退出 发送一个signal给父进程 supervise 是二进制文件代表父进程
弊端
解决不了进程假死问题 仅仅监控进程是否还活着
语义监控
错误日志监控
相对通用的解决方案
数据波动监控
解决方案
优秀开源监控框架