一个简单的「天眼」计划

前提

最近公司在孵化一个 App 项目,由于项目时间紧、需求变动大、开发迭代频繁,不可避免的后端经常出问题,现在比较尴尬的问题有:

  1. 后端虽然部署了报警机制,但是非 500 错误的话是不会通知开发人员的,因此无法判断是否有用户遇到了业务流程问题;
  2. 哪怕有报警机制,也很难第一时间定位到是哪个用户、用什么手机型、提交了什么内容;
  3. 在某些关键逻辑(如支付),我们工程师会自己写相关的程序日志,当前每天都要定点去手动排查,工作量不小。

考虑的解决方案

为了解决以上问题,我想通过 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

注意:

  1. log_format 后面必须跟上 escape=json,不然显示的中文会是乱码
  2. nginx 的 client_body_buffer_size 要设置为 1024k,不然 post 的数据过大可能记录不了

其次,访问此地址,给自己的 ECS 安装相应的 logtail 采集工具。

最后,根据阿里云的视频教程:ECS 日志采集 做好相关的配置(看视频 + 动手大约 10 分钟能完成配置)

再然后,就没然后了,直接去后台看搜集到的内容吧。

至此,整体的部署+调试不超过 45 分钟,性价比真的很高,有兴趣的朋友也可以玩玩看。

使用体验

目前试用了两台,整体感觉很不错,高效且日志同步快,唯一的不足可能就是此产品只能对阿里云的 ECS,使用其他的主机集成会比较麻烦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,523评论 25 708
  • 1 上午,对门邻居邀约一起出去转转。带着小王子一起出门来到了大街上。 新年的大街上似乎比平时更热闹,我们来到一处人...
    阳子驿站阅读 454评论 0 6
  • 注意:此篇文章略长,七千多字。其中有一些细节貌似不重要却需要认真思考,所以请找个安静时段阅读。 文章大纲:三条基础...
    cae6f12ddc62阅读 638评论 4 4
  • 生命是一个循序渐进的过程,我们不能着急,不能透支,不能焦虑。 别人家孩子的各种好,总是让我隐隐地不安,觉得小凡不会...
    阿梦的世界阅读 164评论 0 0