通过ngxtop实时监控web server的访问情况

标签: ngxtop 实时 监控 | 发表时间:2014-04-03 01:12 | 作者:xuyaqun
出处:http://blog.csdn.net
      关于对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

运行几秒就报错了,该问题已想开发者反馈
Traceback (most recent call last):
  File "/usr/local/bin/ngxtop", line 11, in <module>
    sys.exit(main())
  File "build/bdist.linux-x86_64/egg/ngxtop/ngxtop.py", line 495, in main
  File "build/bdist.linux-x86_64/egg/ngxtop/ngxtop.py", line 463, in process
  File "build/bdist.linux-x86_64/egg/ngxtop/ngxtop.py", line 357, in process_log
  File "build/bdist.linux-x86_64/egg/ngxtop/ngxtop.py", line 305, in process

sqlite3.ProgrammingError: library routine called out of sequence





作者:xuyaqun 发表于2014-4-2 17:12:25 原文链接
阅读:108 评论:0 查看评论

相关 [ngxtop 实时 监控] 推荐:

通过ngxtop实时监控web server的访问情况

- - CSDN博客系统运维推荐文章
ngxtop现在虽然还有些问题,如本文最后,但开源才15天,值得期待. 安装后python2.7所在路径. 为保持python2.4不变,建立python2.7的软连接指向python2.7所在路径. 2、安装setuptools. 3.1、通过pip安装ngxtop,因为源在国外,可能下载、安装过程会很慢.

Nginx日志实时监控、排查整理工具 - ngxtop

- - VPS侦探
要实时查看日志文件变动我们首先想到的应该是tail -f /path/to/log,但是这样看网站的访问日志是相当崩溃的,好一点可以写个脚本进行筛选,但是大部分人还是不擅长的,今天 VPS侦探就推荐给大家一个Nginx日志工具: ngxtop. 说起top工具有很多如: iftop、htop、ntop等,今天说的ngxtop功能也毫不逊色,不仅能实时监控Nginx日志的访问还可以对以前的日志进行排查整理.

Oracle11g使用sql_monitor实时监控sql

- - CSDN博客推荐文章
Oracle 11g sql_Monitor的实时监控. 在 Oracle  Database  11g 中,v$session 视图增加了一些新的字段,这其中包括SQL_EXEC_START 和 SQL_EXEC_ID. 这两个字段实际上代表了 Oracle 11g 的一个新特性:实时的 SQL 监视(Real Time SQL Monitoring).

mongodb 实时监控工具motop

- - 运维生存时间
mongodb实时监控工具,可以同时对多个MongoDB服务器进行监控. 项目地址:https://github.com/tart/motop 使用. 使用easy_install安装 # wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python # easy_install motop.

Spring Boot + WebSocket 实时监控异常

- - 掘金 后端
原文:cnblogs.com/jae-tech/p/15409340.html. 此异常非彼异常,标题所说的异常是业务上的异常. 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理. 因为需要服务端主动向客户端发送消息,所以很容易的就想到了用WebSocket来实现这一功能.

实时监控Android设备网络封包

- - UC技术博客
对Android网络抓包分析,一般是使用tcpdump抓个文件,再到PC用Wireshark打开分析. 能不能达到直接使用Wireshark的效果. 答案是可以的,至少已经非常接近了. 实现起来很简单,原理就是将tcpdump的数据重定向到网络端口,再通过管道(pipe)转到wireshark就可以了.

Linux 系统实时监控的瑞士军刀 - Glances

- - 开源软件 - ITeye博客
早些时候,我们提到过有很多可以用来监视系统性能的 Linux  系统监视工具. 但我们估计,或许更多的用户会倾向与绝大多数 Linux 发行版都带的工具 ( top 命令). top 命令是 Linux 下的一个实时任务管理器, 同时也是用于在  GNU/Linux 发行版中寻找系统性能方面的瓶颈,并帮助我们作出正确操作的常用系统监视工具.

安装 log.io 实时日志监控工具

- - vpsee.com
日志是个好东西,对技术人员来说写日志能纪录成长,分享经验;对机器来说纪录日志能及时发现错误,为日后的排错提供信息. 如果还在一台机器上用 tail -f 监听单个日志或者 用 multitail 监听多个日志也太 out 了,我们需要一种工具能纪录上百台机器、不同类型的日志,并最好能汇集到一个界面里方便查看,最好还是实时的.

如何做实时监控?—— 参考 Spring Boot 实现

- - Juven Xu
随着 微服务的流行,相比较以前一个大型应用程序搞定所有需求,我们现在更倾向于把大型应用程序切分成多个微服务,服务之间通过 RPC 调用. 微服务架构的好处非常多,例如稳定的服务变化较少,不会被非稳定服务所影响;不同的服务更方便交给不同的人管理;发布、扩容等操作也更加有针对性. 不过这也不是没有代价的,额外的成本最主要的可能就是运维成本.

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

- - UC技术博客
UAE(UC App Engine)是一个UC内部的PaaS平台,总体架构有点类似CloudFoundry,包括:. 快速部署:支持Node.js、Play!、PHP等框架. 信息透明:运维过程、系统状态、业务状况. 灰度试错:IP灰度、地域灰度. 基础服务:key-value存储、MySQL高可用、图片平台等.