Go微服务: Prometheus性能监控与Grafana平台的搭建

Prometheus 概述

  • promethues 是一套开源的监控&报警&时间序列数据库的组合
  • 基本原理是通过http协议周期性抓取被监控组件的状态
  • 适合Docker、Kubernetes环境的监控系统

Promethues 整体架构

一、抓取数据的两种方式

  • 1 )Short-lived jobs 短暂的任务
    • 不会提供长时间的http去为promethues抓取数据
    • 这个服务很短暂, 运行后就会关闭
    • 短暂的服务怎么去监控
    • 它是通过主动推送数据到网关,进而由 promethues server 端 去抓取 PushGateway 上推上来的数据
  • 2 )另一种方式是 ClientLib/Exporters
    • 可以通过不同的 exporters 提供http的方式
    • 来给 promethues server 来抓取数据

二、Promethues Server 端

  • 主要分为三个环节:抓取,存储,查询
  • 在抓取网关的时候,promethues server 端如何知道抓取哪些链接
    • 获取目标的时候,是通过配置文件,文本文件,consul等方式
    • 来存储我们的抓取目标
    • 比较常用的是通过配置文件来记录下抓取的目标
    • Promethues 根据抓取目标,定期采集数据
  • 当 Promethues 抓取完成后,进行存储阶段
  • Promethues 会根据报警规则计算是否满足报警规则
  • 在报警规则中,会提供报警消息,主动推送给报警模块
  • 报警模块在收到消息后进行一系列的处理来进行报警
  • 另外数据存储进来,提供给客户访问的时候
  • Promethues 还有一个简单的web ui, 通过界面的方式查询存储的数据
  • 以上就是 Promethues 整体架构图

三、Promethues 重要组件

  • 基于架构图,可知里面有很多重要组件
  • Prometheus Server
    • 用于收集和存储时间序列数据
    • 客户端存储用的是 时序 数据库
  • Client Library
    • 客户端库生成相应的 metrics 并暴露给 Prometheus Server 去采集
    • 课程里就是 客户端提供http的端口暴露给 Prometheus Server 让它定期采用数据,达到监控能力
  • Push Gateway
    • 主要用于短期的jobs
    • 短期任务,可能5s采集一次,短期任务可能5s内会完成
    • 这样server端可能采集不到
    • 所以,短期任务,可以主动上报到 Push Gateway 上
    • Server 定期采集 Push Gateway 上的数据
  • Exporters
    • 用于暴露已有的第三方服务的metrics 给 Prometheus
    • 第三方服务,比如 mysql, redis, mongodb, 等等已经写好的一些 exporters 拿来用
    • 主动把需要采集的功能暴露出来,server主动来采集
  • Alertmanager
    • 报警模块,从 Prometheus server 端接收到 alerts 后
    • 会进行一些列去除重复,分组,并路由到接受方式,发出报警
    • 通过微信,email, QQ等等,都是可以进行发送的

Promethues 工作流程

  • promethues server 定期从配置好的 jobs/exporters/PushGateway中拉数据
  • promethues server 记录数据并根据报警规则推送 alert 数据
  • alertmanager 根据配置文件,对接收到的警报进行处理,发出告警
  • 在图形界面中,可视化采集数据,提供一个简单的 web ui,也有一个漂亮的ui工具,在后面介绍

Promethues 数据模型

  • 规定方式存储数据就是数据模型
  • promethues 中存储的数据为时间序列
  • 格式上由 metric 的名字和一系列的标签(键值对)唯一标识组成
  • 不同的标签则代表不同的时间序列

promethues 相关概念 - metric(指标)类型

  • Counter 类型
    • 一种累加的指标,如:请求的个数,出现的错误数等
  • Gauge 类型
    • 可以任意加减,如:温度,运行的 goroutines 的个数
  • Histogram 类型
    • 可以对观察结果采样,分组以及统计,如:柱状图
  • Summary 类型
    • 提供观测值的 count 和 sum 功能,如:请求持续时间

Promethues 相关概念 - instance 和 jobs

  • instance: 一个单独监控的目标,一般对应于一个应用进程
  • jobs: 一组同类型的 instances 的组合 (主要用于保证可扩展性和可靠性)
  • 理解:
    • 假设应用程序处理能力不够,横向扩展了3个应用程序
    • 分别调用这3个应用程序进行监控,但是代码上写的包括暴露端口都一样
    • 我们要监控这一块,要通过 instance 和 jobs 来进行组合
    • 它提供 handler,不同的服务,它认为是不同的 instance
    • 它这个服务及时不一样,但类型是一样的,会基于相同类型组成一个 jobs
    • 这样,不管应用程序扩展了多少个,都可以很细粒度来监控我们的程序

微服务监控系统 grafana 看板

  • 拥有丰富的 dashboard 和 图表编辑的指标分析平台
  • 拥有自己的权限管理和用户管理系统
    • 如果要扩展它,可以在基础上进行定制
  • Grafana 更适合用于数据可视化展示
    • 在日常工作中发现,它的数据可视化展示能力非常的强

微服务监控系统 Promethues + Grafana 安装


1 )拉取镜像

  • $ docker pull prom/prometheus
  • $ docker pull grafana/grafana

2 )基于 docker-compose 部署

version: "2"

services:
  prometheus:
    image: prom/prometheus
    # network_mode: "host"
    container_name: prometheus-compose
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml   #prometheus主配置文件
      - ./prometheus/prometheus-data:/prometheus  #数据存储映射
      - ./prometheus/conf:/etc/prometheus/conf   #prometheus子配置文件路径
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'    #加载主配置文件
      - '--storage.tsdb.path=/prometheus'    #启动数据持久存储
    restart: always

  grafana:
    image: grafana/grafana
    # network_mode: "host"
    container_name: grafana-compose
    ports:
      - "3000:3000"
    volumes:
      # - ./grafana/grafana.ini:/etc/grafana/grafana.ini #grafana配置文件
      - ./grafana/grafana_data:/var/lib/grafana   #数据存储映射
    restart: always

下面开始写这个 prometheus.yml

global:
    scrape_interval: 15s # 默认15s采集一次
    external_labels: # 额外的标签 全局的配置
        monitor: 'go-micro-xxx-monitor'
scrape_configs:
    # 监控的服务:按照一个个的job来监控的
    - job_name: 'services-order'
      scrape_interval: 5s # 覆盖默认值
      static_configs:
        - targets: ['192.168.1.7:9092'] # 这个地址是容器能够访问到的地址,写本机地址, 这个地址在容器或k8s中是会变的, 这个端口是 services-order 的端口
  • 运行:$ docker-compose up
  • 运行起来后,进入prometheus UI界面,访问 ip:9090
  • 注意:
    • prometheus 如果运行在K8s中,这个地址就要特别注意
    • 这里只是用本机来进行prometheus的搭建测试
    • 上面9092端口是services-order中暴露出来的
    • 服务自定义的prometheus端口,以此来采集自身服务的信息
  • 在界面上看下它的 targets ,位置 (上导航,Status 下拉 targets)
  • 点进去 ip:9092/metrics 可以看到一些日志
  • 也可以针对一些指标,使用图表查看
  • 监控系统控制台 ip:3000 来访问, 进入 grafana 看板
  • 输入 admin/admin 之后输入新的密码
  • 进入界面后,左侧倒数第二个菜单,第一个 Configuration 点击 Add data source
    • 选择 第一个 Prometheus 作为我们的源
    • 配置url,这就是 Prometheus 在哪台服务器,能访问到 9090,这是本机,本机的ip:9090
  • 之后,点击下面的 Save & test 按钮
  • 出现 Data source is working 的提示就说明成功了
  • 点击导航顶部的 Add penel 图表, 开始配置看板,如上图
    • 在 Query 下选择 Prometheus
    • 在 Metrics 中 选择 go / go_memstats_gc_sys_bytes
    • 在右侧 Panel 下的 Visualization 选择合适的 graphl
  • 在生产环境上配置的需要注意,Prometheus 的地址
    • 开发时,写本机当前的地址
    • 生产时,注意添加正确的地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/625018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

The Quantcast File System——论文泛读

VLDB 2013 Paper 分布式元数据论文阅读笔记整理 问题 在2013年之前,由于网络链路带宽有限,数据在集群中移动速度慢,因此Hadoop尽量将数据留在原来的位置,并将处理代码发送给它。随着网络链路的发展,可以之前更高的数…

2024年为什么很多电商商家,都想涌入视频号,究竟是什么原因?

大家好,我是电商糖果 对电商有了解的朋友,在今年肯定发现一个现象,那就是很多商家对视频号比较青睐。 视频号究竟有何魔力,让越来越多的商家都想要入驻。 其实很简单,它让商家看到了市场。 视频号背后是谁&#xf…

SpringBoot集成Curator实现Zookeeper基本操作

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Zookeeper是一个Ap…

未来想从事营销策划类的工作,需要怎么学习?

从事营销策划类的工作,提升和学习主要从以下三个方面: 一、营销底层逻辑的搭建 二、营销系统知识的构建 三、大量营销案例的积累 营销入门,其实大多数人一直都在入门的道路上,每个人都是终身学习者。虽然从事营销工作十年多了…

PMP考前冲刺攻略,考试前必看

调整心态 考场就像战场一样,不仅仅是实力的较量,更是心理素质的较量。如果感到过于焦虑,可以通过运动等方式来缓解,也可以多与家人、朋友和老师沟通。只有稳定心态才能发挥出最大的实力! 高效学习 课本是基础&#…

C#学习笔记12:Winform网页操作-CefSharp内嵌浏览器

今日学习使用Winform操作网页,先从从窗体内嵌一个浏览器开始吧: 文章提供测试代码讲解、测试效果图、整体测试工程下载 目录 CefSharp介绍与安装: 创建解决方案安装CefSharp: 控件放置: 整体代码贴出: 更改…

上位机图像处理和嵌入式模块部署(树莓派4b的提高版)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 目前人工智能非常火,但是人工智能需要极高的算力和海量的数据,因此相关的关联公司非常吃香,nvidia就是提供算力…

【Pytorch】7.使用Module模块搭建简易神经网络

什么是Moudel模块 torch.nn中的module是PyTorch中用于构建神经网络模型的基本单元。它包含了各种神经网络层、激活函数、损失函数等,可以通过组合不同的module来构建复杂的神经网络模型。每个module都包含了参数和方法,可以进行前向传播和反向传播等操作…

Linux软件RAID:数据冗余与性能提升的完美融合

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、软件RAID的概念 2、软件RAID与硬件RAID的对比…

鱼哥好书分享活动第22期:《数字政府网络安全合规性建设指南》解锁数字政府网络安全新篇章

鱼哥好书分享活动第22期:《《数字政府网络安全合规性建设指南》》解锁数字政府网络安全新篇章 阅读对象:书籍目录:了解更多:赠书抽奖规则: 当今时代,数据已成为新型生产要素,不仅是个人、企业乃至国家的重要…

SystemC学习使用记录

一、概述 对于复杂的片上系统,在进行RTL编码前,需进行深入的系统级仿真,以确认设计的体系结构是否恰当、总线是否能满足吞吐量和实现性要求以及存储器是否浪费,所进行的这些仿真要求在芯片的仿真模型上运行大量的软件&#xff0c…

【软件测试】自动化测试 Selenium 篇(一)

一、什么是自动化测试 1、自动化测试介绍 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化就相当于将人工测试手段进行转换…

2024中国(厦门)国际医用消毒及感控设备展览会

2024中国(厦门)国际医用消毒及感控设备展览会 2024 China (Xiamen) International Medical Disinfection And Infection Control Exhibition 致力于打造医用消毒及感控设备产业采购一站式平台 时 间:2024年11月1-3日 November 1-3, 2024 …

6、Qt—Log4Qt使用小记1

开发平台:Win10 64位 开发环境:Qt Creator 13.0.0 构建环境:Qt 5.15.2 MSVC2019 64位 一、Log4Qt简介 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C 端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apa…

智能革新:如何用会话式AI提升您的工作效率?

提升职场竞争力,会话式AI产品助你走在时代前沿 在当今的职场环境中,提高工作效率是每一位人力资源管理者追求的目标。而在效率的背后,往往隐藏着工作方法的正确与否。在众多提升效率的方法中,人工智能技术无疑是一股不可忽视的力量…

Linux-页(page)和页表

本文在页表方面参考了这篇博客,特别鸣谢! 【Linux】页表的深入分析 1. 页帧和页框 页帧(page frame)是内存的最小可分配单元,也开始称作页框,Linux下页帧的大小为4KB。 内核需要将他们用于所有的内存需求&a…

CAN模块开发问题概述

问题一 问题描述 工作环境:ECU外接canoe 操作:使用CANoe模拟发送NM报文,然后停发或者断开CANoe 现象:程序跑死,调用call stack查看压栈情况如下图所示 定位代码如下图所示。可见是由于CAN模块在设置Controller状态时…

视频推拉流/视频直播点播平台EasyDSS使用Mysql数据库接口报错502如何处理?

视频推拉流/视频直播点播EasyDSS互联网直播平台支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访…

MySql初学日记

MySql基础 概述 结构化查询语言(Structure Query Language)简称SQL。 是一种特殊的,标准的数据库编程语言,,一般的数据库管理系统都支持,用于对数据库进行增删改查等操作,实现数据持久化到本地。 使用完整的管理系…

如何判断点在多边形内部:OpenCV--cv2.pointPolygonTest()方法详解

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…