Syslog 数据的 Hive 表

Posted

技术标签:

【中文标题】Syslog 数据的 Hive 表【英文标题】:Hive table for Syslog data 【发布时间】:2014-01-11 08:27:06 【问题描述】:

我正在尝试创建一个 Hive 外部表,以便将系统日志消息分为四列:时间戳、主机、程序名+pid 和消息。我想在不使用 Regex serde 的情况下执行此操作,因为我还希望 Impala 可以使用该表(不支持 Regex Serde)。

问题是如果我用四个字段定义架构并指定“\040”作为字段分隔符,我最终只会得到消息的第一个字符串。例如,此日志行:

2014-01-01T04:00:00 myhost sshd[9008]: joe logged in from 192.168.1.1 with password ....

被映射为:

timestamp: 2014-01-01T04:00:00
host: myhost
prog: sshd[9008]:
msg: joe

“从...登录”被砍掉了。

鉴于有四列,有没有办法告诉 Hive 将其余字段放在最后一列而不是将它们排除在外?贪婪的选择?

谢谢

【问题讨论】:

我通过为整个日志行定义一个只有一列的 Hive 表来解决它,然后在 Impala 中使用 regexp_extract 创建一个视图。 【参考方案1】:

我通过为整个日志行定义一个只有一列的 Hive 表来解决它,然后在 Impala 中使用 regexp_extract 创建一个视图。

在 Hive 中,创建一个表:

create EXTERNAL TABLE hive_syslog_table (logline STRING) LOCATION '/logs';

然后在 Impala 中:

create view syslog_view as select regexp_extract(logline,'(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)',1) ts, regexp_extract(logline,'(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)',2) host, regexp_extract(logline,'(\\S+)\\s+(\\S+)\\s+(\\S+)([:\\/\\[\\ ])\\s+(.+)',3) prog, regexp_extract(logline,'(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)',4) msg from hive_syslog_table;

【讨论】:

以上是关于Syslog 数据的 Hive 表的主要内容,如果未能解决你的问题,请参考以下文章

如何复制一个表到另一个数据库中

logstash配置--syslog

如何将结构化数据从 Twisted 发送到 syslog?

syslog日志管理工具的安装

使用 syslog-ng 解析结构化 syslog

LogAnalyzer--基于syslog的日志管理和审计平台