《运维--PlayBook》更新中.......!请访问: https://ops.cnmysql.com
nginx监控利器ngxtop
Nginx网站服务器在生产环境中运行的时候需要进行实时监控。实际上,诸如Nagios, Zabbix, Munin 的网络监控软件是支持 Nginx 监控的。
如果你不需要以上软件提供的综合性报告或者长期数据统计功能,只是需要一种快速简便的办法去监控 Nginx 服务器的请求的话,我建议你采用一个叫 ngxtop 的命令行工具。
你马上就会发现 ngxtop 从界面和名称都借鉴了著名的top命令。ngxtop 是通过分析 Nginx 或者其他的日志文件,使用类似 top 命令的界面实时展示出来的。你可以说你知道的其他高端监控工具,但是在简洁这方面 ngxtop 无疑是最好的。简单就意味着不可替代。
安装部署ngxtop
1、安装pip
网址:https://pypi.python.org/packages/source/p/pip/
下载
#由于下载pip是基于https协议的,故需要在wget url后面加上--no-check-certificate,否则不能下载
2、安装ngxtop
3、ngxtop 使用
基本语法:
安装过程遇到的错误:
(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
from ngxtop.ngxtop import main
File "/usr/local/lib/python2.7/site-packages/ngxtop/ngxtop.py", line 60, in
import sqlite3
File "/usr/local/lib/python2.7/sqlite3/__init__.py", line 24, in
from dbapi2 import *
File "/usr/local/lib/python2.7/sqlite3/dbapi2.py", line 27, in
from _sqlite3 import *
ImportError: No module named _sqlite3
解决方案:编辑Python-2.7.3/Modules/_sqlite/connection.c加入如下44-57行,然后重新编译python2.7。configure && make && make install
[root@ 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)[root@ Python-2.7.3]# ngxtop -n 20
Error: Access log file or format was not set and nginx config file cannot be detected. Perhaps nginx is not in your PATH?
解决办法:
1.软连接
ln -s /usr/local/nginx/nginx /usr/bin/nginx
2.修改环境变量加入到path里面
vi /etc/profile
PATH=$JAVA_HOME/bin:/usr/local/php/bin:/usr/local/nginx:$PATH
source /etc/profile
3.指定配置文件
ngxtop -c /usr/local/nginx/nginx.conf
Nginx网站服务器在生产环境中运行的时候需要进行实时监控。实际上,诸如Nagios, Zabbix, Munin 的网络监控软件是支持 Nginx 监控的。
如果你不需要以上软件提供的综合性报告或者长期数据统计功能,只是需要一种快速简便的办法去监控 Nginx 服务器的请求的话,我建议你采用一个叫 ngxtop 的命令行工具。
你马上就会发现 ngxtop 从界面和名称都借鉴了著名的top命令。ngxtop 是通过分析 Nginx 或者其他的日志文件,使用类似 top 命令的界面实时展示出来的。你可以说你知道的其他高端监控工具,但是在简洁这方面 ngxtop 无疑是最好的。简单就意味着不可替代。
安装部署ngxtop
1、安装pip
网址:https://pypi.python.org/packages/source/p/pip/
下载
wget https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz --no-check-certificate
#由于下载pip是基于https协议的,故需要在wget url后面加上--no-check-certificate,否则不能下载
tar zxvf pip-1.5.6.tar.gz
cd pip-1.5.6
python setup.py install
cd pip-1.5.6
python setup.py install
2、安装ngxtop
pip install ngxtop
3、ngxtop 使用
基本语法:
ngxtop [options]
ngxtop [options] (print|top|avg|sum) <var>
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 ----列出10个nginx服务器,按请求数量排序
#ngxtop -n 20 ----显示前20个最频繁的请求
#ngxtop info ----获取nginx基本信息
#ngxtop print request http_user_agent remote_addr ---以自定义显示的变量,简单列出需要显示的变量。使用 "print" 命令显示自定义请求。
#ngxtop top remote_addr ----显示请求最多的客户端IP地址
#ngxtop -i 'status == 404' print request status ----显示状态码是404的请求
除了Nginx,ngtop 还可以处理其他的日志文件,比如 Apache 的访问文件。使用以下命令监控 Apache 服务器:
#tail -f /var/log/httpd/access.log | ngxtop -f common
ngxtop [options] (print|top|avg|sum) <var>
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 ----列出10个nginx服务器,按请求数量排序
#ngxtop -n 20 ----显示前20个最频繁的请求
#ngxtop info ----获取nginx基本信息
#ngxtop print request http_user_agent remote_addr ---以自定义显示的变量,简单列出需要显示的变量。使用 "print" 命令显示自定义请求。
#ngxtop top remote_addr ----显示请求最多的客户端IP地址
#ngxtop -i 'status == 404' print request status ----显示状态码是404的请求
除了Nginx,ngtop 还可以处理其他的日志文件,比如 Apache 的访问文件。使用以下命令监控 Apache 服务器:
#tail -f /var/log/httpd/access.log | ngxtop -f common
安装过程遇到的错误:
(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
from ngxtop.ngxtop import main
File "/usr/local/lib/python2.7/site-packages/ngxtop/ngxtop.py", line 60, in
import sqlite3
File "/usr/local/lib/python2.7/sqlite3/__init__.py", line 24, in
from dbapi2 import *
File "/usr/local/lib/python2.7/sqlite3/dbapi2.py", line 27, in
from _sqlite3 import *
ImportError: No module named _sqlite3
解决方案:编辑Python-2.7.3/Modules/_sqlite/connection.c加入如下44-57行,然后重新编译python2.7。configure && make && make install
[root@ 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)[root@ Python-2.7.3]# ngxtop -n 20
Error: Access log file or format was not set and nginx config file cannot be detected. Perhaps nginx is not in your PATH?
解决办法:
1.软连接
ln -s /usr/local/nginx/nginx /usr/bin/nginx
2.修改环境变量加入到path里面
vi /etc/profile
PATH=$JAVA_HOME/bin:/usr/local/php/bin:/usr/local/nginx:$PATH
source /etc/profile
3.指定配置文件
ngxtop -c /usr/local/nginx/nginx.conf
Nginx 的访问控制模块默认就会安装…除非你without … 他的指令和使用方法也超级简单…
指令:
实际上应用:
Nginx 用户访问控制
指令:
allow
语法: allow address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
####
允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。
####
deny
语法: deny address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
####禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。####
语法: allow address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
####
允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。
####
deny
语法: deny address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
####禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。####
实际上应用:
server
{
listen 8080;
server_name seo.xxx.com;
index index.html index.htm index.php;
root /data/seo;
allow 140.206.48.6/32;
allow 58.247.43.226/32;
deny all;
....省略
{
listen 8080;
server_name seo.xxx.com;
index index.html index.htm index.php;
root /data/seo;
allow 140.206.48.6/32;
allow 58.247.43.226/32;
deny all;
....省略
Nginx 用户访问控制
###使用httpd-devel 创建passwd###
[root@i-it seo]# yum install httpd-devel
[root@i-it seo]# mkdir htpasswd
[root@i-it seo]# htpasswd -c htpasswd/control i-it
New password:
Re-type new password:
Adding password for user i-it
###加入配置即可####
auth_basic "LT-COUNT-Control";
#####file 这里要绝对路径####
auth_basic_user_file /usr/local/nginx/conf/htpasswd/control ;
[root@i-it seo]# yum install httpd-devel
[root@i-it seo]# mkdir htpasswd
[root@i-it seo]# htpasswd -c htpasswd/control i-it
New password:
Re-type new password:
Adding password for user i-it
###加入配置即可####
auth_basic "LT-COUNT-Control";
#####file 这里要绝对路径####
auth_basic_user_file /usr/local/nginx/conf/htpasswd/control ;