nginx访问量分析

涉及的技术

curl webservice echart

需求描述:

nginx 配置status模块后,可以获取到访问量信息如下:

Active connections: 391 
server accepts handled requests
 47866689 47866689 279005479 
Reading: 0 Writing: 2 Waiting: 389 

需要分析如何将该数据以图形方式展示:
nginx访问量分析_第1张图片

思路分析

计划每分钟读取一次该状态值,存储到数据库,然后通过echart进行显示。

1、数据存储

通过spring+hibernate,可以很方便的将数据存储到数据库:
nginx访问量分析_第2张图片

2、webservice接口

通过webservice,将日志存储接口暴露出来,便于通过各类运维工具访问。

3、测试webservice

通过SoapUI测试webservice:
nginx访问量分析_第3张图片

4、使用curl调用webservice

命令示例:

curl -o ws调用结果.txt -H "Content-Type:text/xml;charset=UTF-8;SOAPAction:\"urn:execute\"" -d ws数据.txt ws地址

参数解析:
-o ws调用结果.txt:指ws的调用返回结果;
-H "Content-Type:text/xml;charset=UTF-8;SOAPAction:\"urn:execute\"":设置调用webservice时的header信息,参考soapui发送端raw里的内容,主要包括Content-Type,SOAPAction;
-d ws数据.txt:指定webservice调用参数:...
ws地址:指soapui中地址栏内的地址;

5、通过curl解析nginx的状态值:

通过curl解析nginx状态值:

#!/bin/bash 
HOST="127.0.0.1"
PORT="80" 
curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'

6、完整curl调用命令

下面扩展curl命令,读取nginx状态,动态生成webservice的请求文件,并自动调用webservice:
脚本名称:ngx_status.sh

#!/bin/bash 
# nginx状态监控
# 计划任务 crontab -l
# * * * * * nohup sh /usr/local/nginx/sbin/ngx_status.sh &
HOST="127.0.0.1"
PORT="8080" 
LOG_FILE=/tmp/ngx_status.log
REQ_FILE=/tmp/ngx_status_req.xml
RES_FILE=/tmp/ngx_status_res.xml
WS_PATH=http://192.168.6.105:8080/test/services/testWSProxyService.testWSProxyServiceHttpSoap11Endpoint/

# 获取nginx状态
curl -o $LOG_FILE "http://$HOST:$PORT/status/"

# 生成请求xml
echo '' > $REQ_FILE
echo '' >> $REQ_FILE
echo '> $REQ_FILE

echo ",\"mon_date\":\"`date +'%Y-%m-%dT%H:%M:%S'`\"" >> $REQ_FILE
cat /tmp/ngx_status.log | grep 'Active' | awk '{print ",\"active_sl\":" $NF}' >> $REQ_FILE
cat /tmp/ngx_status.log | grep 'Reading' | awk '{print ",\"reading_sl\":" $2}' >> $REQ_FILE
cat /tmp/ngx_status.log | grep 'Writing' | awk '{print ",\"writing_sl\":" $4}' >> $REQ_FILE
cat /tmp/ngx_status.log | grep 'Waiting' | awk '{print ",\"waiting_sl\":" $6}' >> $REQ_FILE

echo '}}]]>' >> $REQ_FILE
echo '' >> $REQ_FILE

# 发送请求
curl -o $RES_FILE -H "Content-Type:text/xml;charset=UTF-8;SOAPAction:\"urn:execute\"" -d @$REQ_FILE $WS_PATH

7、echart数据展示

可以参考echart官网示例:
https://echarts.baidu.com/examples/editor.html?c=area-stack
nginx访问量分析_第4张图片

至此结束。

你可能感兴趣的:(java)