文章摘要
通过日志信息对RPC服务调用的用户进行监控,提高系统的稳定性。本文简要记录了一下日志分析接口协议的设计与实现.
实现细节
HTTP接口
请求方式: post
请求参数:
- HTTP header
Content-Type=application/json (必须)
HTTP body
{
“log_project_name”:”testhttp”,
“log_message_type”:”request”,
“log_format”:”default”,
“log_from”:”172.0.0.1”,
“log_content”:”2017-06-28 22:39:44,959 [P58,] communicationInfo - {\”cid\”:\”1111\”,\”clientIP\”:\”10.10.10.10\”,\”request\”:\”simpleSearch\”,\”timeAll\”:107,\”respLength\”:55555}”
}
body中为JSON字符串
JSON参数
log_project_name:项目名称 同一个项目使用同一个名称
log_message_type:日志类型request (请求日志),error(错误日志)
log_format:日志格式default
log_from:日志来源机器每台机器写自己的IP作为一个标示
log_content:根据日志类型发送的日志内容(日志内容格式请见下文)
日志文件
读取日志文件(日志内容格式请见下文)
日志格式
日志格式为两种
日志格式为 request
解析类型为 default
日志为一行
示例:
2017-06-21 22:37:44,959 - {"cid":"1111","clientIP":"10.10.10.10","request":"simpleSearch","timeAll":107, "respLength":55555}
请求日志内容格式 分为3块
- 时间开头格式必须为
yyyy-MM-dd HH:mm:ss,SSS
- 分隔符
-
- JSON内容
cid:用户ID
clientIP:客户端IP
request:请求业务类型
timeAll:耗时
respLength:返回大小
注意:json中字段为必填字段若没有值则使用空字符串
日志格式为 error
解析类型为 default
日志可以为多行
示例
2017-06-19 22:54:58,151 InfoThreadPool requestInfo
http://www.eastmoney.com/ open error
错误日志内容格式 分为2块
- 时间开头格式必须为
yyyy-MM-dd HH:mm:ss,SSS
- 错误内容
注意:错误日志读取时,只匹配日志开头是否为此格式的时间,最多读取500行,当行中出现eastmoney
关键字时,停止读取。
需求
每一台服务器的访问情况
LoginHandler
每次登录输出日志- 日志内容字段
cid:用户ID
clientIP:客户端IP
request:请求业务类型
timeAll:耗时
respLength:返回大小
每个用户所做的操作
- 调用Handler的doHandle()时输出日志
cid:用户ID
clientIP:客户端IP
request:请求业务类型
timeAll:耗时
respLength:返回大小
count_info
机房,服务器类型,服务器ip,服务器端口,用户数,时间,备注
area,server_type,server_ip,server_port,count,time,desc
user_log
用户id,客户端ip,客户端端口,服务器ip,服务器端口,请求id,时间,备注
clientid,remote_server,remote_port,server_ip,server_port,request_id,time,desc
文件名
LIST_10.10.10.10_80-1818-443_sys.2017110620.log
request_id为 -1,预留位desc赋值为当前用户数(链接数),每分钟打印一次
2017-10-30 13:26:00.574 - {“clientid”:””,”remote_server”:””,”remote_port”:””,”server_port”:””,”request_id”:-1,”desc”:”500”}
request_id为 -2,预留位desc赋值为链接断线原因
2017-10-30 13:26:00.574 - {“clientid”:”22000000000”,”remote_server”:”10.10.10.10”,”remote_port”:”30040”,”server_port”:”1818”,”request_id”:-2,”desc”:0}
1
2
3
4
5
6
7public static final byte UNKNOWN = 0; //未知
public static final byte WRITE_WAITE_MANY_TIMES = 1; //写等待次数过多
public static final byte FORCE_NO_CANCEL_REQUEST = 2; //强制去除,客户端没有发送取消请求
public static final byte CHANNEL_GROUP_CHECK = 3; //ChannelGroup检查关闭
public static final byte HANDLER_EXCEPTION = 4; //Handler exceptionCaught触发
public static final byte HANDLER_CLOSED = 5; //Handler Closed触发
public static final byte CHANNEL_EXCEPTION = 6; //Handler Closed触发正常打印请求信息
2017-10-30 13:26:00.574 - {“clientid”:”22000000000”,”remote_server”:”10.10.10.10”,”remote_port”:”30040”,”server_port”:”1818”,”request_id”:16066,”desc”:””}
参考资料
logback的使用和logback.xml详解:http://www.cnblogs.com/warking/p/5710303.html
logback.xml配置:http://blog.csdn.net/qq173684423/article/details/53611906
logback配置详解http://blog.csdn.net/haidage/article/details/6794509