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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,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日志并进行多维度分析。
相关文章
|
15天前
|
监控 关系型数据库 MySQL
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
37 3
|
27天前
|
存储 安全 关系型数据库
Mysql 的binlog日志的优缺点
MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它包含了所有对数据库执行的更改操作,如INSERT、UPDATE和DELETE等。binlog的主要目的是复制和恢复。以下是binlog日志的优缺点: ### 优点: 1. **数据恢复**:当数据库出现意外故障或数据丢失时,可以利用binlog进行点恢复(point-in-time recovery),将数据恢复到某一特定时间点。 2. **主从复制**:binlog是实现MySQL主从复制功能的核心组件。主服务器将binlog中的事件发送到从服务器,从服务器再重放这些事件,从而实现数据的同步。 3. **审计**:b
|
1月前
|
存储 运维 监控
【Flume】flume 日志管理中的应用
【4月更文挑战第4天】【Flume】flume 日志管理中的应用
|
1月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
105 1
|
2月前
|
监控 Serverless 数据库
Serverless 应用引擎常见问题之biphon-education-配置了SLS后一直重启如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
28 5
|
2月前
|
运维 监控 数据挖掘
应用研发平台EMAS产品常见问题之将阿里后台的日志落到我们后台失败如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
1月前
|
关系型数据库 MySQL 数据挖掘
轻松入门MySQL:深入理解MySQL聚合函数,实战进销存项目中的应用与技巧(8)
轻松入门MySQL:深入理解MySQL聚合函数,实战进销存项目中的应用与技巧(8)
|
1月前
|
SQL 监控 关系型数据库
深入理解MySQL日志:通用查询、慢查询和错误日志详解
深入理解MySQL日志:通用查询、慢查询和错误日志详解
|
1月前
|
SQL 存储 关系型数据库
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)