共计 5222 个字符,预计需要花费 14 分钟才能阅读完成。
导读 | ngxtop 实时解析 nginx 访问日志,并且将处理结果输出到终端,功能类似于系统命令 top,所以这个软件起名 ngxtop。有了 ngxtop,你可以实时了解到当前 nginx 的访问状况,再也不需要 tail 日志看屏幕刷新,由于 ngxtop 是 python 编写,我们使用 pip 安装,本文先介绍 pip 的一些用法。 |
Pip 类似 RedHat 里面的 yum,安装 Python 包非常方便。本节详细介绍 pip 的安装、以及使用方法。
Pip 下载地址:https://pypi.python.org/pypi/pip/8.1.2
下载最新版的 pip 上传到服务器的 /usr/local/src 目录下
cd /usr/local/src/
tar zxvf pip-8.1.2.tar.gz
cd pip-8.1.2
python setup.py install
报错:缺少模块 setuptools
Traceback (most recent call last):
File “setup.py”, line 6, in <module>
from setuptools import setup, find_packages
ImportError: No module named setuptools
解决:安装 setuptools 模块
地址:https://pypi.python.org/pypi/setuptools
使用命令直接安装 setuptools 模块:
wget https://bootstrap.pypa.io/ez_setup.py -O - | python
上图可以安装 setuptools 已经正确安装,然后重新安装 pip
安装完成如下图:
检测 pip 是否安装成功,查看 pip 版本:
[root@zabbix pip-8.1.2]# pip -V
pip 8.1.2 from /usr/lib/python2.6/site-packages/pip-8.1.2-py2.6.egg (python 2.6)
# pip install SomePackage
[...]
Successfully installed SomePackage
# pip show --files SomePackage
Name: SomePackage
Version: 1.0
Location: /my/env/lib/pythonx.x/site-packages
Files:
../somepackage/__init__.py
[...]
pip list --outdated
# 可以看到图中有一个警告信息,告诉我们系统自带的 python 将在新版的 pip 失去支持,建议升级 python 版本。
# pip install --upgrade SomePackage
[...]
Found existing installation: SomePackage 1.0
Uninstalling SomePackage:
Successfully uninstalled SomePackage
Running setup.py install for SomePackage
Successfully installed SomePackage
$ pip uninstall SomePackage
Uninstalling SomePackage:
/my/env/lib/pythonx.x/site-packages/somepackage
Proceed (y/n)? y
Successfully uninstalled SomePackage
pip install redis
pip uninstall redis
# pip --help
Usage:
pip <command> [options]
Commands:
install 安装包.
uninstall 卸载包.
freeze 按着一定格式输出已安装包列表
list 列出已安装包.
show 显示包详细信息.
search 搜索包,类似 yum 里的 search.
wheel Build wheels from your requirements.
zip 不推荐. Zip individual packages.
unzip 不推荐. Unzip individual packages.
bundle 不推荐. Create pybundles.
help 当前帮助.
General Options:
-h, --help 显示帮助.
-v, --verbose 更多的输出,最多可以使用 3 次
-V, --version 现实版本信息然后退出.
-q, --quiet 最少的输出.
--log-file <path> 覆盖的方式记录 verbose 错误日志,默认文件:/root/.pip/pip.log
--log <path> 不覆盖记录 verbose 输出的日志.
--proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port.
--timeout <sec> 连接超时时间 (默认 15 秒).
--exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
--cert <path> 证书.
ngxtop 实时解析 nginx 访问日志,并且将处理结果输出到终端,功能类似于系统命令 top,所以这个软件起名 ngxtop。有了 ngxtop,你可以实时了解到当前 nginx 的访问状况,再也不需要 tail 日志看屏幕刷新。
ngxtop 项目地址:https://github.com/lebinh/ngxtop
4.2.1、pip 安装
pip install ngxtop
# 看到上图表示已经安装成功
4.2.2、源码安装 ngxtop
pip uninstall ngxtop
# 如果已经 pip 安装
cd /usr/loca/src
wget https://github.com/lebinh/ngxtop/archive/master.zip -O ngxtop-master.zip
unzip ngxtop-master.zip && cd ngxtop-master
python setup.py install
# 看到上图提示表示 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
ngxtop -c /opt/nginx/conf/nginx.conf
ngxtop -c /opt/nginx/conf/nginx.conf
top remote_addr
ngxtop -i 'status == 404' print request status
ngxtop -n 20
ssh user@remote_server tail -f /var/log/apache2/access.log | ngxtop -f common
报错意思是说 ngxin 执行文件要加到 PATH 路径中,加软链接
ln -s /opt/ngixn/sbin/nginx /sbin
# 修改环境变量
# vim /etc/profile
export PATH=$PATH:/opt/nginx/sbin
source /etc/profile