Ngxtop实时解析nginx访问日志,并且将处理结果输出到终端,功能类似于系统命令top,所以这个软件起名ngxtop。有了ngxtop,你可以实时了解到当前nginx的访问状况,再也不需要tail日志看屏幕刷新。
首先在 Linux 系统中安装依赖库pip(ngxtop是用python编写的)。
1.安装ngxtop
#yum install python python-pip -y
#yum install ngxtop -y
2. ngxtop使用详解
# ngxtop --help ngxtop - ad-hoc query for nginx access log. Usage: ngxtop [options] ngxtop [options] (print|top|avg|sum) <var> ... ngxtop info ngxtop [options] query <query> ... Options: -l <file>, --access-log <file> 需要分析的访问日志 -f <format>, --log-format <format> log_format指令指定的日志格式 [默认: combined] --no-follow ngxtop default behavior is to ignore current lines in log and only watch for new lines as they are written to the access log. Use this flag to tell ngxtop to process the current content of the access log instead. -t <seconds>, --interval <seconds> report interval when running in follow mode [default: 2.0] -g <var>, --group-by <var> 根据变量分组 [默认: request_path] -w <var>, --having <expr> having clause [default: 1] -o <var>, --order-by <var> 排序 [默认: count] -n <number>, --limit <number> 显示的条数 [default: 10] -a <exp> ..., --a <exp> ... add exp (must be aggregation exp: sum, avg, min, max, etc.) into output -v, --verbose 更多的输出 -d, --debug print every line and parsed record -h, --help 当前帮助信息. --version 输出版本信息. 高级选项: -c <file>, --config <file> 运行ngxtop解析nginx配置文件 -i <filter-expression>, --filter <filter-expression> filter in, records satisfied given expression are processed. -p <filter-expression>, --pre-filter <filter-expression> in-filter expression to check in pre-parsing phase. 范例: All examples read nginx config file for access log location and format. If you want to specify the access log file and / or log format, use the -f and -a options. "top" like view of nginx requests $ ngxtop 404前十的请求 $ ngxtop top request_path --filter ‘status == 404‘ 总流量前十的请求 $ ngxtop --order-by ‘avg(bytes_sent) * count‘ 访问量前十的ip地址 $ ngxtop --group-by remote_addr 输出400以上状态吗的请求以及请求来源 $ ngxtop -i ‘status >= 400‘ print request status http_referer Average body bytes sent of 200 responses of requested path begin with ‘foo‘: $ ngxtop avg bytes_sent --filter ‘status == 200 and request_path.startswith("foo")‘ 使用common日志格式分析远程服务器Apache访问日志 $ ssh remote tail -f /var/log/apache2/access.log | ngxtop -f common
- -l : 指定日志文件的完整路径 (Nginx 或 Apache2)
- -f : 日志格式
- --no-follow: 处理当前已经写入的日志文件,而不是实时处理新添加到日志文件的日志
- -t : 更新频率
- -n : 显示行号
- -o : 排序规则(默认是访问计数)
- -a ..., --a ...: 添加表达式(一般是聚合表达式如: sum, avg, min, max 等)到输出中。
- -v: 输出详细信息
- -i : 只处理符合规则的记录
以下是一些内置变量,他们的含义不言自明。使用 ngxtop info 命令也可以查看到可使用的内置变量名
- body_bytes_sent
- http_referer
- http_usera_gent
- remote_addr
- remote_user
- request
- status
- time_local
ngxtop print request http_user_agent remote_addr -l /usr/local/nginx/logs/access.log
3. ngxtop实例
3.1 实时状态
# ngxtop -c /usr/local/nginx/conf/nginx.conf
3.2 访问量前十的IP
#ngxtop -c /usr/local/nginx/conf/nginx.conf top remote_addr
4. 注意事项
4.1 ngxtop单条命令无法执行,提示如下错误提示时:
Error: Access log file or format was not set and nginx config file cannot be detected. Perhaps nginx is not in your PATH?
方法一:软连接
ln -sv /usr/local/nginx/sbin/nginx /sbin/
方法二:修改环境变量
# vim /etc/profile
export PATH=$PATH:/usr/local/nginx/sbin
# source /etc/profile
方法三:指定配置文件
# ngxtop -c /usr/local/nginx/conf/nginx.conf 或者还需要指定访问日志文件 -l /usr/local/nginx/logs/access.log
当提示 Error: access log file "logs/accss.log" does not exist 时,修改一下nginx.conf的日志存放位置,将其改成绝对路径后即可。
4.2 虚拟主机配置文件必须在nginx.conf主配置中
一般情况下,我们会将虚拟主机单独写到一个配置文件中,然后nginx.conf做个include。例如我们站点www.ttlsa.com
配置文件:/usr/local/nginx-1.5.2/conf/vhost/www.ttlsa.com.conf
再nginx.conf的http段中添加include vhost/*.conf