DLog日志分析系统(笔记)


DLog日志分析系统(笔记)

 

主要功能:系统监控、流量统计、调用链跟踪、性能分析、debug调试、异常预警等

1、记录日志

在程序入口init.php引入error.class.php,该类判断了日志的开关阀值参数,如设置阀值将记录在log-time-limit.log文件中,该类通过自定义错误处理程序set_error_handler来捕获所有错误,在所有callUrl、curl_file_get_contents、memcache链接失败、mq链接失败、sql执行 的地方埋点记录日志,通过register_shutdown_function函数注册程序结束时日志收集方法,将所有日志通过error_log方法写入文件。

2、配置

通过url参数控制日志开关和记录日志的阀值

设置curl和mysql时间阀值(打开监控,默认关闭)

3、采集日志

通过 定时任务+shell脚本 采集日志,shell 脚本通过 php cli 执行ReadLog.php 代码读取文件并往 rabbitmq 写入,shell 脚本维护一个时间锁,如果 log_lock.log 文件中记录的时间戳超过120秒没更新(进程死掉),将kill掉这个进程并重启进程。

4、收集日志

通过定时任务curl执行log/Parse/pull方法收集日志,将日志从rabbitmq取出并处理,再把处理后的日志存入mongodb。mongodb使用docker环境,并采用分片存储。

5、DLog使用说明

包括日志展示、分类、统计、预警


备注

日志格式:json

{
    "time":"2017-10-26 09:49:19",
    "microtime":1508982559.5836,
    "content":{
        "traceId":"0",
        "fun":"ErrorHandleTmp::shutdownHandler",
        "url":"http://devcommon2.meilele.com/project_mll/order_ajax/?step=service_fee",
        "responseCode":200,
        "method":"POST",
        "execTime":0.94511985778809,
        "timeout":"",
        "useMemory":2328744,
        "requestHeaders":"",
        "requestParams":Object{...},
        "errorMessage":"",
        "xhprof":[

        ]
    },
    "server":"MLL-20160215NBU",
    "client":"127.0.0.1",
    "level":"info",
    "project":"mll",
    "type":"REQUEST",
    "requestId":"3d409eddbac79eb2946806a6aab10948f3f9cf65",
    "message":"请求",
    "other":{
        "refer":"http://devmll2.meilele.com/flow/?step=pre_checkout"
    }
}
参数名 类型 必需 描述
time datetime 日志记录时间
microtime time 带微妙时间戳
server string 服务器hostname
client string 客户端ip
level string 日志级别(emergency 系统不可用,alert 必须立刻采取行动,critical 紧急情况,error 运行时出现的错误,warning 出现非错误性的异常,notice 一般性重要的事件,info 重要事件,debug DEBUG)
project string 项目名称 (common, mll, zx, help, store, seller, wap, factory, erp, ipad, third_api, logi, supply)
type string 类型(REQUEST 请求,CURL 接口,RULE 规则,MYSQL MYSQL,MQ MQ,MEMCACHE 缓存,SYSTEM 系统)
requestId string 请求唯一id
content.traceId string 日志层级id
content.url string url、规则名等
content.responseCode integer 响应码
content.url string url、规则名等
content.method string 请求方式
content.requestParams string 请求参数

其他未备注参数为非必须,参数还可以自行扩展

mongodb

use system_log;
db;
db.log.ensureIndex({"content.url":1});
db.log.ensureIndex({"requestId":1});
db.log.ensureIndex({"content.responseCode":-1});
db.log.ensureIndex({"microtime":-1});
db.log.ensureIndex({"time":-1,"type":1,"level":1,"project":1});

db.createCollection("log_count_hour", {capped:true, max:5000000});
db.log_count_hour.createIndex({"date": -1,"project":1,"type": 1});
db.user.ensureIndex({email:1},{unique:true})
docker run --name mongo3.4 -p 27017:27017 -v /home/db:/data/db -d mongo:latest --wiredTigerCacheSizeGB 5
注意:设置wiredTigerCacheSizeGB,避免占用宿主所有内存

常常是最后一把钥匙打开了门