-
问题来源:
Kafka服务出现访问异常
-
问题分析:
查看Broker日志,JVM进程在没有任何异常的情况下,直接被调用shutdownhook,退出应用。
从Kafka服务来看,无法确诊问题。通常此类状态是由于OS中运行的监控管理进程或者其他服务发送kill信号将进程杀掉。如果能够找出发送信号的进程,就可以进 一步分析原因。那么如何查找出“罪魁祸首”?
-
查找“罪魁祸首”
The Linux Audit Subsystem is a system to Collect information regarding events occurring on the system(s) 。借助OS审计日志可以找出是否有其他进程,什么进程,什么时候对Kafka的Broker进程发送什么信号导致Kafka的Broker进程退出。那么该如何操作呢?
-
首先确保审计服务正常
使用 service auditd status 查看审计服务的运行情况
如果运行异常,可使用service auditd restart 重启服务 -
在审计服务中添加审计kill操作的审计规则
auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k my_temporary_kill_audit
添加完毕后,可以使用auditctl -l命令查看是否添加成功[root@yj01 ~]# auditctl -l No rules [root@yj01 ~]# auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k my_temporary_kill_audit [root@yj01 ~]# auditctl -l -a always,exit -F arch=b64 -S kill,tkill,tgkill -F a1!=0x0 -F key=my_temporary_kill_audit
-
使用脚本kill掉进程以便测试
[root@yj01 ~]# cat kill_test.sh #!/bin/bash p=`ps -ef | grep kafka.Kafka | grep -v grep | awk '{print $2}'` echo "kill ing kafka process $p" kill -9 $p echo $$ echo "killed"
-
测试审计日志信息
-
在kafka的broker进程所在节点运行test.sh,打印如下:
[root@yj01 ~]# date Mon Jan 28 10:55:46 CST 2019 [root@yj01 ~]# sh kill_test.sh kill ing kafka process 687802 688289 killed [root@yj01 ~]# date Mon Jan 28 10:55:50 CST 2019
-
查看审计日志记录的kill信息
使用命令ausearch -k my_temporary_kill_audit
audit_kill查看审计日志,如下可以看出,被kill的进程为687802,与上述日志打印的kafka进程号一致。起16进制为a7eba,与SYSCALl中中的a0一致,起a1表示接收到的为-9,即表示使用“kill -9”命令杀掉的kafka,Broker进程。而执行kill命令的进程为pid为688289,与上述脚本中打印的命令一致。如上信息可以说明是执行的kill_test.sh脚本杀掉了Kafka的broker进程。
-
-
网友评论