基于RDS lens的日志采集和应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 背景去年阿里云日志服务与云数据库RDS联合推出CloudLens for RDS,可以通过该产品实时查看RDS SQL审计日志的采集状态,集中管理采集配置,并可基于采集到的日志进行后续的审计、分析、告警等操作。近期,RDS Lens 在此基础上,针对无审计需求的客户场景,提供了可单独采集慢日志和错误日志的能力。用户可以在无需开启审计日志的情况下,单独使用慢日志和错误日志来满足自己的监控需求,从而降

背景

去年阿里云日志服务与云数据库RDS联合推出CloudLens for RDS,可以通过该产品实时查看RDS SQL审计日志的采集状态,集中管理采集配置,并可基于采集到的日志进行后续的审计、分析、告警等操作。近期,RDS Lens 在此基础上,针对无审计需求的客户场景,提供了可单独采集慢日志和错误日志的能力。用户可以在无需开启审计日志的情况下,单独使用慢日志和错误日志来满足自己的监控需求,从而降低使用成本。

本文将介绍如何开通RDS Lens、如何单个开启指定类型的日志采集,如何自动化批量开启指定类型的日志的采集,以及罗列一些基于这些采集日志的常见的使用场景,方便大家参考做更多场景的二次开发。

如何采集RDS日志

第一步:在SLS中的日志应用里的云产品Lens下,搜索 CloudLens for RDS进入,点击立即开启开通RDS Lens

第二步:在RDS 的产品官网购买RDS 的实例,已经购买的可以忽略。

第三步:RDS lens 会自动同步您的RDS 实例信息。如果是刚购买实例,实例创建成功后,一分钟内,就可以在RDS Lens看到实例列表信息。

第四步:开启RDS 实例的日志采集。点击开启可以为单个实例单独做开启。。需要注意的是,审计日志依赖RDS 的sql洞察,所以开通审计日志的时候,RDS Lens 会默认帮您开启sql 洞察。

审计日志开启可以自由指定目标project logstore

其他日志采用固定project 和logstore 命名,不允许修改。慢日志和错误日志统一都投递到slow_error_log里

也可以通过自动化采集为一些特定属性的实例做批量的开启(按地域,实例名,引擎类型等)

下图为自动化采集,按区域进行自动化的采集。

不管通过哪种手段,开启后的实例,将会自动帮用户采集对应的日志类型的日志。

日志字段介绍

按照上一步就可以采集到您想要的指定类型的日志到目标logstore里了。下面为日志的具体字段名以及含义,了解这些含义方便我们写更多复杂的sql来适应自己的业务场景。

审计日志

字段名称

说明

__topic__

日志主题,固定为rds_audit_log。

instance_id

RDS实例ID。

check_rows

扫描的行数。

db

数据库名。

fail

SQL执行是否出错。

  • 如果是MySQL实例或SQL Server实例,则执行成功时,字段值为0,除0之外的其他值都表示失败。
  • 如果是PostgreSQL实例,则执行成功时,字段值为0000,除0000之外的其他值都表示失败。

client_ip

访问RDS实例的客户端IP地址。

latency

执行SQL操作后,多久返回结果,单位:微秒。

origin_time

执行操作的时间点。

return_rows

返回的行数。

sql

执行的SQL语句。

thread_id

线程ID。

user

执行操作的用户名。

update_rows

更新的行数。

慢日志

字段

解释

__topic__

日志主题:默认为 rds_error_log,pg引擎为rds_error_log_pg

db_name

数据库名称

db_type

数据库类型

db_version

数据库版本

instance_id

集群ID

lock_time

锁时间

owner_id

aliuid

query_sql

查询语句

query_time

查询耗时

region

区域

rows_examined

扫描行数

rows_sent

返回记录

start_time

执行时间

user_host

客户端信息

错误日志

字段

解释

__topic__

日志主题:默认为 rds_slow_log,pg引擎为rds_slow_log_pg

instance_id

集群ID

collect_time

采集时间

db_type

数据库引擎类型

db_version

数据库引擎版本

content

日志内容

eventType

事件类型

典型应用场景

有了上述这三种类型的日志,我们可以根据业务的需求来写sql分析。

这三种日志里:审计是覆盖了错误日志和慢日志的。如果业务是本来就需要审计日志的,直接开启审计日志就可以获取下面大部分场景的运维能力,如果无审计要求,为了降低成本,只需单独开通错误日志和慢日志也可以完成下面的部分场景的能力。

场景一:

日常运营

sql:

## 统一pv 依赖开通审计日志
__topic__: rds_audit_log  | select count(1) as PV

## 统计uv 依赖开通审计日志
__topic__: rds_audit_log  | select approx_distinct(client_ip) as UV

## 统计累计插入行数 依赖开通审计日志
__topic__: rds_audit_log and sql: "insert " and update_rows > 0 | select coalesce(sum(update_rows), 0) as cnt where regexp_extract(sql, '(?is)\binsert\s+(?:into\s+)?`?(\w+)`?\b', 1) is not NULL

## 统计累计更新行数 依赖开通审计日志
__topic__: rds_audit_log and sql: "update " and update_rows > 0 | select coalesce(sum(update_rows), 0) as cnt where regexp_extract(sql, '(?is)\s*update\s+`?(\w+)`?\b', 1) is not NULL

## 统计累计删除行数 依赖开通审计日志
__topic__: rds_audit_log and sql: "delete from" and update_rows > 0 | select coalesce(sum(update_rows), 0) as cnt

## 统计执行错误日志 依赖开通审计日志
__topic__: rds_audit_log  and fail > 0 | select *



## 统计执行错误日志 依赖开通错误日志
__topic__:rds_error_log | select *

场景二:数据库安全

## 统计登陆错误次数 依赖开通审计日志
__topic__: rds_audit_log and sql: "login failed!"  | select count(1) as cnt

## 统计登陆错误次数 依赖开通错误日志
__topic__: rds_error_log and content: "Access denied for user" | select count(1) as cnt

## 统计大批量的删除次数 依赖开通审计日志
__topic__: rds_audit_log and sql: "delete from" and update_rows > 10 | select count(1) as cnt

## 统计危险类sql次数:注入或者元数据表访问  依赖开通审计日志
## 此处条件可以接入第三方语库从而实现更精确的危险检测查询逻辑
__topic__: rds_audit_log and (sql:information_schema or sql:1 or sql:a) | select count(1) as cnt where regexp_like(sql, '(?i)SELECT.+FROM\s+information_schema.+') or regexp_like(sql, '(?i)\b1\s*=\s*1\s+or\b') or regexp_like(sql, '(?i)\bor\s+1\s*=\s*1\b') or regexp_like(sql, '(?i)\bor\s+''a''\s*=\s*''a''\b')or regexp_like(sql, '(?i)\b''a''\s*=\s*''a''\s+or\b')

场景三:性能分析

  1. 慢sql记录
## 查询执行延迟1s的sql记录 依赖开通审计日志
(__topic__: rds_audit_log and latency > 1000000)| select *

## 查询执行延迟1s的sql记录 依赖开通慢日志
(__topic__: rds_slow_log and query_time > 1)| select *

上述罗列的场景,基本包含了 数据库运维场景的几大要素:安全、性能、运营。使用者可以基于采集过来的日志进行更复杂的组合来使用。通过sdk来调用日志查询结果来集成到自己的运维平台、也可以使用SLS提供的查询、仪表盘告警功能来应用自己的数据库日志数据。

总结

除了RDS Lens,sls 在关系型数据库和nosql领域提供了诸如PolarDB Lens、Redis Lens等帮助用户快速接入云产品数据库的产品日志。通过统一的采集能力和形态,并基于sls 强大的查询分析能力、可视化、告警等功能,可以帮用户更全面稳定的使用好数据库的日志。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
|
4天前
|
SQL 数据库
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
|
5天前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
164 90
|
14天前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
|
18天前
|
关系型数据库 MySQL 数据库
MySQL日志
本文介绍了MySQL中三个重要的日志:binlog、redolog和undolog。binlog记录数据库更改操作,支持数据恢复、复制和审计;redolog保证事务的原子性和持久性,实现crash-safe;undolog用于事务回滚及MVCC的实现。每个日志都有其独特的作用和应用场景,确保数据库的稳定性和数据一致性。
|
20天前
|
关系型数据库 MySQL
图解MySQL【日志】——磁盘 I/O 次数过高时优化的办法
当 MySQL 磁盘 I/O 次数过高时,可通过调整参数优化。控制刷盘时机以降低频率:组提交参数 `binlog_group_commit_sync_delay` 和 `binlog_group_commit_sync_no_delay_count` 调整等待时间和事务数量;`sync_binlog=N` 设置 write 和 fsync 频率,`innodb_flush_log_at_trx_commit=2` 使提交时只写入 Redo Log 文件,由 OS 择机持久化,但两者在 OS 崩溃时有丢失数据风险。
38 3
|
20天前
|
关系型数据库 MySQL 数据库
图解MySQL【日志】——两阶段提交
两阶段提交是为了解决Redo Log和Binlog日志在事务提交时可能出现的半成功状态,确保两者的一致性。它分为准备阶段和提交阶段,通过协调者和参与者协作完成。准备阶段中,协调者向所有参与者发送准备请求,参与者执行事务并回复是否同意提交;提交阶段中,若所有参与者同意,则协调者发送提交请求,否则发送回滚请求。MySQL通过这种方式保证了分布式事务的一致性,并引入组提交机制减少磁盘I/O次数,提升性能。
42 4
图解MySQL【日志】——两阶段提交
|
21天前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
28 5
图解MySQL【日志】——Redo Log
|
23天前
|
缓存 关系型数据库 MySQL
图解MySQL【日志】——Buffer Pool
Buffer Pool 是数据库管理系统(DBMS)中用于缓存磁盘数据页的内存区域,主要包含数据页、索引页、undo 页等。它通过减少磁盘 I/O 提升性能,特别是在处理大型数据库时效果显著。查询时,整个数据页而非单条记录会被加载到 Buffer Pool 中,以提高访问效率。
22 0
图解MySQL【日志】——Buffer Pool
|
23天前
|
存储 关系型数据库 MySQL
图解MySQL【日志】——Undo Log
Undo Log(回滚日志)是 MySQL 中用于实现事务原子性和一致性的关键机制。在默认的自动提交模式下,MySQL 隐式开启事务,每条增删改语句都会记录到 Undo Log 中。其主要作用包括:
35 0