原創聲明:本文首發騰訊雲·雲+社群,未經允許,不得轉載
雲資料倉庫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 日志為例,如下圖。
linux系統中,/var/log/messages 日志檔案
打開日志,分析日志格式,主要由2列構成:一列是時間,一列是日志内容,如下圖。
/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('資料導入完成')
複制
執行代碼,如下圖。
執行上面的代碼
登入資料庫,檢視表内容,如下圖。
查詢導入資料倉庫的日志内容
至此,已将日志導入到snova資料倉庫中。