1. 程式人生 > >基於python實現日誌收集

基於python實現日誌收集

指令碼:

#! /usr/bin/python
# encoding:utf-8

import paramiko
import time
import os
import re
import codecs
import commands
from time import  localtime
from datetime import datetime,date

# 執行命令
def sftp_exec_command(command):
    list = []
    try:
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(host, 22, user, password)
        std_in, std_out, std_err = ssh_client.exec_command(command)
        for line in std_out:
            list.append(line.strip("\n"))
        ssh_client.close()
        return list
    except Exception, e:
        print e

# 上傳檔案
def sftp_upload_file(server_path, local_path):
    try:
        t = paramiko.Transport((host, 22))
        t.connect(username=user, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        sftp.put(local_path, server_path)
        t.close()
    except Exception, e:
        print e

# 下載檔案
def sftp_down_file(server_path, local_path):
    try:
        t = paramiko.Transport((host, 22))
        t.connect(username=user, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        sftp.get(server_path, local_path)
        t.close()
    except Exception, e:
        print e

# 讀配置檔案
def read_conf(loc_conf):
    l = []
    conf = open(loc_conf, 'r');
    for line in conf:
        dic = dict()
        if  line.startswith('host'):
            lst = line.strip().split(',')
            for i in xrange(len(lst)):
                str = lst[i]
                idx = str.index('=')
                key = str[0:idx]
                value = str[idx + 1:]
                dic[key] = value
            l.append(dic)
    return l

#d 讀配置檔案,返回列表List
conf = read_conf('E:/applog/log.cnf')

# 指定本地儲存路徑
target_log_dir = "E:/applog/"
today = time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')

# 建立當天目錄
local_today = target_log_dir+today
isExists = os.path.exists(local_today)
# cmd_find = "find %s -mtime 0 -name '*'" %log_path
if not isExists:
    os.mkdir(local_today)
    print 'Sucessfully created today dir: %s' %local_today

# 記錄日誌
log_file = local_today + '/collect.log'
print log_file
collect_log = file(log_file, 'a+')

# if __name__ == '__main__':
    # sftp_exec_command("df -h")
    # sftp_upload_file("/home/oracle/test.html", "D:/doubanhtml/douban0.html")

    # sftp_down_file("/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log", "D:/alert_orcl.log")

if __name__ == '__main__':
    for a in xrange(len(conf)):
        # 遍歷配置檔案列表
        host = conf[a]['host']
        port = 22
        timeout = 30
        user = conf[a]['user']
        password = conf[a]['password']
        app_name = conf[a]['name']
        app_path = conf[a]['path']
        # password = raw_input("Input your password plz:")
        # 建立程式目錄
        local_app = target_log_dir + today + '/' + app_name

        isExists = os.path.exists(local_app)
        # cmd_find = "find %s -mtime 0 -name '*.trc'" %log_path
        if not isExists:
            os.makedirs(local_app)
            print >>collect_log,'*******Sucessfully created app directory : %s*******' %local_app
            collect_log.write('\n')

        # 將遠端日誌路徑傳入app_path_list,進行遍歷抓取
        app_path_list = []
        app_path_list.append(app_path)
        for log_path in app_path_list:
            print >>collect_log,'====starting get logs of app:%s->%s->%s====' %(app_name,host,log_path)
            collect_log.write('\n')
            cmd_find = "find %s -newermt %s -name '*.*'" % (log_path,today)
            lt = sftp_exec_command(cmd_find)
            print >>collect_log,'--Sucessfully get logs:'
            for each in lt:
                # 取檔名
                filename = each.split('/')[-1]
                local_app_log = local_app + '/' + filename
                # alert_path_final=alert_path.decode('unicode-escape').encode('utf-8')
                sftp_down_file(each, local_app_log)
                print >>collect_log,each
            collect_log.write('\n')


配置檔案 log.cnf:

host=192.168.48.10,user=oracle,password=oracle,path=/u01/app/oracle/diag/rdbms/orcl/orcl/trace,name=ora
host=192.168.48.10,user=oracle,password=oracle,path=/home/oracle,name=ora_home
根據需要修改即可。

另外需要實現建好本地外層路徑,更改路徑後在Linux下也可執行。也可以使用pyinstaller打包成exe執行。

收集日誌 collect.log

*******Sucessfully created app directory : E:/applog/20171207/ora*******

====starting get logs of app:ora->192.168.48.10->/u01/app/oracle/diag/rdbms/orcl/orcl/trace====

--Sucessfully get logs:
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/test.trc

*******Sucessfully created app directory : E:/applog/20171207/ora_home*******

====starting get logs of app:ora_home->192.168.48.10->/home/oracle====

--Sucessfully get logs:
/home/oracle/201712061.trc
/home/oracle/.viminfo
/home/oracle/.bash_history
/home/oracle/oracheck/oracheck_171126.log
/home/oracle/20171206.trc



相關推薦

基於python實現日誌收集

指令碼: #! /usr/bin/python # encoding:utf-8 import paramiko import time import os import re import codecs import commands from time import

HTML 基於 Python 實現分頁功能

ner mode 一個 div 樣式 def navi itl import 前面的話: 1. 網頁引用的bootstrap 中的表格,所以需要引入樣式類 2. 第一次寫文章,不喜勿噴。有不足的地方,可留言我改正,在此先謝過。 HTML代碼: <

基於Python實現的四則運算生成程序

個人 目錄 [] class 是否 time 除法 slist 設計實現 Github項目地址:傳送門 小組成員:黃曉彬(代碼實現) 黃鈺城(代碼審查) 需求: 1. 使用 -n 參數控制生成題目的個數。 2. 使用 -r 參數控制題目中數值(自然數、真分數和真分數分母)的

[原始碼和文件分享]基於Python實現的論壇帖子情感分析

一、課程專案 Scuinfo文字分類分析 二、專案類容 爬取川大匿名社群SCUinfo在一段時間內的帖子,對其進行情感分類分析,包括情緒分類(積極,消極),帖子內容關聯分析等。 三、個人工作完成報告 3.1 工作概述 負責資料收集、預處理以及簡單的情感分析 3.2 爬蟲方

基於flume的日誌收集系統配置

大資料系統中通常需要採集的日誌有: 系統訪問日誌 使用者點選日誌 其他業務日誌(比如推薦系統的點選日誌) 在收集日誌的時候,一般分為三層結構:採集層、彙總層和儲存層,而不是直接從採集端將資料傳送到儲存端,這樣的好處有: 如果儲存端如Hadoop叢集、Kafka等需要停

基於python實現網路課程秒刷

在平時的工作生活中,我們總是會遇到一些需要網路課程的學習,最常見的就像駕校的網路課程學習,黨員課程學習,工作技能網路學習等。如下圖所示,這是公司內部的一個黨員學習互動平臺,該平臺每個月都有一定的學習任務。       &nbs

博導推薦給我一本基於Python實現爬蟲的書, 最適合程式猿們看的!

網際網路包括了至今為止最有效的資料集,並且大年夜大年夜區域性能地下收費拜候。但這些資料根基上不克不及複用。它們被嵌入在網站的佈局、樣式中,得抽取出來才調應用。我們從網頁中抽取資料的過程就是我們熟知的彙集爬蟲,網際網路期間每天都有大年夜大年夜量的資訊被頒佈發表到彙集上,彙集爬蟲也愈來愈有效。

神經網路演算法(基於Tensorflow、基於Python實現BP)

1. 演算法思想        神經網路可分為兩個過程,前向傳播和反向傳播過程。前向傳播是對線性結果的非線性轉化,獲得對映關係,此非線性對映關係可依據層數的增加而累加;反向傳播是對前向傳播結果的誤差進行修正,依據各種型別的梯度下降演算法更新梯度,使得前向傳播的結果能更接近真

基於python 實現對圖片進行SVD

實現對圖片進行SVD 之前在學習截斷式SVD的時候, 不知道為什麼截斷式SVD後能夠近似原矩陣? 或者說奇異值究竟有什麼含義? 看了以下知乎的答案後, 有了很形象的理解 奇異值的物理意義是什麼?

Python實現日誌檔案寫入或者列印--類似於Java的Log4j

開發過Java的應該都知道Log4j的重要性,尤其是在開發測試中,能夠讓開發和測試人員方便找的bug,Python也有和Log4j相同功能的庫那就是logging庫,其功能非常強大,在開發測試中很方便,我是將其作為工具使用的,程式碼syslog.py如下: #!/usr/b

基於mongodb的日誌收集模組設計

由於log4mongo0.7.4.jar只支援mongodb2.X版本,但是現在的mongodb都已經3.6了。然後我再找找,它的新版本log4mongo0.9.0.jar版本,整合進去發現報錯了,看了一些資料說是自身bug(可能是水平有限,沒找到解決辦法)?因此我就參考網上

Spring AOP 基於註解實現日誌記錄+自定義註解

一、寫一個自定義註解        註解中包括配置方法所在模組名稱,以及功能名稱,當然我們在註解裡可以自定義。import java.lang.annotation.Documented; import java.lang.annotation.ElementType; im

基於ELK的日誌收集系統的心得

elasticsearch+logstash+kinana搭建的日誌收集系統 elasticsearch是基於倒排序查詢的查詢引擎,什麼叫倒排序?比如mysql建立的索引是正排序,對於規範化資料(比如表格,元資料)而言基本使用正排序索引,倒排序一般用於文字之類的查詢,典型

支持中文的基於詞為基本粒度的前綴樹(prefix trie)python實現

情況 key -s path join ret int blank ref Trie樹,也叫字典樹、前綴樹。可用於”predictive text”和”autocompletion”。亦可用於統計詞頻(邊插入Trie樹邊更新或加入詞頻)。 在計算機科學中。

基於LAMP實現web日誌管理查看

日誌 web 管理 前言:日誌是一個重要的信息庫,如何高效便捷的查看系統中的日誌信息,是系統管理員管理系統的必備的技術。實現方式: 1、將日誌存儲於數據庫。 2、采用LAMP架構,搭建PHP應用,通過web服務訪問數據庫,提取日誌信息,展現到web頁面。基本結構圖:一、搭建日誌服務器

python實現王者榮耀英圖片收集

pytho 獲取圖片 所有 orien 發現 mark 請求 發出 view 一個python寫的小爬蟲項目,爬蟲相關的很容易寫,關鍵是怎麽找到爬取圖片的位置。 圖片位置分析 hero_list_url = 'http://pvp.qq.com/web201605

Go實現海量日誌收集系統(二)

fig encode 文件配置 sar 架構 cli 代碼執行 CP lob 一篇文章主要是關於整體架構以及用到的軟件的一些介紹,這一篇文章是對各個軟件的使用介紹,當然這裏主要是關於架構中我們agent的實現用到的內容 關於zookeeper+kafka 我們需要先把兩

基於共現發現人物關系的python實現

默認字體 print matplot str raw 需要 out med jieba分詞 基於共現發現人物關系的python實現 參考鏈接: 提取《釜山行》人物關系, 用Python的networkx繪制精美網絡圖 1.共現關系 在文獻計量學中,關鍵詞的共詞方法常用來確定

利用Python實現掃描日誌關鍵字!Python真的無所不能!

dal pst ould 實現 掃描 count 格式 .py oid 我們在壓力測試過程會收集到很多log,怎樣快速從中找到有用信息呢?讓python腳本幫我們做這部分工作吧! 廢話不說,上代碼 環境:win10 + python2.7.14 countTime.py

利用Python實現讀取Nginx日誌,並將需要信息寫入到數據庫。

creat rip ger form use nginx日誌 zabbix 創建 auth #!/usr/bin/env python # coding: utf-8 # Auther:liangkai # Date:2018/6/26 11:26 # License: (