草庐IT

从0到1搭建大数据平台之监控

大数据指北 2024-02-02 原文

大家好,我是脚丫先生 (o^^o)

大数据平台设计中,监控系统尤为重要。

它时刻关乎大数据开发人员的幸福感。

试想如果半夜三更,被电话吵醒解决集群故障问题,那是多么的痛苦!!!

但是不加班是不可能的,因此就要避免无效的集群报警对我们造成影响,完善我们的监控预警系统,经过精细化监控指标项、对异常进行自动化处理、告警收敛等一系列操作,相信你也可以睡一个安稳觉。

一、监控系统

小伙伴们都知道,搭建一个大数据平台不是目的,稳定的使用才是核心。

大数据平台的日志监控可以说是数据开发人员的两只眼睛。

然而大数据平台涉及的组件比较多,因此一个统一的集群和平台监控必不可少。

一般而言,我们主要以:监控粒度、监控指标完整性、监控实时性作为评价监控系统是否优秀的三要素。

我们将监控系统分为三层

  • 系统层

顾名思义,系统层主要监控我们大数据平台所依赖的服务器。

通过对服务器的监控,可以实时的掌握服务器的工作状态、内存消耗、健康状态等,以保证服务器的稳定运行。

监控指标: 内存、磁盘、CPU、网络流量、系统进程等系统级别指标。

  • 应用层

应用层的监控可以理解为,对部署在服务器上的各种应用进行监控。包括但是不限于Hadoop集群、调度服务和大数据平台应用等等。

比如说,Hadoop集群的某个节点出现了故障,我们能够快速定位,并处理该问题。

对应用的整体运行状况进行了解、把控,确保服务的状态正常,服务的运行性能正常。

监控指标: JVM堆内存、GC、CPU使用率、线程数、吞吐量等。

  • 业务层

业务层算是最贴近系统用户的,同时可以反馈系统及应用层的问题。

业务系统本质目的是为了达成业务目标,因此监控业务系统是否正常最有效的方式是从数据上监控业务目标是否达成。

对业务数据进行监控,可以快速发现程序的bug或业务逻辑设计缺陷。

比如说,我们会监控调度服务的执行情况、Datax数据集成的抽取情况等等。

二、常用大数据平台开源监控组件

常用的开源监控组件比较多,这里以比较常用的三种。

  • Zabbix

基于Web界面提供分布式系统监视及网络监视功能的企业级开源解决方案。

它易于入门,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发,难度较大;此外,系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐。

  • OpenFalcon

小米开源的面向互联网企业的监控产品。它是一款企业级、高可用、可扩展的开源监控解决方案,提供实时报警、数据监控等功能。可以非常容易的监控整个服务器的状态,比如磁盘空间,端口存活,网络流量等。

  • Prometheus

它是一套开源的监控、报警和时间序列数据库组合。也是最近比较流行的开源监控工具~深受广大小伙伴的喜欢。作为新一代的云原生监控系统,其最大的优点在于:

易管理性Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储
高效性单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点
易于伸缩性可以对Prometheus进行扩展,形成一个逻辑集群
丰富的看板多种可视化图表及仪表盘支持
针对容器监控对docker,k8S监控有成熟解决方案

总而言之, 以上三种是现在较为流行的监控工具,在这里我进一步对他们进行方案对比:

ZabbixOpenFalconPrometheus
可扩展性可扩展能力强可扩展能力强可扩展能力强
监控数据采集推送、拉取推送、拉取推送、拉取
监控数据存储mysql/psql归档RRD,存储mysql+redis+opentsdb自带时序数据库存储方案, 类似于OpenTSDB
自定义指标c++/pythongo/python/shellgo/python/shell
告警功能支持支持支持
使用场景大中型企业、私有云大中型企业、私有云大中型企业、私有云

三、大数据平台监控体系构建

3.1 概况

研发的大数据平台,修改了前端登陆界面,对于一个大数据开发人来说,前端的学习真的非常痛苦,感觉好难。

不过也是逐渐上手了。

其监控体系是基于基于开源:xxx_exporter+promethues+grafana的构建监控系统,方案如下

其中

  • exporter

一般是使用来采集各种组件运行时的指标数据。

  • promethues

构建指标时序数据库。

  • grafana

构建指标显示面板。

目前已有各种docker容器方便的构建各种监控体系

3.2 构建过程

详细的xxx_exporter+promethues+grafana搭建过程,直接参考百度,较为详细。

(1)采用docker的方式快速搭建监控基础。

version: '3.7'

services:
  node-exporter:
    image: prom/node-exporter:latest
    restart: always
    network_mode: "host"
    ports:
      - "9100:9100"

  dingtalk:
    image: timonwong/prometheus-webhook-dingtalk:latest
    restart: always
    network_mode: "host"
    volumes:
      - ./alertmanager/config.yml:/etc/prometheus-webhook-dingtalk/config.yml
    ports:
      - "8060:8060"

  alertmanager:
    depends_on:
      - dingtalk
    image: prom/alertmanager:latest
    restart: always
    network_mode: "host"
    volumes:
      - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    ports:
      - "9093:9093"
      - "9094:9094"

  prometheus:
    depends_on:
      - alertmanager
    image: prom/prometheus:latest
    restart: always
    network_mode: "host"
    user: root
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/alert-rules.yml:/etc/prometheus/alert-rules.yml
      - ./prometheus/configs:/etc/prometheus/configs
    ports:
      - "9090:9090"

  grafana:
    depends_on:
      - prometheus
    image: grafana/grafana:latest
    restart: always
    network_mode: "host"
    volumes:
      - ./grafana:/var/lib/grafana
      - ./grafana.ini:/etc/grafana/grafana.ini
      - ./index.html:/usr/share/grafana/public/views/index.html
    ports:
      - "3000:3000"

(2) promethues的配置


#全局配置信息:
global:
  scrape_interval:     15s #默认抓取间隔1m, 15秒向目标抓取一次数据
  evaluation_interval: 15s 
#个性化的抓取配置信息
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090'] 
#监控物理主机:cpu、memory、disk等 
  - job_name: node_exporter
    static_configs:
      - targets:
        - 'localhost:9091'
- job_name: 'bigdata-namenode'  #用于监控namenode组件
    file_sd_configs:
     - files:
       - configs/namenode.json  #hdfs参数获取地址
  - job_name: 'bigdata-datanode' #用于监控datanode 
    file_sd_configs:
     - files:
       - configs/datanode.json
  - job_name: 'bigdata-resourcemanager' #用于监控resourcemanager
    file_sd_configs:
     - files:
       - configs/resourcemanager.json 
  - job_name: 'bigdata-nodemanager'   #用于监控nodemanager
    file_sd_configs:
     - files:
       - configs/nodemanager.json

针对于大数据组件繁多,因此对于监控json的配置也需要一一对应。

暂时以以上几个组件监控为例。

(3)构建之后的效果

以grafana指标展示界面,嵌入大数据平台里作为监控系统。

效果图主要是在grafana里对每个组件进行编辑,小伙伴们可以自行设计想要的效果。

更多精彩内容请关注 微信公众号 👇「大数据指北」🔥:


一枚热衷于分享大数据基础原理,技术实战,架构设计与原型实现之外,还喜欢输出一些个人私活案例。


更多精彩福利干货,期待您的关注 ~

有关从0到1搭建大数据平台之监控的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  3. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  7. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  8. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  9. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  10. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

随机推荐