自动化运维与自动化监控

互联网公司的运维工作

随着互联网的快速发展,运维工作已由传统企业向互联网公司快速变化,然而近几年IaaS、PaaS、SaaS、OaaS等各种平台、云上产品有如雨后春笋般冒出来,很多新人已不知道运维工作包括什么,甚至一些从业人员也逐渐迷失了方向,什么是运维?什么是DevOps?运维需要做什么?

一般来讲,无论任何时期任何行业的运维,无非归纳为基础运维、应用运维、运维开发和运维监控四个方向。基础运维大多可理解为传统的IDC、硬件、网络等维护工作;应用维护可理解为系统管理、软件维护、业务系统维护等;运维开发一般只有相对大的公司才会独立设置这么个角色,主要任务是负责运维支撑工具的开发、监控工具开发等工作,例如监控系统、监控脚本、自动化发布工具等;运维监控通常就是24小时的值班人员,他们要时刻关注系统的健康状况,一旦出现问题需要第一时间排查处理,并定其总结过往问题,提出优化方向。

何谓自动化运维

所谓自动化运维,就是把运维日常工作中复杂的问题简单化、重复的问题工具化、自动化,尽可能减少人的参与。运维自动化的四个基础组成部份是:

  1. CMDB。运维管理的核心,存储所有运维相关数据,包括硬件、系统、软件版本、数据库、中间件、网络配置等信息,所有的维护变更都需要基于这个配置管理数据库。
  2. 运行环境标准化。有了CMDB后,就可以通过Puppet、Saltstack、Ansible等自动化管理工具把系统、软件部署标准化。当你只有几十台主机时,可能标准化的作用还是不太明显,但是当你有成百上千台,甚至上万台设备时,要单纯通过人去管理这么多机器无疑是行不通的,你需要合理地运用一些工具去管理你的系统,标准化运行环境。
  3. 发布管理。发布管理需要考虑代码自动构建、自动发布、发布后检查、发布异常回滚等,对于生产环境特别是涉及大规模的重大影响变更时,还要考虑灰度发布,尽可能控制用户的影响范围。
  4. 监控管理。监控管理包括容量监控、系统运行指标监控、应用指标监控,以及出错时的告警和自动处理。在应用部署完成生产交付后,整个监控系统应当随之同步上线,因为这是运维保障的最后一道防线。

监控系统在运维自动化中的角色

如上一章节所说,生产环境各个环节都与监控系统密切相关,没有监控的生产系统跟裸奔没什么区别。而对于运维人员而言,监控系统就相当于他们的双眼,没有它,你没办法知道系统的健康状况。监控系统主要承担的角色有:

  1. 采集指标数据。
  2. 可视化管理。
  3. 异常告警。
  4. 协同处理。
  5. 回顾分析。

监控系统的理想化模样

一个理想的监控系统应当具备以处如下能力:

  1. 方便部署。能根据CMDB配置,通过自动化管理工具自动部署,而不需要过多的人为配置。
  2. 数据指标采集。能通过模版化、脚本自动化定义监控指标和完成数据采集,并能灵活地支持多种协议上传方式以及多种数据上报格式。
  3. 可视化管理。具备数据可视化能力,能通过图表方式展示历史数据的变化,甚至通过可视化界面能清楚知道整个生产环境、各业务流程哪里出现问题,缩小故障时的排查范围和排查时间。
  4. 监控告警。当告警或预警事件出现时,能通过短信、邮件、微信等各种媒介进行通知,并支持定义复杂的报警逻辑和级联告警机制,减少不必要的告警,从而提高敏感度。
  5. 当故障发生时,能根据设置触发相关处理脚本,实现问题自动修复,甚至做到自动扩容、failover、非核级服务降级等,以确保关键业务的正常运行。
  6. 能通过监控系统分析历史故障原因、容量数据变化,能为扩容、环境变更等提供数据依据,也能根据历史记录总结问题的关联性、必然性,最大限度地防止同类问题的再度发生。