如何保留超过 5 天的查询日志?

Posted

技术标签:

【中文标题】如何保留超过 5 天的查询日志?【英文标题】:How do I keep more than 5 day's worth of query logs? 【发布时间】:2013-11-07 19:20:17 【问题描述】:

在 Redshift 中,有一个 STL_QUERY 表存储过去 5 天内运行的查询。我正在尝试找到一种方法来保存超过 5 天的记录。以下是我考虑过的一些事情:

    是否有针对此的 Redshift 设置?看来不是。 我可以使用触发器吗?触发器在 Redshift 中不可用,所以这是不行的。 我能否创建一个 Amazon Data Pipeline 作业来定期“抓取”STL_QUERY 表?我可以,所以这是一个选择。不幸的是,我必须为管道提供一些 EC2 实例来运行这项工作。让一个实例坐在那里每天刮一次这张桌子似乎是一种浪费。 我可以使用 Amazon Simple Work Flow 作业来刮桌子吗?我可以,但它遇到与 3 相同的问题。

我还缺少其他选项/想法吗?我更喜欢其他不涉及我专用 EC2 实例的选项,即使这意味着支付额外的服务(前提是它比我使用的 EC2 实例便宜)。

【问题讨论】:

【参考方案1】:

保持简单,一切都在 Redshift 中完成。

首先,使用“CREATE TABLE ... AS”将所有当前历史记录保存到永久表中。

CREATE TABLE admin.query_history AS SELECT * FROM stl_query;

其次,使用psql 运行它,在您控制的机器上安排一个作业每天运行它。

INSERT INTO admin.query_history SELECT * FROM stl_query WHERE query > (SELECT MAX(query) FROM admin.query_history);

完成。 :)

注意事项:

如果您尚未设置,则需要 8.x 版本的 psql。 即使您的作业有几天没有运行,stl_query 也会保留足够的历史记录,以便覆盖您。 根据您的评论,使用 starttime 而不是 query 作为条件可能更安全。

【讨论】:

感谢您的回答!两件事,一:query 字段是否保证增加?我应该改用starttime 吗?二:我不喜欢让它在我的笔记本电脑上运行的想法。在哪里运行这个东西是问题的焦点。我再放一天,但如果没有其他人回答并且你删除了“笔记本电脑”位,我会接受你的回答。 好的,我删除了对笔记本电脑的引用。我怀疑您控制中至少有一台 24/7 全天候运行的机器。一个 cron 工作就可以解决问题。您可以查看 AWS Data Pipeline 之类的东西来按计划运行脚本,但对于这个用例来说,这似乎有点矫枉过正。

以上是关于如何保留超过 5 天的查询日志?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Log4J 只保留最近七天的日志文件

删除超过多少天的日志文件或者备份文件

bash脚本通过每天保留1个备份来删除超过7天的备份[重复]

Exchange2003如何自动删除超过7天的邮件

那位高手帮我写一个linux shell脚本,是关于定时删除/**/**/**的数据,只保留180天的数据

Azure 长期审核日志