通過ngxtop即時監控web server的訪問情況

來源:互聯網
上載者:User

      關於對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





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.