美文网首页
一个简单的「天眼」计划

一个简单的「天眼」计划

作者: 郑经铧Monkey | 来源:发表于2018-06-03 19:07 被阅读167次

    前提

    最近公司在孵化一个 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,使用其他的主机集成会比较麻烦。

    相关文章

      网友评论

          本文标题:一个简单的「天眼」计划

          本文链接:https://www.haomeiwen.com/subject/rpzjsftx.html