前提
最近公司在孵化一个 App 项目,由于项目时间紧、需求变动大、开发迭代频繁,不可避免的后端经常出问题,现在比较尴尬的问题有:
- 后端虽然部署了报警机制,但是非 500 错误的话是不会通知开发人员的,因此无法判断是否有用户遇到了业务流程问题;
- 哪怕有报警机制,也很难第一时间定位到是哪个用户、用什么手机型、提交了什么内容;
- 在某些关键逻辑(如支付),我们工程师会自己写相关的程序日志,当前每天都要定点去手动排查,工作量不小。
考虑的解决方案
为了解决以上问题,我想通过 nginx log 的方式,把用户的所有请求都记录下来,然后统一分析 log,在 log 里获取需要定位的数据。这样就能对整个项目全盘掌控,没有盲点。这也是将此计划命名为「天眼」的原因
因此想尝试搭建 ELK(Elasticsearch & Logstash & Kibana)搜集所有的 log 日志。但通过网上查找的资料(自建ELK vs 日志服务(SLS)全方位对比)发现阿里云现在的日志服务成本更低,性价比更高,因此尝试使用阿里云的方案。
准备工作
首先,当前需要修改 nginx 的配置,把需要搜集的用户信息在 log_format 里记录下来。
log_format access escape=json '$remote_addr\t$remote_user\t[$time_local]\t"$request"\t$status\t$bytes_sent\t'
'"$http_referer"\t"$http_user_agent"\t"$http_cookie"\t"$request_body"';
access_log /var/log/nginx/[项目名]-access.log access;
client_body_buffer_size 1024k
注意:
- log_format 后面必须跟上 escape=json,不然显示的中文会是乱码
- nginx 的 client_body_buffer_size 要设置为 1024k,不然 post 的数据过大可能记录不了
其次,访问此地址,给自己的 ECS 安装相应的 logtail 采集工具。
最后,根据阿里云的视频教程:ECS 日志采集 做好相关的配置(看视频 + 动手大约 10 分钟能完成配置)
再然后,就没然后了,直接去后台看搜集到的内容吧。
至此,整体的部署+调试不超过 45 分钟,性价比真的很高,有兴趣的朋友也可以玩玩看。
使用体验
目前试用了两台,整体感觉很不错,高效且日志同步快,唯一的不足可能就是此产品只能对阿里云的 ECS,使用其他的主机集成会比较麻烦。
网友评论