nginx实时监视访问状态(ngxtop)

凉白开 Nginx1159,94810字数 3264阅读10分52秒阅读模式

ngxtop实时解析nginx访问日志,并且将处理结果输出到终端,功能类似于系统命令top,所以这个软件起名ngxtop。有了ngxtop,你可以实时了解到当前nginx的访问状况,再也不需要tail日志看屏幕刷新。

1. 安装ngxtop

1.1 源码安装文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# wget https://github.com/lebinh/ngxtop/archive/master.zip -O ngxtop-master.zip 
# unzip ngxtop-master.zip 
# cd ngxtop-master
# python setup.py install
...省略....
Finished processing dependencies for ngxtop==0.0.1

//看到如上输出表示安装成功,安装过程需要网络支持文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

1.2 ngxtop安装文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

pip install ngxtop

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

3. ngxtop实例

3.1 实时状态文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# ngxtop -c /usr/local/nginx-1.5.2/conf/nginx.conf
nginx

ngxtop

3.2 访问量前十的IP文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# ngxtop -c /usr/local/nginx-1.5.2/conf/nginx.conf top remote_addr
nginx

ngxtop

4. 注意事项

4.1 ngxtop单条命令无法执行文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# ngxtop 
Error: Access log file or format was not set and nginx 
config file cannot be detected. Perhaps nginx is not in your PATH?

意识说nginx执行文件要加到PATH路径中,
方法一:软连接文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# ln -s /usr/local/nginx-1.5.2/sbin/nginx /sbin/

方法二:修改环境变量文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# vim /etc/profile
export PATH=$PATH:/usr/local/nginx-1.5.2/sbin

# source /etc/profile

方法三:指定配置文件文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

# ngxtop -c /usr/local/nginx-1.5.2/conf/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文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

这种情况下ngxtop不支持,必须要保证所有配置都在nginx.conf中才行。不知道是否我哪里理解不对,如果是的话,知道的兄弟留言告知。本人在此感激不尽。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

5. 结束

ngxtop非常实用,值得推荐。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

项目地址:https://github.com/lebinh/ngxtop文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/ 文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
凉白开
  • 本文由 发表于 24/04/2014 01:30:04
  • 转载请务必保留本文链接:https://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/
评论  11  访客  9
    • Aceslup
      Aceslup 9

      如何离线安装哦。

        • 凉白开
          凉白开 9

          @ Aceslup 源码安装便是离线安装。

            • Aceslup
              Aceslup 9

              @ 凉白开 已经装上,缺少好多东西。一步步补装上去才知道呢。

          • 月永月
            月永月 9

            我nginx.conf 配置了虚拟主机,多个日志输出,执行ngxtop 报错
            Multiple access logs detected in configuration:
            1. /logs/nginx/admin.log
            2. /logs/nginx/mobile.log
            3. /logs/nginx/access.log
            Traceback (most recent call last):
            File "/usr/bin/ngxtop", line 9, in <module>
            load_entry_point(‘ngxtop==0.0.2’, ‘console_scripts’, ‘ngxtop’)()
            File "/usr/lib/python2.6/site-packages/ngxtop-0.0.2-py2.6.egg/ngxtop/ngxtop.py", line 385, in main
            process(args)
            File "/usr/lib/python2.6/site-packages/ngxtop-0.0.2-py2.6.egg/ngxtop/ngxtop.py", line 352, in process
            access_log, log_format = detect_log_config(arguments)
            File "/usr/lib/python2.6/site-packages/ngxtop-0.0.2-py2.6.egg/ngxtop/config_parser.py", line 118, in detect_log_config
            log_path = choose_one(list(access_logs.keys()), ‘Select access log file to process: ‘)
            File "/usr/lib/python2.6/site-packages/ngxtop-0.0.2-py2.6.egg/ngxtop/utils.py", line 11, in choose_one
            selected = raw_input(prompt)
            UnboundLocalError: local variable ‘raw_input’ referenced before assignment

            用ngxtop -l /logs/nginx/mobile.log 就没有正常输出结果 一直如下,没有数据
            Summary:
            | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx |
            |———+——————+——-+——-+——-+——-|
            | 0 | | 0 | 0 | 0 | 0 |

            Detailed:
            | request_path | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx |
            |—————-+———+——————+——-+——-+——-+——-|

            • 求助
              求助 9

              [root@b-nfss conf]# ngxtop -c /usr/local/nginx/conf/nginx.conf
              Error: Access log file is not provided and ngxtop cannot detect it from your config file (/usr/local/nginx/conf/nginx.conf).

              • 张冠李戴
                张冠李戴 9

                您好,请教一个问题! 在成功安装后,执行:ngxtop info 或 ngxtop -c /usr/local/nginx/conf/nginx.conf 时报错:Error: Access log file is not provided and ngxtop cannot detect it from your config file (/usr/local/nginx/conf/nginx.conf). 这是什么原因,该怎么解决

                  • 运维生存时间
                    运维生存时间 9

                    @ 张冠李戴 4.2 虚拟主机配置文件必须在nginx.conf主配置中
                    一般情况下,我们会将虚拟主机单独写到一个配置文件中,然后nginx.conf做个include。例如我们站点www.ttlsa.com
                    配置文件:/usr/local/nginx-1.5.2/conf/vhost/www.ttlsa.com.conf

                    请看文章中的这段话。

                评论已关闭!