记一次shell 将进程数据写入mysql的监控

mac2024-05-26  31

一、背景 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包数量) 四、做定时任务 定时任务写绝对路径,相对路径可能不会运行

 

最新回复(0)