文档章节

ngxtop的使用

gaolongquan
 gaolongquan
发布于 2016/09/01 16:56
字数 1209
阅读 181
收藏 1

前几天看见有运维类的微信公众号在介绍这个东西,嗯,都是抄来抄去的,还是要靠自己读懂程序,硬伤啊。

日志的收集、分析、统计,这些对于运维来说都很重要的。

我们从一开始的GREP\AWK\SED命令,到大牛们写工具,直到现在,都是ELK或阿里云了。。

所以我现在介绍的就是一款工具,实时分析NGINX日志,可惜不能生成报告,这比GOACCESS差多了。

官网地址 https://github.com/lebinh/ngxtop

[root@longquan software]# git clone https://github.com/lebinh/ngxtop.git
[root@longquan software]# cd ngxtop/
[root@longquan ngxtop]# python setup.py install
Traceback (most recent call last):
  File "setup.py", line 1, in <module>
    from setuptools import setup
ImportError: No module named setuptools
yum install python-pip -y   //会自动安装setuptools
[root@longquan ngxtop]# python setup.py install
安装成功倒数一行是Finished processing dependencies for ngxtop==0.0.2
安装完成后,就可以使用ngxtop --help查看怎么使用了
这里参考一下 http://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa
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  添加表达式(一般是聚合表达式如: sum, avg, min, max 等)到输出中。
 
    -v, --verbose  更多的输出   //这里我发现了使用了SQLITE数据库
    -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访问日志  //我想远程查看NGINX日志,不过出错了,IOError: [Errno 4] Interrupted system call
    $ ssh remote tail -f /var/log/apache2/access.log | ngxtop -f common

[root@longquan vhost]# ngxtop
Error: Access log file is not provided and ngxtop cannot detect it from your config file (/usr/local/nginx/conf/nginx.conf).
提示没有日志,因为我们一般都 include vhost/*.conf;是吧?
OK,没事,那我们把虚拟主机搬过来呗。但是我有很多虚拟主机怎么办,看起来不太科学。仔细看帮助,其实这个软件也跟我们一个高级选项呢!
那好,我们还是按照include的方式加载虚拟主机。
cat /usr/local/nginx/conf/vhost/qiye.glq.com.conf 
       log_format  access2 '$remote_addr - $remote_user [$time_local] $host '
                                   '"$request" $status $body_bytes_sent "$request_body" $request_time '
                                   '"$http_referer" "$http_user_agent" $http_x_forwarded_for '
                                   '$upstream_addr $upstream_response_time';
server {
    listen 80;
    server_name qiye.glq.com;
    ......
    access_log  /data/wwwlogs/qiye.glq.com.log access2;
这里主要有2点要注意!
1、log_format写到虚拟主机配置文件里来,当然拉,你不能写到不SERVER里面啊。这里我们取名为access2
2、日志写绝对路径,不写?报错你就会写了。

然后执行命令
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf 
我的虚拟主机只有一个日志文件,所以不会出现 Multiple access logs detected in configuration:
就需要指定ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf 就能实时显示了。
根据帮助写几个常用命令。
每10秒统计一次
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf  -t 10  
默认就显示10行,我们显示多点
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf  -n 20
处理当前已经写入的日志文件,而不是实时处理新添加到日志文件的日志     
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf   --no-follow
你可以自定义显示的变量,简单列出需要显示的变量。使用 "print" 命令显示自定义请求,就是你日志格式里面的变量啦。
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf  print request http_user_agent remote_addr
显示请求最多的客户端IP地址
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf top remote_addr
显示状态码是404的请求
ngxtop -c /usr/local/nginx/conf/vhost/qiye.glq.com.conf -i 'status == 404' print request status

其他还是靠自己去根据帮助,实际应用了。

© 著作权归作者所有

上一篇: goaccess的使用
下一篇: NGINX配置HTTP2
gaolongquan
粉丝 11
博文 145
码字总数 53464
作品 0
厦门
运维
私信 提问
如何从命令行实时监控Nginx Web服务器

一旦Nginx Web服务器在生产环境下搭建并运行起来,你就希望能够实时监测其活动。实际上,普通的网络监控软件都可以提供支持实时监控Nginx的功能,比如Nagios、Zabbix和Munin。 不过,如果你不...

梁东升
2016/04/25
0
0
centos nginx 带宽 占用过高优化 ngxtop查看带宽占用详情

最近项目访问量特别大,cpu 内存都没事就是带宽占用特别高.于是查了一些资料写出来 1.首先把图片控制住 在站点的conf文件server中加以下代码控制加载图片的速率 图片加载了100k以后进行限速,...

xiaogg
04/11
0
0
ngxtop:在命令行实时监控 Nginx 的神器

ngxtop:在命令行实时监控 Nginx 的神器 原创:Linux中国 https://linux.cn/article-3205-1.html 本文地址:https://linux.cn/article-3205-1.html 2014-6-16 15:00 评论: 8 收藏: 3 分享: 1......

fdhay
2016/08/29
44
0
Nginx 日志分析及性能排查

原文出处:oschina 最近一直在做性能排查,思路就是根据分析nginx日志,得到响应耗时的url、以及请求时间,再得到这段时间的请求量,并发量,分析是并发的原因,还是本身就比较慢,如果是应用...

oschina
2017/02/28
0
0
ngxtop —— Nginx 访问日志实时解析工具

ngxtop 允许你对 NGINX 的访问日志 (access log) 进行实时解析, 并输出类似 top 的有用信息。

oschina
2014/04/01
48
0

没有更多内容

加载失败,请刷新页面

加载更多

web前端性能优化

js相关 根据js时间线,将js放在最下面加载,先加载DOM,再加载js 懒执行,就是将某些逻辑延迟到使用时再执行。该技术可用于首屏优化,对于某些耗时逻辑并不需要在首屏就使用的,就可以使用懒...

祖达
25分钟前
0
0
websocket通信failed to execute 'send'问题的解决

在建立web socket通信后,发送数据时,出现下图所示现象: 问题代码演示 function TestSockets() { //实例化一个WebSocket对象 var socket = new WebSocket("ws://127.0.0.1:8000/w...

城市之雾
31分钟前
0
0
PHPStorm 如何设置 yaf 代码提示?

下载 php-yaf-doc git clone https://github.com/elad-yosifon/php-yaf-doc.git PHPStorm 如下设置 使用

whoru
32分钟前
0
0
typeorm drop foreign key

1. 问题描述 项目代码中使用typeorm进行mysql的数据操作, 昨天突然部署测试环境发现测试环境数据库的外键都为空了, 导致涉及的整个系统不可用. 2. 问题探究 尝试复现 mysqldump 线上数据, 然...

jimmywa
33分钟前
2
0
好程序员web前端开发测验之css部分

好程序员web前端开发测验之css部分Front End Web Development Quiz CSS 部分问题与解答 Q: CSS 属性是否区分大小写? <p><font size="3">  ul {</font></p> <p><font size="3">  MaRGin:......

好程序员IT
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部