Stack Overflow 如何监控之 2018 版
本文介绍了 Stack Overflow 当下(2018)的监控技术栈。
- 监控是什么?是裸眼时不时扫头上那三五台大电视屏幕,是被开发搞的飞起的上线事故应急响应,如此种种。得操心监控阈值设定,高了不行,低了不行,节假日要换个阈值,有时候又没法自动化。
- 监控什么?三大类:日志,健康检查,监控指标。
- 日志: 主程序错误丢到 Windows 套餐的 Opserver,其他服务像 Redis,Elasticsearch,SQLServer 做本地 disk logging + log rotation。HAProxy 会把负载均衡的服务的总体流量和响应时间记下来,排查问题时很有用。默认的 HAProxy 日志中会有以下四个数据:
- TR: Time a client took to send us the request (fairly useless when keepalive is in play)
- Tw: Time spent waiting in queues
- Tc: Time spent waiting to connect to the web server
- Tr: Time the web server took to fully render a response
- 健康检查。绿色(ok),红色(not-ok),红色(不正常了),灰色(不晓得啥事情)。负载均衡会根据这个分派流量到健康的节点去。健康检查有可能会做的很频繁,几秒或者一分钟一次不等。每个数据中心有两个 ISP 用来做冗余,一个主,一个备。他们使用 Pingdom 做全球 ping 监控。
- 监控指标:time series data。
- Alert:一个内部的告警平台Bosun,外加 PagerDuty 找 OnCall
- Bosun: 用 Go 写的 agent 程序,使用 OpenTSDB 做后端时间序列存储。他们会把一个 alert 近期的监控 pattern 记录下来,这样子会很容易发现这个 pattern。
- Grafana:监控面板。
- 网站加载:https://teststackoverflow.com/
- MiniProfiler:对每个请求做低精度的 profile,看哪个函数调用耗时
- 接下来的优化
- 做一个服务的健康依赖链条。
衍生思考:这位作者正在做的事情其实就是我在公司做的事情。对于存在依赖链条的多服务的监控,一个树形的服务健康面版对于 Ops 的重要性不言而喻。他的 HealthResult/HealthStatus 定义的没问题,HealthResult 里面可以再带上些 Playbook,Pagerduty 什么的还可以加速异常的处理。