ngxtop:在命令行实时监控 Nginx 的神器

拜拜、爱过 提交于 2020-03-03 15:24:44

ngxtop:在命令行实时监控 Nginx 的神器

原创:Linux中国 https://linux.cn/article-3205-1.html
本文地址:https://linux.cn/article-3205-1.html

2014-6-16 15:00    评论: 8 收藏: 3 分享: 11    

Nginx网站服务器在生产环境中运行的时候需要进行实时监控。实际上,诸如Nagios, Zabbix, Munin 的网络监控软件是支持 Nginx 监控的。

如果你不需要以上软件提供的综合性报告或者长期数据统计功能,只是需要一种快速简便的办法去监控 Nginx 服务器的请求的话,我建议你采用一个叫 ngxtop 的命令行工具。

你马上就会发现 ngxtop 从界面和名称都借鉴了著名的top命令。ngxtop 是通过分析 Nginx 或者其他的日志文件,使用类似 top 命令的界面实时展示出来的。你可以说你知道的其他高端监控工具,但是在简洁这方面 ngxtop 无疑是最好的。简单就意味着不可替代。

本指南中,我将介绍如何使用 ngxtop 实时监控 Nginx 网站服务器。

 

Linux 上安装 ngxtop

首先在 Linux 系统中安装依赖库pip(LCTT译注:ngxtop是用python编写的)。

然后使用如下命令安装 ngxtop。

 
  1. $ sudo pip install ngxtop

 

ngxtop 使用

基本使用方法如下:

 
  1. ngxtop [options]
  2. ngxtop [options] (print|top|avg|sum) <var>
  3. ngxtop info

这里是一些通用选项。

  • -l : 指定日志文件的完整路径 (Nginx 或 Apache2)
  • -f : 日志格式
  • --no-follow: 处理当前已经写入的日志文件,而不是实时处理新添加到日志文件的日志
  • -t : 更新频率
  • -n : 显示行号
  • -o : 排序规则(默认是访问计数)
  • -a ..., --a ...: 添加表达式(一般是聚合表达式如: sum, avg, min, max 等)到输出中。
  • -v: 输出详细信息
  • -i : 只处理符合规则的记录

以下是一些内置变量,他们的含义不言自明。

  • bodybytessend
  • http_referer
  • httpuseragent
  • remote_addr
  • remote_user
  • request
  • status
  • time_local

 

使用 ngxtop 监控 Nginx

ngxtop 默认会从其配置文件 (/etc/nginx/nginx.conf) 中查找 Nginx 日志的地址。所以,监控 Nginx ,运行以下命令即可:

 
  1. $ ngxtop

这将会列出10个 Nginx 服务,按请求数量排序。

显示前20个最频繁的请求:

 
  1. $ ngxtop -n 20

获取Nginx基本信息:

 
  1. $ ngxtop info

你可以自定义显示的变量,简单列出需要显示的变量。使用 "print" 命令显示自定义请求。

 
  1. $ ngxtop print request http_user_agent remote_addr

显示请求最多的客户端IP地址

 
  1. $ ngxtop top remote_addr

显示状态码是404的请求

 
  1. $ ngxtop -i 'status == 404' print request status

除了Nginx,ngtop 还可以处理其他的日志文件,比如 Apache 的访问文件。使用以下命令监控 Apache 服务器:

 
  1. $ tail -f /var/log/apache2/access.log | ngxtop -f common

via: http://xmodulo.com/2014/06/monitor-nginx-web-server-command-line-real-time.html

项目地址:https://github.com/lebinh/ngxtop

----------------------------------------------------第二部分---------------------------------------------

离线nginx日志分析举例:

基本用法:

-l 列出需要离线分析的nginx access日志

-f 列出nginx access日志的日志格式

统计访问量最大URL topN

ngxtop -l access.log  --no-follow -f '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"'

结果:

Summary:
|   count |   avg_bytes_sent |   2xx |   3xx |   4xx |   5xx |
|---------+------------------+-------+-------+-------+-------|
|   50004 |          691.125 | 49969 |     0 |    32 |     3 |

Detailed:
| request_path                |   count |   avg_bytes_sent |   2xx |   3xx |   4xx |   5xx |
|-----------------------------+---------+------------------+-------+-------+-------+-------|
| /                           |   49952 |          635.000 | 49952 |     0 |     0 |     0 |
| /upload                     |      34 |          348.824 |    13 |     0 |    20 |     1 |
| /app/info/refs |      12 |         1144.250 |     2 |     0 |    10 |     0 |

 

统计访问量最大的峰值时间点topN:

ngxtop -l access.log  --no-follow -f '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"' top time_local

结果:

top time_local
| time_local                 |   count |
|----------------------------+---------|
| 20/Jul/2016:15:44:19 +0800 |    3030 |
| 20/Jul/2016:15:44:22 +0800 |    2929 |
| 20/Jul/2016:15:44:25 +0800 |    2926 |
| 20/Jul/2016:15:44:15 +0800 |    2904 |
| 20/Jul/2016:15:44:13 +0800 |    2877 |
| 20/Jul/2016:15:44:16 +0800 |    2873 |
| 20/Jul/2016:15:44:18 +0800 |    2853 |
| 20/Jul/2016:15:44:17 +0800 |    2847 |
| 20/Jul/2016:15:44:23 +0800 |    2834 |
| 20/Jul/2016:15:44:14 +0800 |    2777 |

统计访问量最大的客服端IP topN:

ngxtop -l access.log  --no-follow -f '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"' top remote_addr

结果:

top remote_addr
| remote_addr    |   count |
|----------------+---------|
| 192.168.56.100 |   49952 |
| 192.168.56.2   |      52 |

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!