从0到1搭建大数据平台之监控
大家好,我是脚丫先生 (o^^o)
大数据平台设计中,监控系统尤为重要。
它时刻关乎大数据开发人员的幸福感。
试想如果半夜三更,被电话吵醒解决集群故障问题,那是多么的痛苦!!!
但是不加班是不可能的,因此就要避免无效的集群报警对我们造成影响,完善我们的监控预警系统,经过精细化监控指标项、对异常进行自动化处理、告警收敛等一系列操作,相信你也可以睡一个安稳觉。
一、监控系统
小伙伴们都知道,搭建一个大数据平台不是目的,稳定的使用才是核心。
大数据平台的日志和监控可以说是数据开发人员的两只眼睛。
然而大数据平台涉及的组件比较多,因此一个统一的集群和平台监控必不可少。
一般而言,我们主要以:监控粒度、监控指标完整性、监控实时性作为评价监控系统是否优秀的三要素。
我们将监控系统分为三层:
- 系统层
顾名思义,系统层主要监控我们大数据平台所依赖的服务器。
通过对服务器的监控,可以实时的掌握服务器的工作状态、内存消耗、健康状态等,以保证服务器的稳定运行。
监控指标: 内存、磁盘、CPU、网络流量、系统进程等系统级别指标。
- 应用层
应用层的监控可以理解为,对部署在服务器上的各种应用进行监控。包括但是不限于Hadoop集群、调度服务和大数据平台应用等等。
比如说,Hadoop集群的某个节点出现了故障,我们能够快速定位,并处理该问题。
对应用的整体运行状况进行了解、把控,确保服务的状态正常,服务的运行性能正常。
监控指标: JVM堆内存、GC、CPU使用率、线程数、吞吐量等。
- 业务层
业务层算是最贴近系统用户的,同时可以反馈系统及应用层的问题。
业务系统本质目的是为了达成业务目标,因此监控业务系统是否正常最有效的方式是从数据上监控业务目标是否达成。
对业务数据进行监控,可以快速发现程序的bug或业务逻辑设计缺陷。
比如说,我们会监控调度服务的执行情况、Datax数据集成的抽取情况等等。
二、常用大数据平台开源监控组件
常用的开源监控组件比较多,这里以比较常用的三种。
- Zabbix
基于Web界面提供分布式系统监视及网络监视功能的企业级开源解决方案。
它易于入门,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发,难度较大;此外,系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐。
- OpenFalcon
小米开源的面向互联网企业的监控产品。它是一款企业级、高可用、可扩展的开源监控解决方案,提供实时报警、数据监控等功能。可以非常容易的监控整个服务器的状态,比如磁盘空间,端口存活,网络流量等。
- Prometheus
它是一套开源的监控、报警和时间序列数据库组合。也是最近比较流行的开源监控工具~深受广大小伙伴的喜欢。作为新一代的云原生监控系统,其最大的优点在于:
易管理性 | Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储 |
---|---|
高效性 | 单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点 |
易于伸缩性 | 可以对Prometheus进行扩展,形成一个逻辑集群 |
丰富的看板 | 多种可视化图表及仪表盘支持 |
针对容器监控 | 对docker,k8S监控有成熟解决方案 |
总而言之, 以上三种是现在较为流行的监控工具,在这里我进一步对他们进行方案对比:
Zabbix | OpenFalcon | Prometheus | |
---|---|---|---|
可扩展性 | 可扩展能力强 | 可扩展能力强 | 可扩展能力强 |
监控数据采集 | 推送、拉取 | 推送、拉取 | 推送、拉取 |
监控数据存储 | mysql/psql | 归档RRD,存储mysql+redis+opentsdb | 自带时序数据库存储方案, 类似于OpenTSDB |
自定义指标 | c++/python | go/python/shell | go/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:latestrestart: alwaysnetwork_mode: "host"ports:- "9100:9100"dingtalk:image: timonwong/prometheus-webhook-dingtalk:latestrestart: alwaysnetwork_mode: "host"volumes:- ./alertmanager/config.yml:/etc/prometheus-webhook-dingtalk/config.ymlports:- "8060:8060"alertmanager:depends_on:- dingtalkimage: prom/alertmanager:latestrestart: alwaysnetwork_mode: "host"volumes:- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.ymlports:- "9093:9093"- "9094:9094"prometheus:depends_on:- alertmanagerimage: prom/prometheus:latestrestart: alwaysnetwork_mode: "host"user: rootvolumes:- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml- ./prometheus/alert-rules.yml:/etc/prometheus/alert-rules.yml- ./prometheus/configs:/etc/prometheus/configsports:- "9090:9090"grafana:depends_on:- prometheusimage: grafana/grafana:latestrestart: alwaysnetwork_mode: "host"volumes:- ./grafana:/var/lib/grafana- ./grafana.ini:/etc/grafana/grafana.ini- ./index.html:/usr/share/grafana/public/views/index.htmlports:- "3000:3000"
(2) promethues的配置
#全局配置信息:
global:scrape_interval: 15s #默认抓取间隔1m, 15秒向目标抓取一次数据evaluation_interval: 15s
#个性化的抓取配置信息
scrape_configs:- job_name: prometheusstatic_configs:- targets: ['localhost:9090']
#监控物理主机:cpu、memory、disk等 - job_name: node_exporterstatic_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' #用于监控resourcemanagerfile_sd_configs:- files:- configs/resourcemanager.json - job_name: 'bigdata-nodemanager' #用于监控nodemanagerfile_sd_configs:- files:- configs/nodemanager.json
针对于大数据组件繁多,因此对于监控json的配置也需要一一对应。
暂时以以上几个组件监控为例。
(3)构建之后的效果
以grafana指标展示界面,嵌入大数据平台里作为监控系统。
效果图主要是在grafana里对每个组件进行编辑,小伙伴们可以自行设计想要的效果。
更多精彩内容请关注 微信公众号 👇「大数据指北」🔥:
一枚热衷于分享大数据基础原理,技术实战,架构设计与原型实现之外,还喜欢输出一些个人私活案例。
更多精彩福利干货,期待您的关注 ~
相关文章:

从0到1搭建大数据平台之监控
大家好,我是脚丫先生 (o^^o) 大数据平台设计中,监控系统尤为重要。 它时刻关乎大数据开发人员的幸福感。 试想如果半夜三更,被电话吵醒解决集群故障问题,那是多么的痛苦!!! 但是不加班是不可…...

采购评标管理过程是怎样的?有哪些评标标准?
采购活动的评标是检查和比较投标的有组织的过程,以选择最佳报价,努力获得实现企业目标所需的货物、工程和服务。 评标是由一个被称为评标小组的机构负责。这个小组如何称呼,取决于企业的情况。同义词有报价审查小组、投标审查委员会或投标审…...

《Vue+Spring Boot前后端分离开发实战》专著累计发行上万册
杰哥的学术专著《VueSpring Boot前后端分离开发实战》由清华大学出版社于2021年3月首次出版发行,虽受疫情影响但热度不减,受到业界读者的热捧,截至今日加印5次,累计发行12000册,引领读者开发前后端分离项目,…...

类与类之间的关系有哪几种?
文章目录程序设计要素1.可读性2.健壮性3.优化4.复用性5.可扩展性设计类的关系遵循的原则1、 高内聚低耦合2、面向对象开发中 “针对接口编程优于针对实现编程”,”组合优于继承” 的总体设计类与类之间的关系(即事物关系) A is-a B 泛化&…...

LeetCode 606.根据二叉树创建字符串,102.二叉树的层序遍历和牛客 二叉搜索树与双向链表
文章目录1. 根据二叉树创建字符串2. 二叉树的层序遍历3. 二叉搜索树与双向链表1. 根据二叉树创建字符串 难度 简单 题目链接 解题思路: 这里的意思就是:用前序遍历遍历这颗树。然后左子树和右子树分别在一个括号里。括号里的规则是: 1.左右都…...

02-18 周六 图解机器学习之SMV 第五章5-2
02-18 周六 图解机器学习之SMV 第五章5-2时间版本修改人描述2023年2月18日11:47:18V0.1宋全恒新建文档 环境 程序的基本环境,是使用了jupyter,在容器中运行的。 简介 本程序主要演示支持向量的获取,支持向量是距离超平面最近的点组成的。程序…...

Spring Boot系列--创建第一个Spring Boot项目
1.项目搭建 在IDEA中新建项目,选择Spring Initializr。 填写项目信息: 选择版本和Spring Web依赖: Spring Web插件能为项目集成Tomcat、配置dispatcherServlet和xml文件。此处选择的版本若为3.0.2的话会出现如下错误: java: …...

手把手教你用React Hook和TypeScript从零实现虚拟滚动列表组件
前言 k8s 全称 kubernetes,这个名字大家应该都不陌生,k8s是为容器服务而生的一个可移植容器的编排管理工具,集应用的部署和运维,负载均衡,服务发现和扩容,版本回滚于一身,越来越多的公司正在拥…...

界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!
界面控件DevExpress WPF的Pivot Grid组件是一个类似excel的数据透视表,用于多维数据分析和跨选项卡报表生成。它拥有众多的布局自定义选项,允许开发者完全控制其UI且以用户为中心的功能使其易于部署。PS:DevExpress WPF拥有120个控件和库&…...
python字典及基础操作
1) 字典是没有顺序的,是任意对象的无序集合。 2) 字典的键是唯一的,不能多次出现,多次出现时取最后一个值。 3) 键是不可变的。 4) 字典中的元素可增删。 5) 因为没有顺序,所以不存在索引。 1. 字典元素的访问 >>> …...

Windows Server 2008 R2安装onlyoffice【docker】
目录 前言 准备工作 安装docker 安装onlyoffice 常见问题 前言 目前docker for windows只能在windows10/11上安装,其他的windows版本只能使用Docker Toolbox来安装,使用该工具安装的docker其实是借助了Oracle VM VirtualBox虚拟机来运行的&a…...

JVM学习笔记六:运行时数据区之堆
目录 概述 堆空间内部结构 JDK7版本 JDK8版本 堆空间的内存划分 堆空间大小设置参数 概述 Java堆是虚拟机所管理的内存中最大的一块,其在JVM启动时即被创建,并且空间大小也被确定(这里是不考虑Java8之后以本地内存来实现的元空间&…...

usb闪存驱动器数据恢复该怎么进行?3个方法总结
“怎么办?我的USB驱动器不知道因为什么原因,里面的数据、文件都消失了。有没有什么方法在没有进行备份的情况下恢复从U盘丢失的数据?” USB驱动器作为最常用的存储移动设备,里面保存着各种文件数据。但是有时会出现损坏而导致数据…...

DAX 微信 markdown 编辑器
DAX 微信 markdown 编辑器 一、致谢 感谢开源项目: md wechat-format 感谢 WordPress 插件 Mine云点播 作者 mine27 的指导。 二、如何使用 打开如下地址,直接编辑,可以实时看到符合微信公众号排版的效果。 推荐访问:https://j…...
湖南中创教育为学员提供方便快速的退费服务
2006年,湖南中创教育科技有限公司创始人团队开始创业进入职业教育行业;2014年公司正式成立,组建专业团队并转型升级“互联网”,进入在线教育行业。 自主研发“中创网校”学习平台,为学员提供了集直播、视频回放复习、…...

Java 给视频添加背景音乐 | Java工具
目录 前言 Maven依赖 环境依赖 代码 总结 前言 本文提供给视频添加背景音乐的java工具,一如既往的实用主义。 Maven依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1.1…...

【JUC2022】第二章 多线程锁
【JUC2022】第二章 多线程锁 文章目录【JUC2022】第二章 多线程锁一、乐观锁与悲观锁1.悲观锁2.乐观锁二、八锁案例1.标准情况,有a、b两个线程,请问先打印邮件还是短信【结果:邮件】2.sendEmail方法中加入暂停3秒钟,请问先打印邮件…...

快学会这个技能-.NET API拦截技法
大家好,我是沙漠尽头的狼。 本文先抛出以下问题,请在文中寻找答案,可在评论区回答: 什么是API拦截?一个方法被很多地方调用,怎么在不修改这个方法源码情况下,记录这个方法调用的前后时间&…...

stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
文章目录一、uart_init(串口初始化)二、USART1_IRQHandler(串口1中断服务程序)三、main.c(主函数)四、关于printf的支持一、uart_init(串口初始化) 就是根据上一篇的一样的步骤&…...
Hystrix资源隔离
目录资源隔离使用资源隔离的好处基于Hystrix实现微服务中资源隔离基于Hystrix线程池隔离实现资源隔离利用 HystrixCommand 获取单条数据利用 HystrixObservableCommand 批量获取数据基于 Hystrix 信号量机制实现资源隔离资源隔离 资源隔离是什么? 资源隔离是指把对…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...