04-监控-手册(Runbook)

前言

好的手册在当警报触发时,便于快速定位问题。在更复杂的环境中,团队中的每一个人都不会对每一个系统都有所了解,并且Runbook是传播这些知识的一个载体,更是好方法。web

手册 == RunBook, 请了解。数据库

一、编写RunBook的注意事项

为特定服务编写了一个好的Runbook,大体须要一下几点:flask

  • 这项服务是什么,它的做用是什么?
  • 谁是项目负责?
  • 它有什么依赖关系?
  • 它的基础设施是什么样的?
  • 它发出什么指标和日志,它们是什么意思?
  • 为它设置了什么警报,为何?

对于每一个警报,咱们能够包含指向该服务的Runbook的连接。当有人响应警报时,他们将打开Runbook并了解正在发生的事情,警报的含义以及潜在的补救步骤。缓存

与许多好东西同样,Runbook很容易被滥用。若是警报的补救步骤与复制粘贴命令同样简单,那么说明已经开始滥用Runbook。对于上面说的状况应该自动执行该修复或解决基础问题,而后彻底删除警报。服务器

Runbook用于解决某些问题时须要人工判断和诊断的时间。架构

二、基于Web App的RunBook示例

固然,这是一个示例,你彻底能够根据你的状况进行完善与调整。下面咱们来看下Demo。app

服务名:Demo App框架

Demo App 是经过Python框架Flask进行开发,主要做用是Blog信息展现;服务主要依赖组件有Redis(缓存),MySQL(数据存储);服务采用Uwsgi+Nginx形式做为部署架构。性能

Metadata日志

代码库位于http://10.0.0.1/app/blog

服务责任人:Evan

问题升级

若是须要协助来解决此服务的问题,则服务全部者没法协助,问题升级联系备用人员XX。有关联系说明,请参阅公司联系表。

外部依赖

依赖公共Js库mount.js来实现国际化时间;

依赖外部CDN进行加速,CDH域名:XXXX,CDH服务商:XXX。

内部依赖性

Nginx服务,运行在10.0.0.7的服务器上;

Redis服务,运行在10.0.0.7的服务器上,DB库是:3;

MySQL服务,运行在10.0.0.8(Master),10.0.0.9(Slave);数据库名称:flask_blog

技术栈

  • Flask (1.0.1)
  • Nginx (1.13.16)
  • Redis(4.3.1)
  • MySQL(5.6.40)

监控指标与日志

指标以下:

  • 用户登陆(计数)
  • 用户注销(计数)
  • 发布建立(计数)
  • 删除(计数)
  • 评论建立(计数)
  • 评论删除(计数)
  • 发布时间(计时器)
  • 删除时间(计时器)
  • 用户注册时间(计时器)
  • 用户登陆时间(计时器)
  • 用户注销时间(计时器)

应用日志内容:

  • 用户使用用户ID,状态(成功/失败)和IP地址登陆
  • 使用用户ID,状态(成功/失败)和IP地址发布建立
  • 使用用户ID,状态(成功/失败)和IP地址建立注释

警报

问题:用户登陆失败率

缘由:当用户登陆失败率在5m时间内超过5%时,此警报将触发。可能的缘由是部署不当(检查最近的部署)或暴力攻击(检查用户登陆日志是否有攻击迹象)。

问题:用户登陆时间过长

缘由:当用户登陆所需的时间超过一秒时,将触发此警报。检查最近的错误部署或MySQL性能问题。

问题:发布时间太长

缘由:当用户建立帖子所需的时间超过一秒时,将触发此警报。检查最近的错误部署或MySQL性能问题。

问题:评论创造时间太长

缘由:当用户建立评论所需的时间超过一秒时,将触发此警报。校验对于最近的错误部署或MySQL性能问题。

上面就是Demo了,能够根据你们的需求进行调整。