access_log
error_log
日志输出
通过 nginx 配置即可对某一个 server 进行日志的记录。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
log_format
参数 | 说明 | 示例 |
---|---|---|
$remote_addr |
客户端地址 | 211.28.65.253 |
$remote_user |
客户端用户名称 | — |
$time_local |
访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$request |
请求的 URI 和 HTTP 协议 | “GET /article-10000.html HTTP/1.1” |
$http_host |
请求地址,即浏览器中你输入的地址(IP 或域名) | www.it300.com、192.168.100.100 |
$status |
HTTP 请求状态 | 200 |
$upstream_status |
upstream 状态 | 200 |
$body_bytes_sent |
发送给客户端文件内容大小 | 1547 |
$http_referer |
url 跳转来源 | https://www.baidu.com/ |
$http_user_agent |
用户终端浏览器等信息 | “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$ssl_protocol |
SSL 协议版本 | TLSv1 |
$ssl_cipher |
交换数据中的算法 | RC4-SHA |
$upstream_addr |
后台 upstream 的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$request_time |
整个请求的总时间 | 0.205 |
$upstream_response_time |
请求过程中,upstream 响应时间 | 0.002 |
日志切割
通过命令
access.log
mv access.log bak.log
nginx -s reopen
这样子就是将原来的日志文件 copy 了一份,然后重新加载 nginx 的配置。
这个操作可以实现日志切割拆分,但是很僵硬,我们平时可能就需要每周、每天拆分一次。
通过 shell 脚本
将上面的命令放到 sh 文件中,通过定时任务,每天执行一下脚本。
日志查看和查询
由于你在看日志的时候,有时候需要实时的查看,所以不能像我们之前一样使用 vim
或者 cat
来查看。
tail
# 查看 access.log 文件的最后10行
tail access.log
# 实时跟踪查看 access.log
tail -f access.log
cat
# 基础命令
# 一次显示整个文件
cat filename
# 创建一个文件
cat > filename
# 将几个文件合并为一个文件
cat file1 file2 > file
语法
-n
由1开始对所有输出的行数编号-b
和-n
相似,只不过对于空白行不编号-s
当遇到有连续两行以上的空白行,就代换为一行的空白行-c <数目>
显示字节数-n <行数>
显示行数
应用
- 1)
cat test.log | tail -n 1000
#输出test.log 文件最后1000行 - 2)
cat -n test.log |grep debug
#得到关键日志的行号 - 3)
cat filename | tail -n +3000 | head -n 1000
#从第3000行开始,显示1000行。即显示3000~3999行 - 4)
cat filename| head -n 3000 | tail -n +1000
#显示1000行到3000行 - 5)
cat -n textfile1 > textfile2
#把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 - 6)
cat -b textfile1 textfile2 >> textfile3
#把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里 - 7)
cat error.log | grep -C 5 'nick' 显示file文件里匹配foo字串那行以及上下5行
cat error.log | grep -B 5 'nick' 显示foo及前5行
cat error.log | grep -A 5 'nick' 显示foo及后5行
使用 cat 和 grep 最常用组合
# 直接查看
cat -n access.log | grep 14:15
# 放到文件中,以便于后续查看
cat -n access.log | grep 14:15 >test.txt