涉及的技术
curl webservice echart
需求描述:
nginx 配置status模块后,可以获取到访问量信息如下:
Active connections: 391
server accepts handled requests
47866689 47866689 279005479
Reading: 0 Writing: 2 Waiting: 389
需要分析如何将该数据以图形方式展示:
思路分析
计划每分钟读取一次该状态值,存储到数据库,然后通过echart进行显示。
1、数据存储
通过spring+hibernate,可以很方便的将数据存储到数据库:
2、webservice接口
通过webservice,将日志存储接口暴露出来,便于通过各类运维工具访问。
3、测试webservice
通过SoapUI测试webservice:
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调用参数:<soapenv:Envelope...>...</soapenv:Envelope>
;
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 '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.test.com">' > $REQ_FILE
echo '<soapenv:Header/><soapenv:Body><ws:execute><ws:request>' >> $REQ_FILE
echo '<![CDATA[{"serviceId":"simpleSave","op":"create","schema":"SM_APP_STATUS","body":{"id":"","app_id":102' >> $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 '</ws:request></ws:execute></soapenv:Body></soapenv:Envelope>' >> $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
至此结束。