天天看點

騰訊雲資料倉庫 PostgreSQL:使用python将linux日志導入資料倉庫一,日志格式分析二,代碼實作:資料格式化與導入

原創聲明:本文首發騰訊雲·雲+社群,未經允許,不得轉載

雲資料倉庫PostgreSQL(CDWPG,原名Snova) 相容 Greenplum 開源資料倉庫,是一種基于 MPP(大規模并行處理)架構的數倉服務。
借助于 Snova,您可以使用豐富的 PostgreSQL 開源生态工具,實作對 Snova 中海量資料的即席查詢分析、ETL 處理及可視化探索;
還可以借助 Snova 雲端資料無縫內建特性,輕松分析位于 COS、TencentDB、ES 等資料引擎上的 PB 級資料。
                                                                                            ----以上摘自官網。           

複制

通過官網我們知道,snova可以使用PostgreSQL工具,是以,如果想要将linux日志導入snova資料倉庫,隻需要調用 python3 中的 psycopg2 子產品(該子產品,僅python3.x可用)。

有關該子產品的下載下傳位址和文檔:https://pypi.org/project/psycopg2/

下面進入正題。

一,日志格式分析

我們此次的目的,是将linux系統下的日志檔案,導入到snova資料倉庫中。

以 /var/log/messages 日志為例,如下圖。

騰訊雲資料倉庫 PostgreSQL:使用python将linux日志導入資料倉庫一,日志格式分析二,代碼實作:資料格式化與導入

linux系統中,/var/log/messages 日志檔案

打開日志,分析日志格式,主要由2列構成:一列是時間,一列是日志内容,如下圖。

騰訊雲資料倉庫 PostgreSQL:使用python将linux日志導入資料倉庫一,日志格式分析二,代碼實作:資料格式化與導入

/var/log/messages 日志檔案結構

二,代碼實作:資料格式化與導入

總體思路:要将日志導入資料倉庫,必須:1,對日志内容進行格式化;2,使用python中的 psycopg2 工具。

詳細情況看注釋。

#coding=utf-8
__author__ = 'BH8ANK'
import psycopg2

f = open('/var/log/messages')
#按行讀取
line = f.readlines()
#日志總行數
row = len(line)
print(row)

#連接配接資料庫并建立新表test,
conn = psycopg2.connect(dbname="postgres", user="bh8anktest",password="YourPassword", host="xx.xx.xx.xx", port="5436")
cur = conn.cursor()
cur.execute("CREATE TABLE test (date text,logs text);")

i = 1
while i < row:
    #日期時間的格式化
    log = line[i].split(' ',3)#split() 通過指定分隔符對字元串進行切片,如果參數 num 有指定值,則按照從前往後的順序比對,分隔為 num+1 個子字元串
    date = log[0] +'-'+ log[1] +'-'+ log[2]
    if "'" in log[3]:
        log[3] = log[3].replace("'","''")
    print(log[3])
    sql_txt = "insert into test (date,logs) values(" +"'"+ date + "'"+','+"'''"+log[3]+"'''"+');'
    print(sql_txt)
    cur.execute(sql_txt)
    conn.commit()
    i = i+1

#conn.commit()
conn.close()

print('資料導入完成')
           

複制

執行代碼,如下圖。

騰訊雲資料倉庫 PostgreSQL:使用python将linux日志導入資料倉庫一,日志格式分析二,代碼實作:資料格式化與導入

執行上面的代碼

登入資料庫,檢視表内容,如下圖。

騰訊雲資料倉庫 PostgreSQL:使用python将linux日志導入資料倉庫一,日志格式分析二,代碼實作:資料格式化與導入

查詢導入資料倉庫的日志内容

至此,已将日志導入到snova資料倉庫中。