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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 背景去年阿里云日志服务与云数据库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 强大的查询分析能力、可视化、告警等功能,可以帮用户更全面稳定的使用好数据库的日志。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
7月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
664 140
|
7月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
5月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
1137 88
|
5月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
7月前
|
数据采集 存储 大数据
大数据之路:阿里巴巴大数据实践——日志采集与数据同步
本资料全面介绍大数据处理技术架构,涵盖数据采集、同步、计算与服务全流程。内容包括Web/App端日志采集方案、数据同步工具DataX与TimeTunnel、离线与实时数仓架构、OneData方法论及元数据管理等核心内容,适用于构建企业级数据平台体系。
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
1408 21
|
8月前
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文总结了日志管理中的六大反模式及优化建议,涵盖日志轮转、存储选择、并发写入等常见问题,帮助提升日志采集的完整性与系统可观测性,适用于运维及开发人员优化日志管理策略。
292 6
|
4月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
308 1

推荐镜像

更多