利用ngxtop实时监控nginx的访问情况

关于对nginx web server的实时访问的实时监控问题,我很久之前就想实现的,现在虽有nginx自带的status扩展,但那是全局的,无法细分到vhost,并且提供的metric也很少,加之目前是通过cacti每5分钟取nginx status,实时性也不是很好,记得前一阵为maptail兴奋一点,以为能够解决我的问题,可是他只是漂亮的在地图上显示实时用户的ip地理位置信息,没有其他功能了,不过他的思想很重要---"tail -f log",如今的ngxtop其实也是这种思想,把功能做的丰富了点,我在今天测试的时候遇到一些问题,现在把过程整理下来,备忘也供大家参考。

ngxtop现在虽然还有些问题,如本文最后,但开源才15天,值得期待!
Real-time metrics for nginx server:https://github.com/lebinh/ngxtop 1、安装python
tar xzvf Python-2.7.3
cd Python-2.7.3
./configure --prefix=/usr/local/python2.7
make
make install

安装后python2.7所在路径
/usr/local/python2.7/bin/python2.7

为保持python2.4不变,建立python2.7的软连接指向python2.7所在路径
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7
ln -s /usr/bin/python2.7 /usr/bin/python

2、安装setuptools
wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
chmod +x setuptools-0.6c11-py2.7.egg
sh setuptools-0.6c11-py2.7.egg

3.1、通过pip安装ngxtop,因为源在国外,可能下载、安装过程会很慢
安装pip
https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb
tar xzvf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install

安装ngxtop
/usr/local/bin/pip install ngxtop

3.2、直接通过ngxtop源码安装
wget https://github.com/lebinh/ngxtop/archive/1c200d51fbae7824a30159714669146d6b214210.zip
unzip ngxtop-1c200d51fbae7824a30159714669146d6b214210.zip
cd ngxtop-1c200d51fbae7824a30159714669146d6b214210
python setup.py install

如果提示没有pyparsing的话,下载安装即可
wget https://pypi.python.org/packages/source/p/pyparsing/pyparsing-2.0.1.zip
unzip pyparsing-2.0.1.zip
cd pyparsing-2.0.1
python setup.py instal

4、使用及效果截图
如果不出效果debug一下:
ngxtop -t 1 -l /var/log/nginx/access.log -d

默认输出:
ngxtop -t 1 -l /var/log/nginx/access.log

显示请求最多的ip和request
ngxtop -t 1 -l /var/log/nginx/access.log top remote_addr request

远程实时分析(这个很实用呦,不用每台server都安装ngxtop)
sshpass -f pass.txt ssh 192.168.0.100 tail -f /var/log/nginx/nginx.log|ngxtop

其他用法

ngxtop --help

5、测试过程遇到的问题
(1)执行ngxtop会报如下错误:ImportError: No module named _sqlite3
# /usr/local/bin/ngxtop --help
Traceback (most recent call last):
File "/usr/local/bin/ngxtop", line 7, in <module>
from ngxtop.ngxtop import main
File "/usr/local/lib/python2.7/site-packages/ngxtop/ngxtop.py", line 60, in <module>
import sqlite3
File "/usr/local/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
from dbapi2 import *
File "/usr/local/lib/python2.7/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: No module named _sqlite3

解决方案:编辑Python-2.7.3/Modules/_sqlite/connection.c加入如下44-57行,然后重新编译python2.7即可
[root@admin200 Python-2.7.3]# vim Modules/_sqlite/connection.c
38 #if SQLITE_VERSION_NUMBER >= 3003008
39 #ifndef SQLITE_OMIT_LOAD_EXTENSION
40 #define HAVE_LOAD_EXTENSION
41 #endif
42 #endif
43
44 /*** add by lai for **/
45 #ifdef SQLITE_INT64_TYPE
46 typedef SQLITE_INT64_TYPE sqlite_int64;
47 typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
48 #elif defined(_MSC_VER) || defined(__BORLANDC__)
49 typedef __int64 sqlite_int64;
50 typedef unsigned __int64 sqlite_uint64;
51 #else
52 typedef long long int sqlite_int64;
53 typedef unsigned long long int sqlite_uint64;
54 #endif
55 typedef sqlite_int64 sqlite3_int64;
56 typedef sqlite_uint64 sqlite3_uint64;
57 /*** end ***/
58
59
60 static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level);
61 static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self);
62

(2)、无法启动ngxtop,报错:OSError: [Errno 2] No such file or directory
[root@admin200 nginx]# /usr/local/bin/ngxtop
Traceback (most recent call last):
File "/usr/local/bin/ngxtop", line 11, in <module>
sys.exit(main())
File "/usr/local/python2.7/lib/python2.7/site-packages/ngxtop/ngxtop.py", line 446, in main
process(args)
File "/usr/local/python2.7/lib/python2.7/site-packages/ngxtop/ngxtop.py", line 408, in process
config = get_nginx_conf_path()
File "/usr/local/python2.7/lib/python2.7/site-packages/ngxtop/ngxtop.py", line 120, in get_nginx_conf_path
proc = subprocess.Popen(['nginx', '-V'], stderr=subprocess.PIPE)
File "/usr/local/python2.7/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/local/python2.7/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
[root@admin200 nginx]#

解决方法:因nginx为自定义安装目录,ngxtop需要查找nginx的pid,故需要将nginx路径加入环境变量,或者做个符号链接
cp /usr/local/nginx/sbin/nginx /usr/bin/
或者
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

(3)远程实时分析其他server的log
sshpass -f pass.txt ssh 192.168.0.100 tail -f /var/log/nginx/bod-access.log|ngxtop

时间: 2024-10-24 16:03:05

利用ngxtop实时监控nginx的访问情况的相关文章

java-请问大神如何监控mysql的访问情况

问题描述 请问大神如何监控mysql的访问情况 我弄了个小安卓app,客户端和服务器都是java语言写的,用的是对象关系映射操作mysql数据库服务器用的tomcat 有一个查询功能需要查询数据库并返回一段数据,但返回的 总是空内容,我在powershell手动输入命令语句是可以查询到我要的结果 请问大神如何才能看到java代码给数据库执行的命令语句,或者说数据库接收到的命令 不然都无法确定错误的原因了 另外我载了了navicat 里面有个服务器监控,结果 进程列表为空 啥都看不了,,不知道是不

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

ngxtop:在命令行实时监控 Nginx 的神器 Nginx网站服务器在生产环境中运行的时候需要进行实时监控.实际上,诸如Nagios, Zabbix, Munin 的网络监控软件是支持 Nginx 监控的. 如果你不需要以上软件提供的综合性报告或者长期数据统计功能,只是需要一种快速简便的办法去监控 Nginx 服务器的请求的话,我建议你采用一个叫 ngxtop 的命令行工具. 你马上就会发现 ngxtop 从界面和名称都借鉴了著名的top命令.ngxtop 是通过分析 Nginx 或者其他的

基于Storm的Nginx log实时监控系统

[编者按]Hadoop的缺点也和它的优点同样鲜明--延迟大,响应缓慢,运维复杂.被人广受诟病,但是 有需求就有创造,在Hadoop基本奠定了大数据霸主地位的时候,很多的开源项目都是以弥补Hadoop的实时性为目标而被创造出来,Storm正是在这个时候横空出世,Storm是一个免费开源.分布式.高容错的实时计算系统.Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求. 以下为原文: 背景UAE(UC App Engine)是一个UC内部的PaaS平台,总体架构有点类

基于Lua+Kafka+Heka的Nginx Log实时监控系统

背景 在我们的系统架构中,Nginx作为所有HTTP请求的入口,是非常重要的一层.每天产生大量的Nginx Access Log,闲置在硬盘上实在是太浪费资源了.所以,能不能把Nginx日志利用起来,实时监控每个业务的访问趋势.用户行为.请求质量和后端异常呢,这就是本文要探讨的主题. 目的 1. 错误码告警(499.500.502和504): 2. upstream_response_time超时告警: 3. request_time超时告警: 4. 数据分析: 关于错误和超时监控有一点要考虑的

余杭区公务员上网情况实时监控

本报记者 朱杨健 本报通讯员 范建荣 和"禁烟令"让老烟枪们直哆嗦一样,昨天起正式在余杭区党政机关实行的"五条禁令",也让公务员收紧了神经.这五条禁令执行起来,说难不难,说容易却也不容易. 余杭区党政机关的五条禁令是省级机关效能建设"四条禁令".转变工作作风的具体延伸.具体包括:一.不参与赌博:二.不收受礼金礼卡礼券:三.不在工作日内中餐饮酒:四.不酒后驾车:五.不在上班时间上网炒股玩游戏.如有违反上述承诺之一的,责任人将主动辞去党内外职务,并接

用nginx-rrd监控nginx访问数【转】

可以使用cacti.nagios等监控程序监控nginx服务器,不过有时候不用那么复杂,用nginx-rrd就能完成连接.请求的监控功能. 首先编译安装nginx,注意加载stub_status模块,Nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定 tar xzvf nginx-1.2.0.tar.gz   cd  nginx-1.2.0   ./configure --pref

利用实时监控数据分析麒润联盟扣量的问题

首先,声时一点,本人绝对不是什么联盟的拖.或是和麒润联盟有仇,发此文是经过本人对数据实时监控得出来的. 发此文并无他意.只想告诉做联盟的,不要太黑~! 昨天本人对麒润联盟的数据做了一下观察,发现了一些问题.我知道这篇文章如果有机会被ADMIN5审核通过.那么对麒润联盟多少有些影响.这里我说声抱歉~!下面说说具体情况...本站日IP三W+...目前做了麒润联盟弹窗业务.按常理计算的话..三WIP,,弹窗一天的收入最低也有一百二十元收入..但是,一天弹下来,得到的钱是80元左右.也就是说,麒润联盟扣

Python实时监控文件3种方法

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监

python实现实时监控文件的方法_python

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监