基于日志服务实现PolarDB秒级监控告警实践

简介: 数据复用场景。SLS统一平台利用一份数据发掘出多个use case,让数据发挥其最大价值。

1. 背景

2021-12-31 15:00:00,元旦前一天下午3时整,中国各大城市开始进入网约车高峰时段,上海某提供出行服务的公司,因对外服务的业务侧网关不具备限流能力,面对大量订单的持续涌入,线上资源持续吃紧,服务连续性保障遭受极大挑战。虽然云计算资源可弹性扩缩的特性能实现容量的快速扩展,但因为监控滞后,问题发现不及时,错过扩容操作的时机,甚至在错误时段执行了某些变更操作,造成服务中断,给业务营收带来风险。

1.1 案例复盘

1.2021-12-31 15:00:00左右开始,可发现PolarDB实例的压力持续上涨,但暂未发现对业务实质的影响。

image.png

2.2021-12-31 18:08:18左右,客户应用反馈出现了tripDB02卡顿。

image.png

此时数据库实例负载为75%左右。

image.png

3.进一步查看慢SQL,发现此时执行了一个DDL操作,由慢日志里可以看到,DDL语句导致后续的SQL语句出现阻塞,对客户业务服务造成影响。

image.png  image.png

说明

DDL加索引操作

  • MySQL里面有一个mdl锁,这个锁不需要显式使用。业务在访问一张表的时候会自动加上,比如在select的时候会加mdl读锁、在做DDL(比如加字段、加索引等)的时候,会加mdl写锁,读写锁之间是互斥的。MySQL里加锁是有顺序的,在MDL写锁之后进来的访问,都会被block住,系统当时的访问压力是非常高应该有3万左右的QPS,这时瞬间就会堆积起来。因此,在业务高峰期的时候给MySQL做DDL操作比较危险。

  • 参考链接:MySQL数据锁原则。

事后通过对客户现有的监控策略进行梳理,发现在业务高峰时段执行的此类DDL操作行为并没有被有效监控,且对慢SQL的监控展示以及告警出现了不同程度的延迟:云监控出现4分钟延迟,grafana展示是2分钟延迟。

显然,这样的延迟是无法满足客户工程保障中心所要求的服务标准的。

2. SLS秒级监控解决方案

SLS云产品Lens为客户提供阿里云云产品(主流产品)的场景化运维管理、异常检测、使用优化等服务,帮助客户能够低门槛地实现对“云产品”的可观测,满足数据安全、使用得当、用量分析、性能监控、异常监测的需求。

近期,SLS联合云数据库PolarDB推出PolarDB Lens,用于集中管理PolarDB MySQL集群以及采集PolarDB MySQL集群的慢查询日志、错误日志、审计日志和性能指标。覆盖的日志类型如下:

  • 审计日志:记录所有对数据库的操作,包括DDL、DML等,分析用户如何使用数据库。

  • 性能指标:write_rows、read_rows、QPS、IOPS、cpu_ratio、mem_ratio、innodb_buffer_use_ratio、innodb_buffer_read_hit等,可监控数据压力,指导调参扩容。

  • 慢查询日志:慢查询的SQL、发起人、耗时、等锁时间等信息,可用于单独的慢查询SQL调优。

  • 错误日志:错误日志记录了数据库进程的关键事件,例如启动、崩溃、打开数据库文件、数据同步等,帮助您了解数据库实例的运行情况,协助处理数据库故障。

我们可以看到当前所覆盖到的日志数据,对上述场景相关的DDL操作、慢SQL执行记录、系统性能指标等已具备完整的数据支撑,下一步只需验证其实时性。

2.1 秒级监控仪表板

  1. 通过DMS手动执行100条慢SQL进行验证。操作验证
  2. SLS侧,查询polardb_audit_log审计日志(为方便显示,只展示关键字段)。

image.png

统计延迟状况:平均延迟15秒左右,最大延迟24秒,最快8秒到达SLS

image.png

  1. 将慢查询语句的执行状态做成实时监控大盘:

SQL样例:cluster_id:pc-bp1d41r46uxkm2mlk and sleep | select time_series(origin_time/1000000, '1s', '%Y-%m-%d %H:%i:%s', '0') as origin_time, count(*) as slow_cnt from polardb_audit_log group by origin_time order by origin_time

SLS秒级监控大盘:

image.png

同时,可结合性能日志,将CPU,内存,QPS等关键性能指标整合到当前仪表板中,实现高可定制的、跨层级的统一监控:

image.png

验证结论:SLS可视化监控仪表板可实现秒级监控,测试下来,延迟15秒左右


2.2 协同监控告警

前面的复盘中我们提到,在业务高峰时段给MySQL做DDL操作是比较危险的,我们可通过SLS协同告警实现对此场景的主动预警,比如,在一个时间区间内,通过性能日志中的QPS指标关联对特定DDL操作行为的检测来实现。

  1. 配置告警规则。image.png

两条SQL样例(仅用于演示提供思路):

i. 监控用户对数据库执行的DDL操作(包括alert/create/drop),并列出执行操作的时间,执行的SQL语句,集群ID等关键信息。

cluster_id:pc-bp1d41xxxxx and (alert or create or drop) | select __time__,sql,cluster_id,count(*) as cnt from polardb_audit_log GROUP by cluster_id ,sql,__time__

ii. 查询数据库性能数据,统计其对应时间窗口内的QPS信息,为判断是否为业务繁忙时段提供数据依据。

* | select promql_query('mysql_qps{cluster_id=~"pc-bp1d41rxxxxx", type_role=~"^.*"}') from metrics limit 1000

  1. 手动执行DDL操作。

image.png

  1. 通过SLS告警监控,可实现1分钟内告警通知。image.png

验证结论:SLS提供的主动告警能力,测试下来,最快可1分钟内触发响应(SLS告警执行最细的时间颗粒度可配置为每分钟,为应对海量任务并发执行,会随机打散在当前1分钟内执行,正常情况最大延迟不会超过2分钟)。

3. 总结

3.1 数据成果


Before SLS

After SLS

MTTI

可视化大盘

2分钟

15秒

降低88%

监控告警

4分钟

1分钟

降低75%

3.2 方案价值

  • 自定义仪表板实时跟踪服务运行状况,直观的将服务与底层Infra关联起来,快速进行故障定位和根因分析。

  • 提供更为主动的秒级监控和事件关联告警能力,降低MTTI。

  • 以数据为中心的解决方案,一份数据支撑多个使用场景,本场景中数据库审计日志,既可满足用户安全审计的需求,同时可支持运维监控的场景,跨团队分享数据驱动的见解。

  • 一站式云上可观测解决方案,消除数据孤岛,以更低成本、更智能地进行监控、调查、分析和响应。

作者介绍
目录