如何在亚马逊 RDS 上使用适用于 Oracle 日志文件的 CloudWatch Logs Insights
大多数数据库引擎会记录错误消息、警告、跟踪和审计语句。数据库的可观察性和监控是通过跟踪这些日志信息并采取主动和被动的措施来实现的,例如在空间不足时分配空间,或者停止会话导致排他性锁定或连接风暴。
在
适用于 Oracle 的 RDS 可以将所有这些日志文件发布到
在这篇文章中,我将演示如何使用 CloudWatch Logs Insights 查询来分析已发布到 CloudWatch Logs 的 Oracle 警报和侦听器日志。通过这些查询,您可以观察何时引发 ORA 错误,并通过计算警报日志中的出现次数来找出 ORA 错误的频率。此外,您还可以更深入地了解成功和失败的客户关系及其频率,以便在 listener.log 中进行深入分析。
解决方案概述
在这篇文章中,我建议将警报和侦听器日志发布到 CloudWatch Logs。下图说明了解决方案架构。
高级步骤如下所示:
- 将警报和侦听器日志文件发布到 CloudWatch 日志。
- 编写查询以分析 CloudWatch 日志组中已发布的日志。
先决条件
这篇文章需要满足以下先决条件:
- 运行适用于 Oracle 的 RDS 实例的 亚马逊云科技 账户。有关说明,请参阅
创建和连接 Oracle 数据库实例 。 - 一
台 带有甲骨文客户端的 ,用于连接适用于甲骨文的亚马逊 RDS。亚马逊弹性计算云 (亚马逊 EC2) 堡垒主机 - 将警报和侦听器日志发布到 CloudWatch 日志。
向 CloudWatch 日志发布警报和侦听器日志
在创建实例期间,您可以
以下 Amazon RDS 控制台的屏幕截图显示了在 “ 其他配置 ” 下为 日志 导出 选择 警报 日志 和 侦听器 日志 选项的位置 。
编写查询以分析在 CloudWatch 日志上发布的日志
您可以使用 CloudWatch Logs Insights 专门构建的查询语言在 CloudWatch Logs 中以交互方式搜索和分析您的日志数据。以下步骤显示如何对警报日志中的常见 Oracle 错误和侦听器日志中的客户机连接创建分析:
- 在 CloudWatch 控制台上,选择导航窗格 中的 日志组 。
- 搜索并选择您的实例(例如,
cwlogin
sights)。
-
要将特定的错误代码或模式放入实例的警报日志中以测试查询而不会在实例上实际遇到错误,请连接您的 EC2 堡垒主机并通过 sqlplus 运行 SYS.DBMS_S
YSTEM.KSDW
RT 程序。
以下屏幕截图显示运行 DBMS_SYSTEM.KSDWRT
(2,'ORA-01578')作为示例来测试相关的 CloudWatch Logs Insights 查询。
- 要编写有关警报日志内容的 CloudWatch Logs Insights 查询,请选择您的日志组,然后选择 在日志见解中 查看。
- 在列表中运行以下查询,对已发布的 alert.log 进行特定分析
Log Group | CloudWatch Insights Query | Purpose of The Query |
|
fields @timestamp, @message |filter @message like /ORA-00600/ or @message like /ORA-07445/ or @message like /ORA-01578/ or @message like /ORA-01653/ or @message like /ORA-01000/ or @message like /ORA-01652/ or @message like /ORA-01555/ or @message like /ORA-04036/ or @message like /ORA-30036/ | sort @timestamp desc |
Find timeframe when ORA-errors are seen ORA-00600-internal error code, argument: ORA-07445- exception encountered: ORA-01578-ORACLE data block corrupted ORA-01653- unable to extend table ORA-01000-maximum open cursors exceeded ORA-01652-unable to extend temp segment by ORA-30036-unable to extend segment by string in undo tablespace ORA-01555 – Snapshot Too Old: Rollback Segment Number ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT |
|
fields @timestamp, @message |filter @message like /ORA-00600/ or @message like /ORA-07445/ or @message like /ORA-01578/ or @message like /ORA-01653/ or @message like /ORA-01000/ or @message like /ORA-01652/ or @message like /ORA-01555/ or @message like /ORA-04036/ or @message like /ORA-30036/ |stats count(*) by @message |
Find frequency of ORA-error messages ORA-00600-internal error code, argument: ORA-07445- exception encountered: ORA-01578-ORACLE data block corrupted ORA-01653- unable to extend table ORA-01000-maximum open cursors exceeded ORA-01652-unable to extend temp segment by ORA-30036-unable to extend segment by string in undo tablespace ORA-01555 – Snapshot Too Old: Rollback Segment Number ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT |
- 选择 “ 运行查询” 。
通过选择所需的时间范围(从5分钟到自定义的时间范围),您可以进行在线和离线分析。可以使用 “保存” 功能存储经常运行的查询以供日后使用。
您还可以通过选择属于该实例的侦听器日志组(例如cwloginsights),通过 Cloud Watch L
ogs Insights 对已发布的侦听器日志进行查询。
借助下表中的查询,您可以出于多种原因分析侦听器日志,例如通过选择正确的时间范围在线或离线排除问题
Log Group | Insights Query | Purpose of The Query |
|
fields @timestamp, @message | filter (@message not like ‘127.0.0.1’) and (@message like /establish/) | sort @timestamp desc |
Find client connections from network layer by listing successful client connections |
|
fields @timestamp, @message | filter (@message not like ‘127.0.0.1’) and (@message like /establish/) | stats count(*) by @message |
Find successful connection frequency for client connections |
|
fields @timestamp, @message | filter (@message not like ‘127.0.0.1’) and (@message like /establish/) and @message like /PROGRAM=sqlplus/ | stats count(*) by @message |
Find successful connection frequency for client connections through sqlplus |
|
fields @timestamp, @message | filter (@message like /TNS-/ | sort @timestamp desc |
Find unsuccessful client connections |
|
fields @timestamp, @message | filter (@message like /TNS-/ | stats count(*) by @message |
Find unsucessfull number of connections of client connections |
|
fields @timestamp , @message | filter ( @message not like ‘127.0.0.1’) and ( @message like /establish/) | parse ‘*-*-* establish’ as saat, tns, protocol | stats count() by bin(1m) tns |
Find successfull connections numbers from the same client every minute |
清理
本文中讨论的几项服务属于
你可以在
为避免产生任何意外费用,您应该删除所有未使用的资源。此外,当您不再需要时,请将其删除 CloudWatch 日志组。
摘要
在这篇文章中,我演示了如何使用CloudWatch Logs Insights查询来分析适用于Oracle的亚马逊RDS的警报和侦听器日志。通过对这些日志进行实时和离线分析,您可以采取主动和被动的行动。通过这种方式,可以实现卓越运营。
使用
如果您有后续问题或反馈,请发表评论。我们很想听听你的想法和建议。
作者简介
Belma Canik 是亚马逊网络服务的数据库专家技术账户经理 (STAM)。她帮助客户在 亚马逊云科技 上运行经过优化的工作负载,并充分利用他们的云之旅。