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.mzph.cn/diannao/12254.shtml

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

相关文章

RedisTemplate操作Redis详解之连接Redis及自定义序列化

连接到Redis 使用Redis和Spring时的首要任务之一是通过IoC容器连接到Redis。为此,需要java连接器(或绑定)。无论选择哪种库,你都只需要使用一组Spring Data Redis API(在所有连接器中行为一致):…

面对.halo勒索病毒,如何有效防范与应对?

导言: 随着网络技术的不断发展,网络安全问题也日益凸显。其中,勒索病毒作为一种极具破坏性的网络攻击手段,近年来在全球范围内频发。其中,.halo勒索病毒作为勒索病毒家族中的一员,其危害性和传播性不容忽视…

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Proposed Approach4 Experiments5 Conclusion 文章信息: 原文链接:https://ojs.aaai.org/index.php/AAAI/article/view/4…

二叉树专题(有关二叉树的相关学习)

二叉树 1.数概念及结构 1.1树的结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结…

ollama离线部署llama3(window系统)

首先介绍下ollama是什么?Ollama是一个开源的大型语言模型服务工具,旨在为用户提供本地化的运行环境,满足个性化的需求。具体来说,Ollama是一个功能强大的开源框架,可以简化在Docker容器中部署和管理大型语言模型&a…

【C++】内联函数、auto、范围for

文章目录 1.内联函数2.auto关键字2.1auto简介2.2auto的注意事项2.3auto不能推导的场景 3.基于范围的for循环(C11)4.指针空值nullptr(C11) 1.内联函数 概念: 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函…

商场综合体能源监管平台,实现能源高效管理

商场作为大型综合体建筑,其能源消耗一直是备受关注的问题。为了有效管理商场能耗,提高商场能源效率,商场综合体能源监管平台应运而生。 商场综合体能源监管平台可通过软硬件一起进行节能监管,硬件设备包括各种传感器、监测仪表和…

Matter 1.3版标准新出炉,支持更多智能家居/家电/能源等设备

5月8日,CSA连接标准联盟正式发布了Matter 1.3标准,过去CSA一直保持约每六个月一次的标准更新节奏。 图源CSA连接标准联盟官方 获得一系列改进的Matter 1.3标准,将提升设备的互操作性,扩展支持的设备类别,并增强整个智…

Android 几种系统升级方式详解

目录 ◆ 概述 ● 几种启动模式 ● MISC分区 ● CACHE分区 ● 几种系统升级方式 ◆ Recovery升级 ● 升级包构成,签名,制作 ● 升级脚本 ● 升级过程 ◆ OTA升级 ● 升级包构成,制作 ● 升级脚本 ● 升级过程 ◆ fastboot升级 ◆ ADB升级 几…

【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法

复数移相,也称为复数相位旋转,就是在原有复数的基础上,不改变模数,只把相位角做一定的偏移。 文章目录 前言 三角函数移相 复数乘法移相 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编…

(三)Spring教程——依赖注入与控制反转

Spring框架是为了简化企业级应用开发而创建的,其强大之处在于对Java SE和Java EE开发进行全方位的简化,Spring还对常用的功能进行封装,可以极大地提高Java EE的开发效率。 依赖注入是Spring的核心技术之一,也被称为“控制反转”&a…

【Linux】自动化编译工具——make/makefile(超细图例详解!!)

目录 一、前言 二、make / Makefile背景介绍 🥝Makefile是干什么的? 🍇make又是什么? 三、demo实现【见见猪跑🐖】 四、依赖关系与依赖方法 1、概念理清 2、感性理解【父与子👨】 3、深层理解【程序…

【JavaEE】HTTP 协议

文章目录 一、HTTP 协议1、HTTP 是什么2、理解 "应用层协议"3、理解 HTTP 协议的工作过程4、HTTP 协议格式5、HTTP 请求 (Request)5.1 认识 URL 6、 二、HTTPS1、HTTPS是什么2、"加密" 是什么3、HTTPS 的工作过程3.1 对称加密3.2 非对称加密3.3 证书3.4 完…

零样本身份保持:ID-Animator引领个性化视频生成技术新前沿

在最新的研究进展中,由Xuanhua He及其团队提出的ID-Animator技术,为个性化视频生成领域带来了突破性的创新。这项技术的核心在于其零样本(zero-shot)人物视频生成方法,它允许研究者和开发者根据单一的参考面部图像生成…

深度解刨性能测试工具Locust

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 Locust安装 …

gin框架学习笔记(三) ——路由请求与相关参数

参数种类与参数处理 查询参数 在讲解查询参数的定义之前,我们先来看一个例子,当我打开了CSDN,我现在想查看我的博客浏览量,那么我就需要点击我的头像来打开我的个人主页,像下面这样: 我们现在把浏览器的网址取下来,…

【35分钟掌握金融风控策略27】贷中风控策略与客户运营体系

目录 贷中风控策略与客户运营体系 贷中风控日标 贷中风控数据源 贷中风控策略与客户运营体系 贷中是风控的第二道防线,贷中阶段风控的重点工作就是存量客户风控及运营。在当下,新客市场趋于饱和且获客成本越来越高,所以,在做好…

基于Java的俄罗斯方块游戏的设计与实现

关于俄罗斯方块项目源码.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89300281 基于Java的俄罗斯方块游戏的设计与实现 摘 要 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑、手机、掌上游戏机产品,是一款游戏规则简单…

在React中利用Postman测试代码获取数据

文章目录 概要名词解释1、Postman2、axios 使用Postman测试API在React中获取并展示数据小结 概要 在Web开发中,通过API获取数据是一项常见任务。Postman是一个功能强大的工具,可以帮助开发者测试API,并查看API的响应数据。在本篇博客中&…

【C语言】—— 动态内存管理

【C语言】——动态内存管理 一、动态内存管理概述1.1、动态内存的概念1.2、动态内存的必要性 二、 m a l l o c malloc malloc 函数2.1、函数介绍2.2、应用举例 三、 c a l l o c calloc calloc 函数四、 f r e e free free 函数4.1、函数介绍4.2、应用举例 五、 r e a l l o …