macOS编译和运行prometheus2.54

news2024/11/27 3:43:39

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本文详述了在macOS(M2芯片)上编译和运行prometheus2.54版本的过程,以及安装node_exporter和grafana并使用prometheus指标进行展示

本地环境

  • 操作系统:macOS Sonoma(14.6.1)
  • go版本:1.23.0
  • prometheus:2.54

准备工作

  • 首先要装好npm,官方编译命令会用到,我这里是用brew安装的
brew install npm
  • 执行npm version命令验证是否安装成功
npm version
{
  npm: '10.8.3',
  node: '22.9.0',
  acorn: '8.12.1',
  ada: '2.9.0',
  amaro: '0.1.8',
  ares: '1.33.1',
  brotli: '1.1.0',
  cjs_module_lexer: '1.4.1',
  cldr: '44.1',
  icu: '74.2',
  llhttp: '9.2.1',
  modules: '127',
  napi: '9',
  nbytes: '0.1.1',
  ncrypto: '0.0.1',
  nghttp2: '1.63.0',
  openssl: '3.3.2',
  simdjson: '3.10.0',
  simdutf: '5.5.0',
  sqlite: '3.46.1',
  tz: '2023c',
  undici: '6.19.8',
  unicode: '15.1',
  uv: '1.49.0',
  uvwasi: '0.0.21',
  v8: '12.4.254.21-node.19',
  zlib: '1.2.12'
}
  • 在编译开源项目时,本地go版本与项目的go版本经常不一致,这时最好有工具能在本地管理多个go版本,如此用到哪个就切换到哪个,我这里用的是gvm,安装方式如下
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
  • 安装成功后,执行gvm listall查看所有可以安装的go版本
gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   go1.1
   go1.1rc2
   go1.1rc3
   ...
   ...
  • 根据prometheus项目的go.mod中的版本信息,要用到1.23.0版本,这里用gvm来安装,要注意的是gvm支持两种方式:下载源码本地编译、直接下载二进制文件,前一种执行以下命令
gvm install go1.23.0
  • 注意这种方式对已有go版本有一定要求,例如编译1.23就有要求本地必须要有1.20,如果您嫌麻烦,可以选择第二种方式,即直接下载编译好的二进制文件,命令如下,可见是多了个-B参数
gvm install go1.23.0 -B
  • 安装完成后,执行gvm use go1.23.0命令使用
gvm use go1.23.0
Now using version go1.23.0
  • 再检查,版本已经切换成功
go version
go version go1.23.0 darwin/arm64

下载promethus源码

  • 在prometheus的发布页面选择合适的版本,然后下载源码
  • 我这里选择的是2.54.1
    在这里插入图片描述

编译

  • 下载源码后解压,再进入解压后的目录prometheus-2.54.1
  • 执行make build开始编译prometheus源码,控制台只要不报错就是成功,最后输出的是一些依赖包的下载信息
go: downloading github.com/mattn/go-colorable v0.1.13
go: downloading github.com/hashicorp/go-immutable-radix v1.3.1
go: downloading github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
go: downloading github.com/emicklei/go-restful/v3 v3.11.0
go: downloading github.com/hashicorp/golang-lru v0.6.0
 >   promtool
go: downloading github.com/google/pprof v0.0.0-20240711041743-f6c9dda6c6da
go: downloading github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1
  • 查看当前目录,通过更新时间发现新生成了两个文件,这就是编译结果
    在这里插入图片描述
  • 现在编译已经完成,接下来验证这个新编译的prometheus是否可用

部署node_exporter

  • 验证prometheus是否可用的方法是通过prometheus采集当前电脑的机器指标,然后在prometheus页面上查看
  • 首先下载node_exporter,在发布页面选择适合自己电脑的版本,我这里是M2芯片的macOS,因此选择darwin和arm的组合
    在这里插入图片描述
  • 下载后解压,进入node_exporter目录,执行
./node_exporter
  • 在mac系统中这样的文件会比阻止运行,需要手动放开限制
    在这里插入图片描述
  • 启动后控制台输出如下,可见有很多个collector,cpu、磁盘、内存等等
./node_exporter
ts=2024-10-04T11:56:36.515Z caller=node_exporter.go:193 level=info msg="Starting node_exporter" version="(version=1.8.2, branch=HEAD, revision=f1e0e8360aa60b6cb5e5cc1560bed348fc2c1895)"
ts=2024-10-04T11:56:36.515Z caller=node_exporter.go:194 level=info msg="Build context" build_context="(go=go1.22.5, platform=darwin/arm64, user=root@dc3a6de96cb1, date=20240714-11:56:30, tags=unknown)"
ts=2024-10-04T11:56:36.516Z caller=filesystem_common.go:111 level=info collector=filesystem msg="Parsed flag --collector.filesystem.mount-points-exclude" flag=^/(dev)($|/)
ts=2024-10-04T11:56:36.516Z caller=filesystem_common.go:113 level=info collector=filesystem msg="Parsed flag --collector.filesystem.fs-types-exclude" flag=^devfs$
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:111 level=info msg="Enabled collectors"
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=boottime
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=cpu
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=diskstats
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=filesystem
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=loadavg
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=meminfo
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=netdev
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=os
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=powersupplyclass
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=textfile
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=thermal
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=time
ts=2024-10-04T11:56:36.516Z caller=node_exporter.go:118 level=info collector=uname
ts=2024-10-04T11:56:36.517Z caller=tls_config.go:313 level=info msg="Listening on" address=[::]:9100
ts=2024-10-04T11:56:36.517Z caller=tls_config.go:316 level=info msg="TLS is disabled." http2=false address=[::]:9100

prometheus配置

  • 现在node_exporter已经启动,就等着prometheus来采集数据了,启动prometheus前先准备好对应的配置文件
  • 在构建好的prometheus文件所在目录下,新增config.yml,内容如下
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # 第一个任务是采集prometheus自己的数据
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  # 第二个任务是采集node_exporter的数据
  - job_name: "my_computer"
    static_configs:
      - targets: ["localhost:9100"]

启动prometheus

  • 执行启动命令,并且指定刚才创建的配置文件
./prometheus --config.file=config.yml
  • 启动时控制台输出如下
~/temp/202410/04/prometheus-2.54.1  ./prometheus --config.file=config.yml
ts=2024-10-04T12:21:47.809Z caller=main.go:601 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2024-10-04T12:21:47.809Z caller=main.go:645 level=info msg="Starting Prometheus Server" mode=server version="(version=2.54.1, branch=non-git, revision=non-git)"
ts=2024-10-04T12:21:47.809Z caller=main.go:650 level=info build_context="(go=go1.23.0, platform=darwin/arm64, user=will@willdeAir, date=20241004-10:01:51, tags=netgo,builtinassets,stringlabels)"
ts=2024-10-04T12:21:47.809Z caller=main.go:651 level=info host_details=(darwin)
ts=2024-10-04T12:21:47.809Z caller=main.go:652 level=info fd_limits="(soft=10240, hard=unlimited)"
ts=2024-10-04T12:21:47.809Z caller=main.go:653 level=info vm_limits="(soft=unlimited, hard=unlimited)"
ts=2024-10-04T12:21:47.811Z caller=web.go:571 level=info component=web msg="Start listening for connections" address=0.0.0.0:9090
ts=2024-10-04T12:21:47.812Z caller=main.go:1160 level=info msg="Starting TSDB ..."
ts=2024-10-04T12:21:47.813Z caller=tls_config.go:313 level=info component=web msg="Listening on" address=[::]:9090
ts=2024-10-04T12:21:47.813Z caller=tls_config.go:316 level=info component=web msg="TLS is disabled." http2=false address=[::]:9090
ts=2024-10-04T12:21:47.814Z caller=head.go:626 level=info component=tsdb msg="Replaying on-disk memory mappable chunks if any"
ts=2024-10-04T12:21:47.814Z caller=head.go:713 level=info component=tsdb msg="On-disk memory mappable chunks replay completed" duration=24.958µs
ts=2024-10-04T12:21:47.814Z caller=head.go:721 level=info component=tsdb msg="Replaying WAL, this may take a while"
ts=2024-10-04T12:21:47.815Z caller=head.go:793 level=info component=tsdb msg="WAL segment loaded" segment=0 maxSegment=0
ts=2024-10-04T12:21:47.815Z caller=head.go:830 level=info component=tsdb msg="WAL replay completed" checkpoint_replay_duration=42.209µs wal_replay_duration=547.125µs wbl_replay_duration=42ns chunk_snapshot_load_duration=0s mmap_chunk_replay_duration=24.958µs total_replay_duration=628.75µs
ts=2024-10-04T12:21:47.816Z caller=main.go:1181 level=info fs_type=1a
ts=2024-10-04T12:21:47.816Z caller=main.go:1184 level=info msg="TSDB started"
ts=2024-10-04T12:21:47.816Z caller=main.go:1367 level=info msg="Loading configuration file" filename=config.yml
ts=2024-10-04T12:21:47.830Z caller=main.go:1404 level=info msg="updated GOGC" old=100 new=75
ts=2024-10-04T12:21:47.830Z caller=main.go:1415 level=info msg="Completed loading of configuration file" filename=config.yml totalDuration=13.984667ms db_storage=459ns remote_storage=750ns web_handler=292ns query_engine=375ns scrape=13.677291ms scrape_sd=44.25µs notify=28µs notify_sd=3.417µs rules=1.458µs tracing=12.166µs
ts=2024-10-04T12:21:47.830Z caller=main.go:1145 level=info msg="Server is ready to receive web requests."
ts=2024-10-04T12:21:47.830Z caller=manager.go:164 level=info component="rule manager" msg="Starting rule manager..."

验证prometheus

  • 浏览器打开http://localhost:9090/
    在这里插入图片描述
  • 随意选一个指标查看,这里用的是node_load1,含义是系统一分钟内的负载
    在这里插入图片描述

部署grafana

  • 其实此刻prometheus的验证已经完成了,但如果想了解更多prometheus指标和PromQL的信息,可以部署grafana,然后去查看一些经典视图的详情
  • 先去下载Grafana,在下载页面可以看到各下载链接,需要根据自己电脑的实情下载
    在这里插入图片描述
  • 下载完毕后解压,得到新文件夹grafana-v11.1.7,进入后执行以下命令即可启动grafana
./bin/grafana server
  • 启动成功后控制台信息
INFO [10-04|21:24:36] HTTP Server Listen                       logger=http.server address=[::]:3000 protocol=http subUrl= socket=
ERROR[10-04|21:24:36] Could not get process start time, could not read "/proc": stat /proc: no such file or directory logger=grafana-apiserver
INFO [10-04|21:24:36] Adding GroupVersion playlist.grafana.app v0alpha1 to ResourceManager logger=grafana-apiserver
INFO [10-04|21:24:36] Adding GroupVersion featuretoggle.grafana.app v0alpha1 to ResourceManager logger=grafana-apiserver
INFO [10-04|21:24:39] Update check succeeded                   logger=plugins.update.checker duration=2.81132025s
INFO [10-04|21:24:39] Update check succeeded                   logger=grafana.update.checker duration=2.811167917s
INFO [10-04|21:25:11] Request Completed                        logger=context userId=0 orgId=0 uname= method=GET path=/ status=302 remote_addr=[::1] time_ms=1 duration=1.309584ms size=29 referer= handler=/ status_source=server
INFO [10-04|21:25:21] Usage stats are ready to report          logger=infra.usagestats
  • 现在grafana已经启动,可以在浏览器打开了,地址:http://localhost:3000/
  • 登录页面如下,账号密码都是admin
    在这里插入图片描述
  • 登录后需要配置数据源,这样才能展示prometheus的数据
    在这里插入图片描述
  • 选择Prometheus
    在这里插入图片描述
  • 在配置页面只需填写prometheus地址
    在这里插入图片描述
  • 然后点击底部的Save & test按钮
    在这里插入图片描述
  • 这样就配置好了数据源,接下来去看看有哪些优秀的dashboard值得学习
  • 打开网页https://grafana.com/grafana/dashboards/
  • 因为现在只有node_exporter的指标,所以要做一下过滤
    在这里插入图片描述
  • 这里选择第一个Node Exporter Full,进入详情页后点击下图黄色剪头的按钮,得到这个视图的ID
    在这里插入图片描述
  • 拿到了视图ID,接下来可以去grafana导入了,操作如下,箭头3指向的1860就是视图ID
    在这里插入图片描述
  • 接下来的页面中,选择prometheus数据源,然后导入
    在这里插入图片描述
  • 导入成功后,可以看到机器的各项指标
    在这里插入图片描述
  • 需要注意的是内存指标无法展示,这是因为mac电脑的内存指标与视图中用的不同所致
  • 选一个视图细看,这里选择了网络监控Network Traffic
    在这里插入图片描述
  • 如下图操作,进入编辑页面,可以看到更多详情
    在这里插入图片描述
  • 在编辑页面,可以看到grafana视图是如何使用prometheus指标的,后续我们的开发和配置都能从这里获取参考信息
    在这里插入图片描述
  • 把上面的表达式放到prometheus页面也能展现相同效果
    在这里插入图片描述
  • 至此,整个编译和验证过程已经完成,如果您也在编译和使用prometheus,希望本文能给您一些参考

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

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

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

相关文章

【含文档】基于Springboot+Vue的活力健身馆管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

HTB:Preignition[WriteUP]

连接至HTB服务器并启动靶机 靶机IP&#xff1a;10.129.157.49 分配IP&#xff1a;10.10.16.12 1.Directory Brute-forcing is a technique used to check a lot of paths on a web server to find hidden pages. Which is another name for this? (i) Local File Inclusion, (…

喜欢听音乐的朋友,怎么能少这个音乐插件?

喜欢听音乐的朋友有福利了&#xff0c;今天小编给大家带来一个非常酷的音乐插件&#xff0c;让你的音乐在桌面跳动起来~&#xff01;想象一下&#xff0c;随着旋律的起伏&#xff0c;你的桌面仿佛被赋予了生命&#xff0c;音符跳跃、光影交错&#xff0c;每一首歌都化作了眼前流…

电源入口防护电路

电源入口防护电路 原则:先防护&#xff0c;后防反&#xff0c;最后滤波基本防护器件防反措施 原则:先防护&#xff0c;后防反&#xff0c;最后滤波 在设计电路保护方案时&#xff0c;遵循“先防护&#xff0c;后防反&#xff0c;最后滤波”的原则是非常重要的。这种顺序确保了…

Python入门--函数

目录 1. 函数介绍 2. 函数的定义 3. 函数的参数 4. 函数的返回值 5. 函数说明文档 6. 函数的嵌套调用 7. 函数的作用域 (1). 局部变量 (2). 全局变量 (3). global关键字 1. 函数介绍 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能…

【无题】夜入伊人笑愉,泪湿心夜难眠。

在这句诗中&#xff0c;意境描绘了一种深沉的情感体验&#xff0c;充满了温柔与哀愁。诗人通过“夜入伊人笑愉”开启了一段梦境之旅&#xff0c;其中“夜入”象征着进入梦境的状态。在这个梦幻的世界里&#xff0c;诗人与心爱的人欢笑嬉戏&#xff0c;那份快乐和亲昵如同真实的…

java高并发场景RabbitMQ的使用

场景是面试时被问到&#xff0c;一次性请求100多万个前端请求&#xff0c;请问你如果进行后端处理。因为之前的电商也没有一次性这么大的业务量&#xff0c;所以只是前端nginx做了对应的负载均衡技术。所以回答的不是那么流畅。面试官的回答你可以用RabbitMQ做分流,削峰,异步处…

什么是 ARP 欺骗和缓存中毒攻击?

如果您熟悉蒙面歌王&#xff0c;您就会明白蒙面歌王的概念&#xff1a;有人伪装成别人。然后&#xff0c;当面具掉下来时&#xff0c;您会大吃一惊&#xff0c;知道了这位名人是谁。类似的事情也发生在 ARP 欺骗攻击中&#xff0c;只是令人惊讶的是&#xff0c;威胁行为者利用他…

中小型网络系统综合实验

一、实验要求 1.pc端自动获取ip地址&#xff0c;可以互通访问&#xff0c;可以访问域名解析服务器 2.设置vlan&#xff0c;三层交换机实现不同vlan之间的交流 3.设置静态路由&#xff0c;配置nat地址转换&#xff0c;实现全网可达 二、实验思路 1.首先给LSW2配置vlan 10 &a…

双十一不能错过的好物推荐!强推五款超好用的品牌好物

双十一快到了&#xff0c;这个时候的优惠力度都是最大的&#xff0c;还不知道买啥的小伙伴们赶紧来看这篇好物推荐&#xff01;以下五款产品是我花了几天时间精心挑选出来的&#xff0c;看完之后保证你想加入购物车&#xff01; 品牌好物推荐一、希亦CG超声波清洗机 如果你带眼…

用Manim实现高尔顿板(Galton Board)

高尔顿板的介绍 高尔顿板&#xff08;Galton Board&#xff09;&#xff0c;有时也称为贝尔图&#xff08;Bean Machine&#xff09;&#xff0c;是由英国统计学家弗朗西斯高尔顿&#xff08;Francis Galton&#xff09;于19世纪末发明的一种物理装置&#xff0c;用于演示随机分…

【智能算法应用】蒲公英优化算法求解二维路径规划问题

摘要 在二维路径规划问题中&#xff0c;通常需要在不规则的障碍物环境中找到一条从起点到终点的最优路径。本文应用蒲公英优化算法&#xff08;DOA&#xff09;进行路径规划&#xff0c;其能够有效避开障碍物并找到最短路径。通过实验验证&#xff0c;DOA具有收敛速度快、全局…

2024年【金属非金属矿山(露天矿山)安全管理人员】模拟试题及金属非金属矿山(露天矿山)安全管理人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;露天矿山&#xff09;安全管理人员模拟试题参考答案及金属非金属矿山&#xff08;露天矿山&#xff09;安全管理人员考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山&#…

SAP学习笔记 - Basis01 - 创建Client ,拷贝Client

最近工作当中用到了Client间数据移送的内容&#xff0c;想把自己的虚机给弄两个Client。 最后也没完全弄成&#xff0c;先把过程整理一下&#xff0c;以后有空接着弄。 目录 1&#xff0c;SALE - 新建逻辑系统 2&#xff0c;SCC4 - 分配Client到集团 3&#xff0c;RZ10 - 取…

算法【Java】—— 二叉树的深搜

深搜 深搜简单来说就是一直递归到底&#xff0c;然后返回&#xff0c;以二叉树为例&#xff0c;就是从根节点出发一直搜索到叶子节点&#xff0c;然后想上返回。 这里简单说明一下&#xff1a;深搜的英文缩写是 dfs&#xff0c;下面定义深搜函数名我直接命名为 dfs 实战演练 …

AVL树的创建与检测

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 目录 一、什么是AVL树&#xff1f; 二、平衡因子 1、什么是平衡因子&#xff1f; 2、平衡因子如何更新&#xff1f; 三、单旋 1、左单旋 ​编辑 2、右单旋 四、双旋…

OSPF的不规则区域

1.远离骨干非骨干区域 2.不连续骨干 解决方案 tunnel ---点到点GRE 在合法与非ABR间建立隧道&#xff0c;然后将其宣告于OSPF协议中&#xff1b; 缺点&#xff1a;1、周期和触发信息对中间穿越区域造成资源占用&#xff08;当同一条路由来自不同区域&#xff0c;路由器会先…

JS基础练习|动态创建多个input并且用数组记录其中的数据

效果图 、 在点击添加输入框的时候&#xff0c;创建新的元素&#xff0c;并且为其绑定响应的事件。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…

稀缺森林火险等级预测算法,基于xgboost方法的火险等级预测,共划分5级,依据当前地区月份,降水量,风力等参数进行预测,并提供15000字的报告

森林火险等级预测算法&#xff0c;基于xgboost方法的火险等级预测&#xff0c;共划分5级&#xff0c;依据当前地区月份&#xff0c;降水量&#xff0c;风力等参数进行预测&#xff0c;并提供15000字的报告 森林火险等级预测算法介绍 项目名称 基于XGBoost的森林火险等级预测算…

双向无头非循环链表的简单实现及介绍

前言 欢迎大家阅读小奥奇的新作&#xff0c;听说上一篇我们留下了一点点 “ 简单的题目 ” &#xff0c;我们在本篇要干什么呢&#xff0c;请看本篇任务&#xff01; 本篇任务概述&#xff1a; 1、解决 “ 简单的遗留题目 ” 2、 LInkedList&#xff08;双向&#xff09;的使用…