开发者社区活动,使用SODBASE产品的程序员现在可以领礼品啦
功能:监测某些进程是否在运行
1.建立数据采集脚本
vi monitor.sh
t=`ps aux | grep myprogram | wc -l`
curl -d "username=admin&password=cep&modelspacename=firstuser&streamname=monitor.input&data=appnum:${t},machine:16&datatypes=integer,string" http://192.168.1.10:16111/sodbase-cep-server-webservice-1.0.1/insertevent
其中的192.168.1.10换成自己CEP Server的IP地址
加入crontab
crontab -e
*/2 * * * * nohup sh /home/user/monitor.sh
2. CEP模型
可以用Studio建模,就一个级联输入,一个Filter,一个打印输出。
vi monitor.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GraphModelData>
<CEPSoftwareVersion>2</CEPSoftwareVersion>
<inputAdaptors>
<inputAdaptorClassName>com.sodbase.inputadaptor.StubInputAdaptor</inputAdaptorClassName>
<adaptorParams>monitor.input</adaptorParams>
<isExternal>false</isExternal>
</inputAdaptors>
<SODSQLs>CREATE QUERY monitor SELECT * FROM T1:monitor.input PATTERN T1 WITHIN 0 </SODSQLs>
<outputAdaptors>
<isOutputAsSelection>true</isOutputAsSelection>
<outputAdaptorClassName>com.sodbase.outputadaptor.PrintEventOutputAdaptor</outputAdaptorClassName>
<adaptorParams>false</adaptorParams>
<adaptorParams>true</adaptorParams>
<isExternal>false</isExternal>
<queryName>monitor</queryName>
</outputAdaptors>
<modelName>monitor</modelName>
<modelVersion>1.0</modelVersion>
<modelDescription></modelDescription>
</GraphModelData>
在SODBASE CEP Admin的bin目录下
运行命令
./xmltosoddata.sh -i monitor.xml -o monitor.soddata
也可以在Studio中建模
安装运行CEP模型,用firstuser用户
./installmodel.sh -h 192.168.1.10 -P 16111 -f "monitor.soddata" -u firstuser -p cep
./startmodel.sh -h 192.168.1.10 -P 16111 -m monitor -v 1.0 -u firstuser -p cep
3.稍复杂的多行数据采集
wc命令就输出一行数据,向ls的命令会输出多行数据,有个简单的方法,处理如下
vi monitor.sh
ls -l | awk '{print "curl -d\"username=admin&password=cep&modelspacename=firstuser&streamname=monitor.input&data=filename:"$1",machine:16,command:ls&datatypes=string,string,string\" http://192.168.1.10:16111/sodbase-cep-server-webservice-1.0.1/insertevent"}'> /home/user/event.sh
sh /home/user/event.sh
ls -l | awk '{print "curl -d \"username=admin&password=cep&modelspacename=firstuser&streamname=monitor.input&data={\\\"d1\\\":\\\""$0"\\\",\\\"machine\\\":\\\"16\\\",\\\"command\\\":\\\"ls\\\"}\" http://192.168.1.10:16111/sodbase-cep-server-webservice-1.0.1/insertEventJson"}' >/home/user/event.sh
sh /home/user/event.sh
当然,大量数据的传输还是建议网络直连编程实现。