第一讲:企业级运维监控理理论基础

  Prometheus构架图

 

   监控和报警

 

   Prometheus优势

•监控数据的精细程度 绝对的第⼀ 可以精确到 1~5秒的采集精度  4 5分钟 理想的状态 我们来算算
采集精度 (存储 性能)
• 集群部署的速度 监控脚本的制作 (指的是熟练之后) ⾮常快速 ⼤⼤缩短监控的搭建时间成本
• 周边插件很丰富 exporter pushgateway ⼤多数都不需要⾃⼰开发了
• 本⾝基于数学计算模型,⼤量的实⽤函数 可以实现很复杂规则的业务逻辑监控(例如QPS的曲线
弯曲 凸起 下跌的 ⽐例等等模糊概念)
• 可以嵌⼊很多开源⼯具的内部 进⾏监控 数据更准时 更可信(其他监控很难做到这⼀点)
• 本⾝是开源的,更新速度快,bug修复快。⽀持N多种语⾔做本⾝和插件的⼆次开发
• 图形很⾼⼤上 很美观 ⽼板特别喜欢看这种业务图 (主要是指跟Grafana的结合)

  不足之处

• 因其数据采集的精度  如果集群数量太⼤,那么单点的监控有性能瓶颈 ⽬前尚不⽀持集群 只能
workaround
• 学习成本太⼤,尤其是其独有的数学命令⾏(⾮常强⼤的同时 又极其难学《=⾃学的情况下),
中⽂资料极少,本⾝的各种数学模型的概念很复杂(如果没⼈教 ⾃⼰⼀点点学英⽂官⽹ 得 1-3 个
⽉⼊门)
• 对磁盘资源也是耗费的较⼤,这个具体要看 监控的集群量 和 监控项的多少 和保存时间的长短
• 本⾝的使⽤ 需要使⽤者的数学不能太差 要有⼀定的数学头脑

  

  较完善的监控系统体系

  1)监控系统设计

  设计部分包括以下内容

  评估系统的业务流程,业务方向不同,程序代码不同,系统构架不同

  对于各个地方的细节,都需要一定程度的认知,才是监控设计的源头

  分类列出所需监控项种类

  一般可分为: 业务级别监控/系统级别监控/网络监控/程序代码监控/日志监控/用户行为监控/其他类型监控

  大的分类,还有更多细小分类

  例如

  业务监控:可以包含用户访问OPS,DAU日活,访问状态(http code),业务接口(登录,注册,聊天,上传,留言,短信,搜索)产品转化率,充值额度,用户投诉这些很宏观的概念

  系统监控:主要和操作系统相关 CPU/内存/硬盘/IO/TCP链接/流量

  网络监控:对网络状态的监控,例如丢包率,延迟等等

  日志监控:监控中的重头戏,往往单独设计和搭建,各种种类的日志都需要采集

  程序监控:一般需要和开发人员配合,程序中嵌入各种接口,直接获取数据或者特质的日志格式

  监控技术方案软件选取

  各种监控软件层出不穷,开源的 商业的 自行开发的几百种方案可选

  架构师凭借一些因素,开始选材

  针对企业的架构特点 大小种类,人员多少等等选取合适的技术方案
  

  监控体系人员安排

  运维团队任务划分,责任到人,分块进行

  

  2)监控系统的搭建

  • 单点服务端的搭建
  • 单点客户端的搭建
  • 单点客户端服务器测试
  • 采集程序单点部署
  • 采集程序批量部署
  • 监控服务端HA
  • 监控图形化搭建(Grafana)
  • 报警系统(Pagererduty)
  • 报警规则测试
  • 监控+报警联合测试
  • 正式上线监控

  

  3)数据采集的编写

  例如: shell/python/awk/lua(Nginx安全控制 功能分类)/php/perl/go等等

  shell:运维入门脚本,任何和性能,后台,界面无关的逻辑都可以实现最快速的开发

  Python:各种扩展功能,扩展库,功能丰富

  awk:本身是一个实用命令,也是一门庞大的编程语言。结合shell或者独立都可以使用

  lua:多用于nginx模块结合,是比较新的一个语言

  php:老牌子的开发语言,在大型互联网开发中,目前有退潮趋势,不过在运维开发中还是很依赖PHP

  Perl:传说中对文本处理最快的工具(但是代码可读性不强)

  go:新型的语言 目前在开发和运维中很热,在各种后端服务逻辑编写上开发速度快

  作为监控数据的采集,首推shell和python

  数据采集的形式分类

  一次性采集:例如我们使用比较简单的shell + crontab 按定时任务

  优点:稳定性比较好,不容易出现错误和性能瓶颈,开发逻辑简单实现快速

  缺点:对于有些采集项目实现起来不够智能,也不到位。例如日志的实时采集

  后台式采集:采集程序以守护进程运行在Linux后台,持续不断地采集数据

  优点:后台采集程序 数据准确性高,采集密度精确,管理方便

  缺点:如果开发不够仔细,会出现内存泄漏,僵尸进程 性能瓶颈等问题,且开发时间较长

  桥接式采集:本身已后台进程运行,单采集过程不能独立,以桥接方式采集数据

  

  监控的数据和算法其实非常依赖运维架构师对Linux操作系的各种底层知识的掌握

  如果我们使用老式傻瓜式的监控nagios,里面的监控脚本很全面,生成报警规则和阈值也很简单,缺点也显而易见;监控太粗糙,实用性不强,另外也不利于希望提高的同学

  业务级别监控的算法 运维自身无法做到十分专业

  

  监控图形 曲线QPS上涨,下跌,QPS和历史数据的比较方法,等等这些都属于业务级别的监控阈值类型

  需要有专业的数据分析人员的协助 才可以算出优良的算法

  例如:如果我现在想针对QPS下跌率进行报警计算,那么用什么样的公式针对我们的业务类型更贴切

  计算当前5分钟内的平均值<一个固定数值的时候 报警合适

  计算当前10分钟的总量然后和前一个小时同一时间段比较

  计算当前1小时的平均值和过去一周内每一天同一时间段的时间比较合适

  这些数据算法和Linux无关,只有非常专业的数据计算团队,才可以给出一个合理的算法

 

  监控稳定测试

  不管是一次性采集,还是后台采集,只要是部署在Linux都会多多少少产生一定影响

  

  监控自动化

  监控客户端的批量部署,监控服务端的HA安装,监控项目的修改,监控项目的监控集群变化

  这里给出几个实例

  Puppet(配置文件部署)

  Jenkins(持续集成)

  CMDB(运维自动化的最高资源管理平台和理念)

  

  监控图形化工作 

  采集好的数据和准备好的监控算法,最终需要一个好的图形展示

  grafanna的使用和搭建

  

posted @ 2020-04-03 17:05  minseo  阅读(368)  评论(0编辑  收藏  举报