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-composeports:- "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: alwaysgrafana:image: grafana/grafana# network_mode: "host"container_name: grafana-composeports:- "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 的地址
    • 开发时,写本机当前的地址
    • 生产时,注意添加正确的地址

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“图生视频”技术创新:剪贴画秒变动画生成的实验验证与分析

在最近的研究进展中,AniClipart系统的问世标志着文本到视频生成技术的一个重要里程碑。这一系统由香港城市大学和莫纳什大学的研究者们共同开发,旨在解决将静态剪贴画图像根据文本提示自动转换成动画序列的挑战。传统的动画制作流程繁琐且耗时&#xff0…

【opencv】答题卡判分实验

实验环境: anaconda、jupyter notebook 实验用的包:numpy、matplotlib、opencv 实验的目的还是以熟悉图像的透视变换、轮廓特征提取为主要目的 关于如何判断答题卡被选项:通过几个覆盖备选项的掩膜与原二值图像想与,最终整个图像…

基于BF算法和KMP算法的病毒感染检测

案例引入: 实验任务: 代码实现: 注意:我以项目的形式编写此代码,编译环境为VS2022,代码移植可能会导致错误 mystring.h:存放结构体以及函数声明 #define _CRT_SECURE_NO_WARNINGS #pragma on…

2024中国应急(消防)品牌巡展西安站成功召开!惊喜不断

消防品牌巡展西安站 5月10日,由中国安全产业协会指导,中国安全产业协会应急创新分会、应急救援产业网联合主办,陕西消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-西安站成功举办。该巡展旨在展示中国应急(消防&am…

Linux服务器lvm磁盘管理fdisk和df磁盘大小不同修改

服务器端由于硬盘是通过VCenter原来100G磁盘复制的虚拟机,复制完成后,原来100G的磁盘通过选择 磁盘重新复制出150G的磁盘,开机后发现还是原来的100G的磁盘,通过fdisk -l 查看有个sdb是150G, 但是已经划转的lvm盘只有100G, 通过df查看也是原来的100G: pvs查看pv里也是10…

服务器之间实现免密码传输文件(scp免密传输)

问题:需要定时将本服务器的文件传输到指定服务器上作为备份 通过scp实现不同服务器之间的文件传输 正常使用scp传输文件 传输文件命令:scp /data/文件 root服务器地址:/指定目录 传输文件夹命令:scp -r /data/文件 root服务…

ZYNQ专题-在自己的板子上移植U-boot无法联网问题

背景 在开发自己项目的时候,需要针对自己的板子进行相关的移植工作。在完成初步的U-boot移植后,发现U-boot无法ping通host主机。 移植方法是参考的正点原子教程。会不会是因为硬件不一致导致的?如前面文中提到的,板载使用的是KSZ…

pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 tep是一款测试工具,在pytest测试框架基础上集…

GPT-4o 引领人机交互新风向,向量数据库赛道沸腾了

OpenAI 发布 ChatGPT-4o,意味着人机交互进入新的时代。Chat-GPT4o 是一个跨文本、视觉和音频端到端训练的新模型,所有输入和输出都由同一个神经网络处理。这也在告诉所有人,GenAI 连接非结构化数据,非结构化数据之间跨模态的交互正…

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销 《https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf》 Measuring the cost of a context switch is a little trickier. The lmbench benchmark does so by running two processes on a single CPU…

[Vs2019报错找不到服务实例的解决方案]

计算机疑难杂症记录与分享004 Vs2019报错找不到服务实例的解决方案1、问题现象1.1、问题一:打开vs2019打开项目工程文件,直接弹窗报错1.2、问题二:能打开工程了。识别项目文件不兼容问题。 2、问题原因3、问题一的解决3.1、方法一(亲测无效)3…

Java 自然排序和比较器排序区别?Comparable接口和Comparator比较器区别?

注:如果你对排序不理解,请您耐心看完,你一定会明白的。文章通俗易懂。建议用idea运行一下案例。 1)自然排序和比较器排序的区别? 自然排序是对象本身定义的排序规则,由对象实现 Comparable 接口&#xff…