使用Python指令碼寫日誌記錄叢集資訊
阿新 • • 發佈:2021-08-20
使用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')