一、背景
1.jar包运行方式(多个类似的jar包需要运行)
nohup java -cp /opt/jbdl/lib/kafka_to_oracle-oms.jar cn.com.sgcc.jibei.aclineend.KafkaToAclineend >/sga/jbdl/logs/omslogs/aclineend-flink.log &
2.ps -ef|grep kafka_to_oracle-oms.jar 结果
root 2853 1 1 09:22 pts/5 00:07:00 java -cp /opt/jbdl/lib/kafka_to_oracle-oms.jar cn.com.sgcc.jibei.aclineend.KafkaToAclineend
二、实现思路
1、ps -ef|grep kafka_to_oracle-oms.jar>process.txt 的实现脚本
1)vim jar.txt
1.jar
2.jar
3.jar等等
2)vim getprocess_pid.sh
#!/bin/bash
for jar_name in `cat jar.txt`
do
ps -ef|grep ${jar_name} >>process.txt
done
2、实现数据分析写入mysql 的实现脚本
#!/bin/bash
#数据库连接信息
db_param="-h20.42.45.21 -umonitor -pmonitor%123 --port 13306"
#读取文本数据
while read line
do
#获取进程号,空格分隔每行取所需,从1开始
pid=`echo ${line}|awk -F" " '{print$2}'`
#获取jar包名称
jar_name=`echo ${line}|awk -F"" '{print$10}'`
#获取入口类
class_name=`echo ${line}|awk -F"" '{print$11}'`
#获取当前时间,为方便后边计算只获取到分
cur_time=`date +'%Y-%m-%d %H:%M'`
#当字段jar_name不为空时写入mysql
if [ -z ${jar_name} ]; then
echo 'jar_name字段为null'
else
echo "${jar_name}"
#组织sql语句
str_sql="insert into dlm.app_jk_flink2ypt_process values('${pid}','${jar_name}','${class_name}','${cur_time}');"
echo ${str_sql}
#执行sql语句 -e
mysql ${db_param} -e "${str_sql}"
fi
done <process.txt
#因为每次都要按不同时间写入所以写完后数据删除
rm process.txt
三、建表及通过sql监控
1、create table dlm.app_jk_flink2ypt_process(pid varchar(20),jar_name varchar(100),class_name varchar(100),cur_time varchar(100));
2、创建标准表
create table app_jk_pname_standard(jar_name varchar(100),process_num varchar(100) comment '标准进程数量');
3、sql 比较 最新时间的数
select
a.jar_name as 'jar包名称',
a.t as '最新时间',
case when a.total=b.process_num then '正常' else '异常' end as '进程状态',
a.total as '进程数量',
b.process_num as '标准进程数量'
from
(select
jar_name as jar_name,cur_time as t,count(*) as total from
app_jk_flink2ypt_process group by jar_name,cur_time order by cur_time desc)
a left join app_jk_pname_standard b
on a.jar_name=b.jar_name order by a.t desc (limit n=jar包数量)
四、做定时任务
定时任务写绝对路径,相对路径可能不会运行