背景:nginx安装完成后,怎么才能时时的监控nginx上的信息呢,在命令行下查看实在是太不方便了,所以找一个性能监控工具好些,市面上的监控工具有很多,不是专业的运维来讲,nginx-rrd就够用了,nginx-rrd是nginx中自带的监控工具,不怎么消耗系统资源,所以我打算用nginx-rrd来进行监控
查看命令:/usr/local/nginx/sbin/nginx -V
如果你的环境中没有这个模块,需要重新在安装nginx的安装目录下重新编译,编译的时候需要带ngx_http_stub_status这个参数
我的nginx的安装目录如下图所示;
如果需要重新编译的话,需要先把之前的nginx的目录删除,注意这个目录不是你安装nginx的目录,而是当你安装nginx时,系统默认的安装路径
删除命令:rm -rf /usr/local/nginx/
进入你安装nginx的目录下进行编译
执行命令:./configure --prefix=/usr/local/nginx --with-http_stub_status_module
该命令执行的位置如图;
然后在这个目录下执行编译安装
命令:make && make install
执行完成后,可以去nginx的目录下查看一下,该模块是否安装成功
要去的目录:cd /usr/local/nginx/sbin/
查看命令:./nginx -V
安装好之后,还需要编辑一下nginx的配置文件,不使用nginx默认的配置文件nginx.conf,默认的配置文件可读性不高
配置文件的位置:/usr/local/nginx/conf 如下图所示;
系统的默认的配置文件显示如下;
可以把原来的配置文件备份一份
命令:mv nginx.conf nginx.conf.bak
我修改的配置文件如下,把下面的内容复制粘贴到新建的nginx.conf文件中,新建文件的位置在还是在conf目录下
user root;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 1024;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent "bodybytessent"http_referer” ’
‘“h t t p u s e r a g e n t " " http_user_agent" "httpuseragent""http_x_forwarded_for”’;
access_log /usr/local/nginx/logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
include vhost/*.conf;
}
然后在conf目录下新建文件夹vhost文件夹,作为虚拟主机的配置文件目录
命令:mkdir vhost
在vhost目录下新建该虚拟主机的配置文件
命令:vi default.conf
配置文件内容如下,详细的代码的功能看右侧注释
server{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location = /nginx_status{ # 配置访问路径,即uri
stub_status on; # 开启该模块
access_log off; # 关闭日志
allow 101.106.102.129; # 允许访问的ip,即白名单ip
allow 127.0.0.1;
deny all; # 拒绝白名单ip以外的ip访问
}
}
配置文件改好后,可以测试配置文件是否修改正确,正确时,显示如下图;
命令:./nginx -t 在/usr/local/nginx/sbin/目录下
然后启动,测试一下模块是否安装的没有问题,如下图所示,没有问题
说明:请求的时候,输入的是你的IP地址加上你配置文件default.conf中 location后的配置名称
启动也是在sbin目录下,配置上环境变量后才可以在任意目录下启动
启动命令:./nginx -c /usr/local/nginx/conf/nginx.conf 这种启动是加载配置文件启动的意思
启动位置:/usr/local/nginx/sbin/
查看启动状态的命令:netstat -lntp |grep nginx 或者ps -ef|gerp nginx
说明:
Active connections 当前活动的连接数量(包括等待的)
accepts 已接收的连接总数
handled 已处理的连接总数
requests 当前的请求总数
Reading nginx正在读取的连接数量
Writing nginx正在响应的连接数量
Waiting 当前空闲的连接数量
如上,通过这些简单的参数可以看到nginx当前的连接信息。在高并发场景下,可以根据Active connections参数判断当前的一个并发数量,Reading 参数则可以告诉我们当前nginx是否繁忙。当然,这只是最简单的一个nginx的监控方式,参数也就只有那么几个。但这些都是其他更高级的监控工具的基础,所以了解这些基础监控也是有必要的。
由于ngxtop是python编写的,我们可以使用pip进行安装。如果你的机器上没有安装pip,需要先把pip装上
安装命令: 1. yum install -y epel-release
2. yum install -y python-pip
然后通过pip安装ngxtop
安装命令:pip install ngxtop
ngxtop的使用说明;
命令:ngxtop --help
说明:上面help中的说明如下;
Options:
-l , --access-log # 需要分析的访问日志
-f , --log-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 , --interval report interval when running in follow mode [default: 2.0] # 指定监控信息刷新的间隔,单位为秒 [默认: 2.0]
-g , --group-by # 根据变量分组 [默认: request_path]
-w , --having # 具备子句 [默认: 1] having clause [default: 1]
-o , --order-by # 排序 [默认: count]
-n , --limit # 显示的条数 [默认: 10]
-a …, --a … add exp (must be aggregation exp: sum, avg, min, max, etc.) into output # 添加聚合表达式到输出信息中
-v, --verbose # 更多的输出
-d, --debug # 打印所有行和解析记录,debug
-h, --help # 当前帮助信息.
--version # 输出版本信息
指定nginx的配置文件进行启动:
启动命令:ngxtop -c /usr/local/nginx/conf/nginx.conf
注:Summary相当于请求的概览信息,Detailed就自然是请求的详细信息了。2xx、3xx、4xx以及5xx,都是表示的http状态。avg_bytes_sent表示请求所发送的字节数平均值,request_path则是请求路径,count表示请求的总次数。
默认情况下,ngxtop不会显示启动ngxtop之前的请求信息,只会显示ngxtop启动之后新的请求信息。所以我们可以到浏览器上刷新一下,随便访问一些页面,人为制造一些请求。如下图,这时就可以看到ngxtop成功监控到了请求信息:
我访问的网址:
http://192.168.234.138
http://192.168.234.138/index.html
我们可以通过选项来指定一些条件,例如我希望只显示http状态是200的,就可以使用-i进行指定:
命令:ngxtop -c /usr/local/nginx/conf/nginx.conf -i ‘status == 200’
刚开始执行时显示如下;
我去页面去请求几次访问后,显示如下;
例如我希望显示访问最多的ip,就可以使用-g进行指定:
命令:ngxtop -c /usr/local/nginx/conf/nginx.conf -g remote_addr
在上两小节中,我们介绍了两个基础的nginx工具,能够监控连接信息和请求信息,它们都是基于命令行的。本小节则介绍一个图形化的nginx监控工具,该工具就是nginx-rrd。nginx-rrd 也是 Nginx 官方推荐的一款 Nginx 监控工具,利用 nginx-rrd 可以很方便的生成图表,它可以监控连接信息和请求信息。
nginx-rrd 官网地址如下:
https://www.nginx.com/resources/wiki/modules/rrd_graph/
那么我们接下来就看看如何安装并使用nginx-rrd吧。nginx-rrd部分功能是基于上两小节所介绍的工具实现的,所以在安装nginx-rrd之前需要根据上两节的介绍安装好所需的工具。由于nginx-rrd是使用php实现的,所以在此之前,我们得先安装好php的运行环境,以及安装rrdtool的相关依赖,我这里使用yum进行安装
安装命令: 1. yum install -y php php-gd php-soap php-mbstring php-xmlrpc php-dom php-fpm
2. yum install -y perl rrdtool perl-libwww-perl libwww-perl perl-rrdtool
安装好php运行环境以及rrdtool后,我们还需要把nginx和php-fpm进行一个整合。修改php-fpm的配置文件,将文件中的user和group修改为与nginx.conf中的user一致:
命令:vi /etc/php-fpm.d/www.conf
修改这两个参数都为root,这个地方以你nginx.conf配置文件中用户为主
user = root
group = root
还需要让nginx支持解析php,在虚拟主机配置文件中,增加如下内容:
需要增加的内容:
location ~ .php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}
增加内容的位置:在这个配置文件的server{} 中配置
配置好后,启动php-fpm服务,并且重新加载nginx:
启动命令:systemctl start php-fpm
查看状态的命令:netstat -lntp |grep 9000
重启nginx的命令:nginx -s reload
然后在虚拟主机配置文件中所指向的网站根目录下,新建一个简单的php文件,用于测试nginx是否已经能够正常解析php代码:
命令:vi /usr/local/nginx/html/index.php
添加内容:
<?php phpinfo(); ?>
接着到浏览器上进行访问,如下则是代表nginx已经能够支持解析php了:
输入:http://192.168.234.138/index.php
现在我们就可以开始安装nginx-rrd了,首先使用如下命令,下载nginx-rrd的压缩包:
进入到src目录下,命令:cd /usr/local/src/
执行下载命令:wget http://soft.vpser.net/status/nginx-rrd/nginx-rrd-0.1.4.tgz
解压这个文件;
解压命令:tar -zvxf nginx-rrd-0.1.4.tgz
然后进入到解压后的目录下
命令:cd nginx-rrd-0.1.4
在该目录下分别执行
命令: 1. cp etc/nginx-rrd.conf /etc
2. cp usr/sbin/* /usr/sbin
3. rm -rf /usr/local/nginx/html/index.php # 删除之前测试用的php文件
4. cp html/index.php /usr/local/nginx/html/
修改nginx-rrd配置文件,配置数据存储目录以及图片存储目录,如下:
命令:vi /etc/nginx-rrd.conf
RRD_DIR="/usr/local/nginx/html/nginx-rrd"; # 数据存储目录
WWW_DIR="/usr/local/nginx/html"; # 图片存储目录
配置完之后,我们还需要使用 crontab 新建定时任务,用于定时执行nginx-rrd的两个脚本,因为nginx-rrd需要定时去采集数据才能实现一个监控的效果:
编辑命令:crontab -e
查看命令:crontab -l
我们这里设定的定时任务是每一分钟执行一次,可以使用如下命令查看定时任务是否有在执行:
命令:tail -f /var/log/cron
确认定时任务有正常执行后,我们来安装apache的一个压测工具,方便于我们生成大量的请求数据:
安装命令:yum -y install httpd-tools
安装完成后,使用以下命令,对nginx进行压测,可以多执行几次:
命令:ab -n 10000 -c 10 http://127.0.0.1/index.html
命令说明:
-n 指定总共发送多少个请求
-c 指定同时发送多少个请求
使用压测工具产生了一些请求数据后,到浏览器上访问nginx-rrd的index.php文件,效果如下: