使用Python脚本写日志记录集群信息
背景
最近本地hadoop集群经常出现ssh连不上,ping不通的问题,而且根目录会突然空间不足,于是领到了一个集群运维的任务。那运维的第一步就是先写个脚本记录下系统的信息,帮助定位问题发生在什么地方。写这篇博客主要参考了以下链接:
https://www.cnblogs.com/linuxchao/p/linuxchao-log.html
https://blog.csdn.net/pansaky/article/details/90710751
官方文档:https://docs.python.org/zh-cn/3/howto/logging.html#logging-basic-tutorial
文本过滤:https://blog.csdn.net/lingfengliujian/article/details/78276894
py定时启动:https://www.jb51.net/article/170416.htm
python脚本定时启动
注意python需要用绝对路径
sudo vim /etc/crontab
*/2 * * * * root /usr/bin/python3 /ght/cus_hadoop_log/log_1.py
重启服务
service cron restart
/etc/init.d/cron restart
#查看进程
sudo service cron status
master的路径在/home/ljq/cus_hadoop_log
原来配置到根目录,但应该是写权限的问题,日志并不能被记录到log文件中
scp传输文件
scp -r ./cus_hadoop_log/ ljq@cluster-slave1:~/
scp -r ./cus_hadoop_log/ ljq@cluster-slave2:~/
网卡 eno1 enp4s0
内容
大概就是看看本机的ip地址有没有发生变化,以及ping其他主机还有外网能否ping通,如果出现问题就写到warn.log文件中
结果
(base) ljq@cluster-master:~/cus_hadoop_log$ cat warn.log
2021-07-30 04:10:11,751 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 07:22:11,789 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 07:24:11,937 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 08:12:11,541 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
(base) ljq@cluster-slave1:~/cus_hadoop_log$ cat warn.log
2021-07-31 07:08:11,534 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 07:26:12,003 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 07:28:11,188 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
ljq@cluster-slave2:~/cus_hadoop_log$ cat warn.log
2021-07-29 22:46:11,820 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 07:10:16,086 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
2021-07-31 07:20:14,336 - root - WARNING - bilibili.com-【外网ping不通!请检查网络】
warn日志里面看到都有不一致的时间发生外网ping不通的情况……这定位不到问题所在呀…
遇到的问题
win和linux回车不一致报错
-bash: ./log_0.py: /usr/bin/python^M: bad interpreter: No such file or directory
解决办法:
vim xxx.py
#然后输入下面内容,注意不是在插入模式里输入
:set ff=unix
这样还是太麻烦了,后来了解到根本原因是编码格式,我用的是Vscode,直接在界面右下角修改:

ascii和utf8编码问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 42: ordinal not in range(128)
解决:在代码首部添加以下代码
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
浙公网安备 33010602011771号