import taos
import re
import time
def init_database_re(p_config,p_hostname, p_user='root', p_password='taosdata'):
'''
@parameter
taosd_host_name: TDengine服务器的hostname
user: TDengine服务器的登录user
passwd: TDengine服务器登录user对应的password
@return
conn: 连接TDengine数据库使用的connection句柄
c1: 操作TDengine数据库使用的cursor句柄
pattern: 用于匹配fastlog中每行数据的正则表达式
@function
1. 如果不存在,为远端TDengine创建suricata数据库
2. 如果不存在,为远端TDengine中的suricat数据库创建表fastlog
3. 预先编译正则表达式对象,用于匹配fast.log中的每行数据
'''
conn = taos.connect(host= p_hostname, user=p_user,password=p_password, config=p_config)
c1 = conn.cursor()
try:
c1.execute('create database if not exists suricata')
c1.execute('use suricata')
c1.execute('create table if not exists fastlog(ts timestamp, type binary(100), priority int, protocol binary(15), srcip binary(20), srcport int, dstip binary(20), dstport int)')
except Exception as err:
conn.close()
raise(err)
pattern = re.compile(r'(.*) (\[\*\*\]) (\[.*\]) (.*) (\[\*\*\]) (\[)(.*): (.*)(\]) (\[)(.*): (.*)(\]) (\{)(.*)(\}) (.*):(\d+) -> (.*):(\d+)')
return conn, c1, pattern
def insert(p_conn,p_c1,p_ts,p_type,p_priority,p_protocol,p_srcip,p_srcport,p_dstip,p_dstport):
'''
@param
p_conn: 连接TDengine数据库的connection句柄
p_c1: 向suricata.fastlog插入数据使用的cursor句柄
p_ts: 告警产生的时间
p_type: 告警类型
p_priority: 告警优先级
p_protocol: 告警packet的网络协议
p_srcip: 告警packet的源IP
p_srcport: 告警packet的源端口
p_dstip: 告警packet的目的IP
p_dstport: 告警packet的目的端口
@function:
1. 根据参数构建insert sql
2. 使用构造的insert sql向TDengine中的suricata.fastlog插入数据
'''
sql_fixed = "insert into suricata.fastlog(ts, type, priority, protocol, srcip, srcport, dstip, dstport)"
sql_value = "values("+p_ts+",'"+p_type+"',"+p_priority+",'"+p_protocol+"','"+p_srcip+"',"+p_srcport+",'"+p_dstip+"',"+p_dstport+")"
try:
p_c1.execute(sql_fixed+sql_value)
print(sql_fixed+sql_value)
except Exception as err:
p_conn.close()
raise(err)
def upload(p_filename, p_conn, p_c1, p_pattern):
with open(p_filename) as f:
for line in f:
result = p_pattern.match(line)
ts = int(time.mktime(time.strptime(result.group(1)[:-8], '%m/%d/%Y-%H:%M:%S')))*1000 + int(result.group(1)[-6:-3])
insert(p_conn, p_c1, str(ts), result.group(8), result.group(12), result.group(15), result.group(17), result.group(18), result.group(19), result.group(20))
p_conn.close()
conn, c1, pattern = init_database_re(p_config="C:\\TDengine\\cfg",p_hostname="fmr-dev-centos7", p_user='root', p_password='taosdata')
upload(p_filename="./fast.log", p_conn=conn, p_c1=c1, p_pattern=pattern)
使用python脚本解析本地日志文件,并上传至TDengine
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 开篇先讲一下我遇到的需求:我是客户给我了一个在快手上爬虫下来的json文件,要求我根据文件的视频链接和图片链接上传...
- 命令行获取目标事件ID的日志 现在我们尝试将“应用程序(Application)”路径下,所有消息(Level=4...
- 处理流程 记录accesslog日志 切割整理accesslog日志 入库数据 数据抽取、分割 制作报表 适用场景...