久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

通過paramiko模塊遠(yuǎn)程抓取日志

    最近一直在學(xué)習(xí)Python,可是工作中一直缺少機(jī)會用到這塊功能.最近接到一個需求需要拉取6臺客戶端的某一天jetty日志.因為jetty的日志是保存在jetty的log目錄下,以yyyy_mm_dd.stderrout.log的形式保存,所以我們只要創(chuàng)建一個腳本,傳入需要查詢?nèi)罩镜娜掌诤托枰樵內(nèi)罩镜闹鳈C(jī)IP及用戶密碼,就可以將制定主機(jī)的指定日期的日志抓取到本地.

腳本的邏輯并不是很難,先模擬ssh訪問指定主機(jī),在指定目錄下通過find找到指定文件,將該文件通過sftp或scp將文件傳輸至本地.通過shell腳本會非常輕松.為了考驗自己的Python水平,這次我們通過Python的方式進(jìn)行實(shí)現(xiàn).主要用到的就是paramiko模塊.

paramiko是一個可以連接遠(yuǎn)程主機(jī)及上傳下載文件的一個第三方模塊,他基于ssh2協(xié)議.官網(wǎng)地址是http://www.paramiko.org/,安裝的方式非常簡單,通過easy_install paramiko或者在pypi中下載安裝包安裝都可以.

安裝完以后,我們通過之前我的那個實(shí)際案例來初步了解paramiko的遠(yuǎn)程連接和文件下載.

[root@Manatee ~]# cat pytest/paramiko
#!/usr/bin/env Python
import paramiko
import sys
import os
loglist = []
#設(shè)定一個空列表用于存放日志文件名,因為一臺主機(jī)中有多個jetty項目,可能同一天會有多個日志.
date = '2016_01_03'
#傳入需要查詢的日期,這步可以通過參數(shù)傳入,或者讀取配置文件實(shí)現(xiàn)
ip = '192.168.0.1'
#傳入需要查詢的主機(jī)IP,這步可以通過參數(shù)傳入,或者讀取配置文件實(shí)現(xiàn)
remoteuser = 'xxx'
#傳入需要查詢的主機(jī)用戶,這步可以通過參數(shù)傳入,或者讀取配置文件實(shí)現(xiàn)
remotepwd = 'xxx'
#傳入需要查詢的主機(jī)密碼,這步可以通過參數(shù)傳入,或者讀取配置文件實(shí)現(xiàn)
client = paramiko.client.SSHClient()
#創(chuàng)建一個對象,建立一個ssh連接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#允許連接不在know_hosts文件中的主機(jī)
client.connect(hostname=ip,username=remoteuser,password=remotepwd)
#連接遠(yuǎn)程主機(jī)
#connect(self, hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None)
#connect可以傳入很多參數(shù),我們主要用到的是IP,端口(默認(rèn)22),用戶名,密碼
i,o,e = client.exec_command('find /hsdata/ljetty/ -name %s*'%(date))
#在遠(yuǎn)程執(zhí)行shell腳本,通過輸出流的方式輸出stdin,stdout,stderr,本例中通過find命令在指定目錄下找到以指定日期開頭的文件
loglist = o.readlines()
#[u'/var/log/jettyMYSQL/logs/2016_01_03.stderrout.log\n'] 
#將標(biāo)準(zhǔn)輸出的文件讀取,賦值給loglist,輸出的的每個內(nèi)容其實(shí)是個unicode格式文本,之后使用的過程中需要轉(zhuǎn)換成utf8格式
client.close()
#關(guān)閉連接
t = paramiko.Transport((ip,22))
#創(chuàng)建一個對象實(shí)例化paramiko.transport
t.connect(username = remoteuser,password = remotepwd)
#連接遠(yuǎn)程主機(jī)
sftp = paramiko.SFTPClient.from_transport(t)
#建立一個sftp對象,通過sshtransport遠(yuǎn)程操作文件
for i in loglist:
#遍歷日志文件列表
    print type(i)
    #unicode
    a = (i.encode('utf-8')).replace('\n','')
    #/var/log/jettyMYSQL/logs/2016_01_03.stderrout.log
    #將之前找到的日志文件名進(jìn)行處理,轉(zhuǎn)換unicode轉(zhuǎn)換至utf8格式,并去除尾部的\n字符.
    b = a.replace('/','')
    #varlogjettyMYSQLlogs2016_01_03.stderrout.log
    #將完全的路徑中的/刪除,得到的值作為將要保存在本地的文件名
    if os.path.exists('/tmp/'+ip):
    #判斷是否存在以遠(yuǎn)程主機(jī)IP為名字的目錄,如果存在,則將文件下載到該目錄下,如果不存在,創(chuàng)建目錄后將文件下載到該目錄下.
        sftp.get(a,'/tmp/'+ip+'/'+b)
    else:
        os.makedirs('/tmp/'+ip)
        sftp.get(a,'/tmp/'+ip+'/'+b)
t.close()

這樣我們就完成了簡單的遠(yuǎn)程連接主機(jī)執(zhí)行命令和下載文件的操作.現(xiàn)在只是完成了需求,完全可以將遠(yuǎn)程主機(jī)的IP,用戶名,密碼寫成一個配置文件,讀取配置文件進(jìn)行操作,也可以將命令寫成2個函數(shù),調(diào)用指定函數(shù)完成指定操作.

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 石城县| 汾西县| 虹口区| 汉寿县| 长白| 伊金霍洛旗| 北碚区| 孟村| 高台县| 黎城县| 九台市| 恩施市| 沅陵县| 大悟县| 张家港市| 绍兴县| 阿荣旗| 张北县| 伊宁县| 宁乡县| 乌兰县| 图们市| 柞水县| 黑山县| 新余市| 新密市| 衡南县| 九龙坡区| 澄迈县| 鸡泽县| 五家渠市| 留坝县| 绵竹市| 衡山县| 新余市| 台东县| 庆元县| 泸州市| 杂多县| 新巴尔虎左旗| 广南县|