天天看点

腾讯云数据仓库 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数据仓库中。