原创声明:本文首发腾讯云·云+社区,未经允许,不得转载
云数据仓库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数据仓库中。