智能运维-从0搭建大规模分布式AIOps系统

文章目录

  • 智能运维
  • 开源数据采集技术
    • 数据采集工具对比
    • 轻量级采集工具Filebeat
    • 日志采集解析工具
  • 分布式消息队列
  • 大数据存储技术
    • 传统架构
    • 基于HDFS的分布式存储
    • 分层存储
  • 大规模数据离线计算分析
    • 经典的离线计算
    • 分布式离线计算
  • 时序数据分析框架
  • AIOps算法
    • 数据聚合与关联技术
    • 数据异常点检测技术
    • 故障诊断和分析策略
    • 趋势预测算法

智能运维

对海量“事件”进行分类和处理

  • 实时数据和非实时数据
  • 格式化数据和非格式化数据
  • 需要索引的数据和只需要运算的数据
  • 全量数据和抽样数据
  • 可视化数据和告警数据

在具体的实践中,通常会混合使用多种存储介质和计算模型

  • 监控数据:时序数据库(RRD,TSDB,Whisper)
  • 告警数据:Redis
  • 分析报表:MySQL
  • 日志检索:Elasticsearch、Hadoop、Hive

指标不够,就需要加大监控的密度。
怎样从成千上万条信息中发现有用的、过滤掉重复的、抖动的信息很重要——“监控容易做、告警很难报”

  • 数据的聚合
  • 降低维度:聚类和分类
  • 标准化和归一化

故障定位。既能在异构系统中建立某种关联,为智能化提供支持,又不要求开发人员改变技术栈或者开发框架:

  • 日志标准化:日止包含所约定的内容格式,能表示自己的业务线、服务层级等
  • 全链路追踪: TraceID或者RequestID能从发起方透传到后端
  • SLA规范化: 采用统一的SLA约定,比如都用“响应时间”来约定性能指标,用“慢速比”衡量健康度
    故障定位又分为:告警关联、问题确定、根源故障分析等

开源数据采集技术

数据采集工具对比

对业务指标的监控本质上是对数据的监控。业务数据种类可能是JSON、HTML、图片、音频、视频等结构化和非结构化数据,数据采集和分析难度很大。——利用开源的框架和工具

. Flume Filebeat Logstash
语言 java Go Ruby
占用系统资源 一般
日志过滤 支持 支持 支持
日志解析 不支持 不支持 支持

Logstash功能更强,但是占用资源更多,Filebeat更轻量级

轻量级采集工具Filebeat

海量日志需要采集,但是不想占用太多资源使用filebeat很合适
Filebeat监控客户端指定目录或者指定文件、跟踪文件,并将他们转发到Kafka或者直接传送到Elasticsearch中

日志采集解析工具

Filebeat是轻量级的日志采集工具,可以很快的采集到数据并传送到kafka和es,但是并不支持对采集到的日志进行解析,Logstash可以完成复杂的日志解析、数据提取等工作。

Lohstash事件处理流
input
filter
output

input产生数据;filter清洗数据,提取和转换成我们需要的信息;output将提取的数据发送到我们需要的地方

  1. Input
    我们从input端获取数据,常见的类型如下
  • file:从文件中读取数据
  • kafka:以consumer的方式从kafka消费数据
  • filebeat:由filebeat推送给logstash
  • tcp:开启一个监听端口,所有想这个端口发送的数据都可以被接收
  1. Fileter
    Filter是logstash流处理的中间环节,可以将多个Fileter组合在一起使用,常见的如下:
  • grok:用于非结构化数据的解析,正则表达式构造数据。就是效率太低了,毕竟正则太耗费系统资源了
  • drop:对于不匹配的数据直接丢弃
  • mutate:对数据进行转换,可以进行重命名、删除、替换、修改字段等操作
  • split:对目标字段以指定的分隔符分隔
  1. Output
  • elasticsearch
  • kafka
  • file
  • codecs:codec作为input和output的一部分,可以对数据执行序列化操作。常用的codec包括son(以JSON格式编码或解码)和ultiline(将多个事件合并到一个事件中)

分布式消息队列

作为消息中间件,提高上下游并发性能,提高吞吐量。消息中间件可以让系统间耦合度大大降低,业务处理异步化,具有发布-订阅,请求-应答,管道三个特点。
kafka特点:

  • 快速持久化:消息持久化到本地磁盘,支持数据备份,防丢失
  • 高吞吐量、低延时:每秒几十万条消息
  • 完全分布式系统,自动负载均衡
  • 容错性:允许集群中节点失败

大数据存储技术

传统架构

要存储的日志包括系统、应用等,规模太大时关系型数据库不适用,需要用HDFS等分布式存储技术
传统方式是集中存储:终端或客户端仅仅负责数据的录入与输出,数据的存储与控制处理完全交给主机做,问题如下:

  • 性能问题
  • 成本激增
  • 单点问题
  • 数据准确性

基于HDFS的分布式存储

按数据存储模型来划分:

  • 文件模型—对应分布式文件系统:HDFS,GFS
  • 关系模型—对应分布式数据库系统:OceanBase
  • 键值模型-很多NoSQL系统采用键值模型:Redis

HDFS是一个具有高度容错性的系统,适合部署在廉价的机器上。主要组成部分:NnameNode、SecondaryNameNode、DataNode。基本操作:读、写、均衡
智能运维-从0搭建大规模分布式AIOps系统_第1张图片
三个部分:NameNode、DataNode和Client

  1. NameNode
    主要职责是管理整个文件系统的元信息,元信息主要包括:
  • HDFS类似于单机文件系统,以目录书的形式组织文件
  • 文件副本数,是针对每个文件设置的
  • 文件块到数据节点的映射关系
    所有的文件操作都绕不过NameNode,除此之外它还管理着DataNode
  1. DataNode
    主要职责如下:
  • 存储文件快
  • 响应Client的文件读写请求
  • 执行文件块的创建、删除和复制操作
    NameNode不会主动向DataNode发出指令,而是通过DataNode定期向NameNode发送心跳来携带回传的指令信息的
  1. Client
    在HDFS交互过程中,Clinet的主要职责是:
  • 提供面向应用编程语言的一致API,简化应用编程
  • 改善HDFS的访问性能(读可以提供Cache,写可以提供Buffer批量方式)

HDFS不适合的场景:

  • 低延迟场景:提高了吞吐量,并未优化访问实时性,访问及时性要求较高的场景要考虑HBase
  • 较多小文件的存储:存储海量大文件,不适合存储大量小文件,这类可以用一些对象存储系统
  • 有多个写入者,以及随机修改的场景

分层存储

如何高效管理这些数据成为问题
数据仓库技术——让用户更快、更方便地查询所需要的信息,提供决策支持

大规模数据离线计算分析

经典的离线计算

  1. sed
    本质上是一个编辑器,面向字符流,输入的字符流经过sed处理后输出,主要用来进行关键字的分析和统计,还可以对数据进行替换、删除、新增以及特定行的选取等操作
  2. awk
    相比于sed常用于一整行的处理,awk则比较倾向于将一行分成多段处理,更适合处理小数据集
  3. pandas
    处理的数据量不大(小于100MB)比较好,否则效率很低

分布式离线计算

MapReduce是一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题。
Map阶段,并行处理输入数据。Reduce阶段,对Map结果进行汇总
智能运维-从0搭建大规模分布式AIOps系统_第2张图片

时序数据分析框架

时序数据库的组成:

  • Timestamp:记录时间
  • Metric:标识每个指标数据,如CPU,QPS,Status等
  • Dimension:数据的属性,比如数据类型、地域、年龄、性别等

时序数据库:
智能运维-从0搭建大规模分布式AIOps系统_第3张图片

AIOps算法

数据聚合与关联技术

聚合数据有两个层面,一是对数据的聚合运算(计数、平均、抽样),二是多维度聚合
常见的进行时序数据聚合运算的工具如下:

  • Statsd
  • Statsite
  • Collectd

数据异常点检测技术

通常所说的异常大致分为异常值、波动点和异常时间序列三类
异常检测方法有三大类:

  • 基于统计模型的技术
  • 基于邻近度的技术
  • 基于密度的技术
    很有挑战性,通常会导致解决方案是不可扩展的或高度专业化的,误报率较高

故障诊断和分析策略

传统的故障定位手段有监控告警型和日志分析型

  • 基于关联关系的相关性分析
  • 基于决策树的故障诊断

趋势预测算法

  • 移动平均法
  • 指数平滑法
  • ARIMA
  • LSTM

你可能感兴趣的:(AIops,智能运维,机器学习,大数据,监控)