Nginx安装配置

原理
nginx 服务是一个支持高并发,反向代理,并且提供负载均衡的一种轻量级web应用服务器。

在nginx tomcat(java,jvm)架构中
nginx只做请求的转发,不参与代码的计算

nginx手工安装
1.将tengine-1.5.tar.gz包上传到linux新建的tengine文件夹使用tar -zxvf tengine-1.5.tar.gz 进行解压后 使用rm -rf tengine-1.5.tar.gz 删除压缩包
2.使用./configure --prefix=/usr/local/tengine/指定安装路径
3.使用make && make install 进行编译安装
启动nginx
使用安装路径+/sbin/nginx 
例如: /usr/local/tengine/sbin/nginx 
重启:/usr/local/tengine/sbin/nginx/ -s reload
关闭:/usr/local/tengine/sbin/nginx/ -s stop
验证是否启动成功
1.查看端口80  lsof -i:80  netstat -ntlp|grep 80 
2.本地浏览器访问nginx服务  IP:port 
nginx负载均衡配置
在/usr/local/tengine/nginx.conf文件中进行配置
配置内容如下
1.设置拦截规则
location ^~/youcepre(项目名){
    映射url
}
upstream 和映射url一致{
    tomcat列表   可加权重与轮询设置规则(当权重为1:1就是轮询)
}

2.设置巡测规则(由用户触发的规则,自巡测规则)
max_fails=3 fail_timeout=20s;
//如果20s内出现三次错误,则在接下来的20s之内则不会向挂掉的tomcat机器发送请求

check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
//每3s自巡测一次,如果在巡测时,连续发送两次tcp请求都正常则将tomcat挂掉的机器置为up,如果连续发送五次都为fall则将tomcat机器置为down,发送一次tcp连接的超时时间,每超时一次记录一次直到5次


nginx自动化shell代码安装

nginx_status.sh文件代码如下
!/bin/bash
HOST="192.168.10.146"
PORT="80"

#检查nginx进程是否存在
function ping {
//使用下边命令可获取nginx进程id
    /sbin/pidof nginx | wc -l
}
#采集nginx数据
function active {
    /usr/bin/curl "http://$HOST:$PORT/status/nginx_conn_status" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
    /usr/bin/curl "http://$HOST:$PORT/status/nginx_conn_status" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
    /usr/bin/curl "http://$HOST:$PORT/status/nginx_conn_status" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
    /usr/bin/curl "http://$HOST:$PORT/status/nginx_conn_status" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
    /usr/bin/curl "http://$HOST:$PORT/status/nginc_conf+status" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
    /usr/bin/curl "http://$HOST:$PORT/status/nginx_conf_status" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
    /usr/bin/curl "http://$HOST:$PORT/status/nginx_conf_status" 2>/dev/null| awk NR==3 | awk '{print $3}'
}

# 执行function
$1

#NR - Number of Record 当前处理的行是第几行
#NF - Number of Record 当前处理的列是最后一列
#/usr/bin/curl "url" 相当于访问此url

nginx.conf配置文件如下

UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1

手工监控具体实现步骤
1.首先将nginx.conf 和nginx_status.sh 复制到/etc/zabbix/zabbixd.d/目录下
2.重启zabbix-agented
3.在zabbix-server使用如下命令进行测试
zabbix_get -s 客户端ip -p 10050 -k 'nginx_status[accept]'
4.配置模板,监控nginx服务主机

监控原理
zabbix_agent中的配置文件主动上报ip 为zabbix_server的ip 
当服务端想要去通过模板传参获取客户端nginx监控项信息的时候,实质上是将模板中的参数,通过客户端的传参机制传递给了nginx.conf文件中的nginx.conf[*],紧接着这个文件中的客户端nginx_status.sh脚本接受这个参数,通过调用自己脚本中的函数去获取监控项信息 
其中nginx的监控项包括 ping active reading writing waiting handled accepts requests(即进程监控,连接数监控)
reading 指的是nginx接收的请求数,writing指的是处理的请求数 waiting 指的是nginx等待的请求数  重点关注waiting如果waiting不为0,则可能是接收的请求数达到了nginx的上线即nginx的cpu*worker_process

nginx问题定位  通过增加日志upstream_response_time 和request_time
upstream_response_time指的是负载均衡响应时间 , 即tomcat把请求交给代码,代码处理完请求再将请求转发给tomcat的一个时间
request_time 指的是jmeter将请求发给nginx,nginx将请求转发给tomcat,tomcat将请求转发给代码,代码处理完请求在返回给tomcat,tomcat返回给nginx,nginx在返回给jmeter.

监控nginx并发请求数
1.通过awk命令 两种常用 awk '{ print $1 }' | sort -n(按值排序,升序) | uniq -c | sort -nr(-r是翻转) | head -10(显示多少行) //访问ip最多
                     awk '{ print $4}' | sort -r | unip -c | head -10 //并发数
                     awk '{print $9}'| sort -n| uniq -c| sort -nr | head -10 //状态码
                     awk -F "分隔符" print '{ print $2 }' | sort -r | uniq -c | head -10 
2.通过jmeter工具聚合报告倒数第三列throughput查看每秒并发请求数

nginx瓶颈定位分析
A
1.通过查看throughput和99%rt可以分析出问题
2.如果throughput即每秒请求数小于nginx能够接收的上限,rt时间还比较小,证明nginx没问题
B
1.如果rt时间较小,报错率不断上升,经验证tomcat挂了,则继续往后排查,可能是tomcat或代码的问题
C
1.如果rt时间较大,报错率不断上升,则可能是tomcat或者代码的问题,因为只有程序处理请求,如果程序有瓶颈则代码线程就不会释放请求,tomcat就会启动新的线程去处理请求,如果200个线程都占满,则没有请求去接受请求,则只能将请求放到队列中等候,当达到排队请求的上限则会将tomcat托挂掉,jmeter会报连接拒绝的错误,当然也会有连接超时的错误,代码处理请求线程不释放,由于tomcat默认请求连接时间是20s,如果处理请求线程20s都没返回结果,会报连接超时,同样队列中的也会报连接超时
2.如果rt时间较大,报错率不断上升,如果不是tomcat与代码问题,则可能是nginx问题,由于nginx接收请求数达到上限,则剩余请求需要排队等待,如果达到规定时间没有返回,则会报连接超时的错误,增大nginx配置,即增大nginx的cpu个数

查询进程并杀掉进程命令

1.ps -ef | grep 进程名
2.lsof -i:10050(zabbix客户端进程) lsof -i:10051(服务端进程)
3.kill -9 进程pid(单独杀进程)
4.pkill -9 进程名 (批量杀进程)
5.pkill -9 zabbix_ag(杀掉zabbix客户端进程)
6.pkill -9 zabbix_se(杀掉zabbix服务端进程)


查看防火墙以及关闭防火墙

service iptables status(状态)
service iptables stop(停止)
service iptables start(开始)


重启zabbix-agentd服务

service zabbix-agent restart
service zabbix-agent start

服务端测试

zabbix_get -s zabix客户端ip -p 10050 -k nginx.status[accept]


shell自动化创建nginx在zabbix平台的监控(代替手工操作的九步,在一分钟之内完成,甚至少于一分钟)


1.监控Nginx的机器上安装了nginx
2.执行远程同步,即执行create_remote_sync_and_zabbix_agent.sh脚本,脚本执行需要传参,本地路径和远程路径
第一个存放的文件为nginx_status.sh(此脚本用于监控Nginx服务所在机器的情况包括8个函数分别为ping,reading,writing,waiting,handler,accepts,requests,time)第二个存放的文件为nginx.conf(此配置文件中,写了入参的情况和调用的脚本,UserParameter=nginx.conf[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1)
第三个存放的文件为zabbix_agent安装包,包括32位和64位,当执行远程配置时,需要自动化远程主机安装zabbix客户端,前提集群之间免密登录
第四个文件为zabbix_agentd.conf 此文件为zabbix客户端配置文件,将原机器上的zabbix客户端文件删除,使用自己修改的配置文件

3.执行远程自动配置
本地配置的脚本需要获取本地机器的ip,替换hostname,上报服务端的ip.替换Server,ServerActive,还需指定客户端使用的配置文件为、/etc/zabbix/zabbix_agentd.d/*.conf即为nginx.conf传参,还需指定UnsafeUseParameters=1即允许客户端使用参数


自动化执行脚本调用关系

需要两个脚本
第一个脚本nginx_create_remote_sync_and_zabbix_agent.sh调用nginx_remote_create_aync_and_zabbix_agent_auto_config.sh
nginx__create_remote_sync_and_zabbix_agent.sh脚本内容如下
vim ngixn_create_remote_sync_and_zabbix_agent.sh

#!/bin/bash

#init param
sourcePath=$1
remoteTargetPath=$2
zabbix_server_ip=$3
ip=192.168.10.150

shellFileName = nginx_create_remote_sync_and_zabbix_agent_auto_config.sh
shellPath=/root/tool/shell/nginx/remote/create_remote_sync_and_zabbix_agent_config/$shellFileName

#创建远程目标路径
ssh root@ip $remoteTargetPath

#将本地文件同步到远程目标路径
scp -r $sourcePath root@ip $remoteTargetPath 

#将本地自动配置脚本同步到远程目录
scp $shellPath root@ip $remoteTargetPath 

#给同步到远程路径下的shell赋执行权限
ssh root@ip "chmod 755 $remoteTargetPath/$shellFileName"

#远程执行配置shell
ssh root@ip  "sh $remoteTargetPath/$shellFileName $remoteTargetPath $zabbix_server_ip"


第二个脚本nginx_create_remote_sync_and_zabbix_auto_config.sh
vim nginx_create_remote_sync_and_zabbix_auto_config.sh


#!/bin/bash

localPath=$1
zabbix_server_ip=$2

#得到远程主机的本地ip
localIp=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|awk -F ":" '{print $2}')

#使用getconf命令获取系统位数LONG_BIT
bit = 'getconf LONG_BIT'(不是双引号,是执行符号)

# 进入本地目录
cd $localPath
#判断系统位数,安装匹配的zabbix_agent
if [ $bit=32 ];then
    rpm zabbix-agent-3.4.2-1.e16.i686.rpm
else
    rpm zabbix-agent-3.4.2-1.e16.x86_64.rpm
fi
#安装zabbix-agent客户端的依赖包
yum -y install zabbix-agent
#拷贝nginx_status.sh和nginx.conf到/etc/zabbix/zabbix_agentd.d/目录下

cp $localPath/nginx_status.sh nginx.conf /ect/zabbix/zabbix_agentd.d/

#将zabbix原配置文件路径下的zabbix_agentd.conf删除
rm -rf /etc/zabbix/zabbix_agentd.conf 

#将新的zabbix_agentd.conf文件拷贝到zabbix配置文件所在路径

cp $localPath/zabbix_agentd.conf /etc/zabbix/

#对zabbix_agentd.conf做修改

sed -i 's/Server=127.0.0.1/Server='$zabbix_server_ip'/g'   /etc/zabbix/zabbix_agentd.conf

sed -i 's/ServerActive=127.0.0.1/ServerActive='zabbix-server-ip'/g' /etc/zabbix/zabbix_agentd.conf

sed -i 's/Hostname=Zabbix server/'$localIp'/g' /etc/zabbix/zabbix_zabbixd.conf

sed -i 's/# UnsafeUserParameter=0/UnsafeUserParameter=1/g'  /etc/zabbix/zabbix_agentd.d

sed -i '/^# Include/a Include=/etc/zabbix/zabbix_agentd.d/*.conf' /etc/zabbix/zabbix_agentd.conf


#server stop 
pkill -9 zabbix*

#server zabbix-agent start
server zabbix-agent start 

#创建监控模板

#创建监控主机和群组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村东头老杨

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值