![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
prometheus
文章平均质量分 58
疯琴
这个作者很懒,什么都没留下…
展开
-
Prometheus源码学习(11)-common_model
prometheus/common 库源码学习原创 2022-07-17 16:19:27 · 661 阅读 · 1 评论 -
Prometheus源码学习(9) scrape-target
主要作用scrape.Target 是一次抓取的具体对象,包含了抓取和抓取后存储所需要的全部信息。从 targetGroup.Group 到 scrape.Target 的转换过程如下:targetsFromGroup函数遍历每个targetGroup.Group中的Target,合并targetGroup.Group的公共标签集(记为A)和这个Target本身的标签集(记为B)为标签集C。populateLabels函数从C和*config.ScrapeConfig中创建Target。以下是具原创 2021-05-23 21:33:52 · 751 阅读 · 0 评论 -
Prometheus源码学习(8) scrape总体流程
1. main 函数中初始化 scrapeManager 实例// 初始化 scrapeManager,fanout Storage 是一个读写多个底层存储的代理scrapeManager = scrape.NewManager(log.With(logger, "component", "scrape manager"), fanoutStorage)fanoutStorage 是读写多个底层存储的代理,实现了 storage.Appendable 接口。scrape.Manager 结构体.原创 2021-05-22 08:39:03 · 1375 阅读 · 0 评论 -
Prometheus源码学习(7) targetgroup
targroup 是抓取目标// Group is a set of targets with a common label set(production , test, staging etc.).// Group 是一组目标的集合,这组目标有一个共同的标签集。type Group struct { // Targets is a list of targets identified by a label set. Each target is // uniquely identifiable原创 2021-05-01 08:43:45 · 500 阅读 · 2 评论 -
Prometheus源码学习(6) labels
github.com/prometheus/prometheus/pkg/labels时间序列由一组 Label 唯一标识。labels包中是对 Label 和 Labels 对象的定义和方法。还有一个构建 Labels 的 Builder 对象。一个标签(Label)就是一个字符串键值对// Label is a key/value pair of strings.type Label struct { Name, Value stringLabels 是 Label 的有序列表,实现了 s原创 2021-04-22 20:09:26 · 1213 阅读 · 0 评论 -
Prometheus源码学习(5) notifier
文章目录notifier 模块Alert 结构体Manager 结构体Manager.Run()Manager.sendAll()习得notifier 模块按照 main.go 的顺序逐个捋一下每个模块的细节。notifier 模块是用于向 Alertmanager 发送告警通知的。主要的结构体包括:AlertManagerOptionsalertMetricsalertmanagerLabelsalertmanagerSetAlert 结构体字段都是 Alertmanager原创 2021-04-21 20:22:55 · 413 阅读 · 0 评论 -
第一次开源项目代码贡献 - prometheus-nginxlog-exporter
2021年2月26日,我的第一次开源项目代码贡献被合并了。这完成了我一个宿愿。几年前老罗向 OpenSSL 捐献手机发布会门票款,我在上班的地铁上看到《隐形战友》这篇文章,有点激动,许下一个心愿:此生哪怕为开源项目贡献一行代码。后来在做模型开发的时候开始参与社区,翻译了一些 Flink 的文档,Flink 的大部分维护者是国人,主力是阿里。大项目要想参与代码贡献是比较难的,尤其是真正有意义的代码,做一做 lint 不能算。所以我先从翻译文档开始,在翻译的过程中可以比较细致的学习项目的功能,同时提高英语读原创 2021-02-28 16:10:04 · 950 阅读 · 9 评论 -
Prometheus源码学习(4) 通过2.24对实例化Discoverer代码的改进学习依赖倒置
前面读的是 2.19.2 版本的代码,最新更新了 2.24.1,发现在实例化 Discoverer 时改进了设计。这个改变是在 2.21 做出的。2.19.2 中的实现方式在 discovery.Manager 结构体中包含了一个 *provider 的 slicetype Manager struct { ... // providers keeps track of SD providers. providers []*provider ...}provider 接口提包原创 2021-02-08 21:35:35 · 223 阅读 · 0 评论 -
Prometheus 通过 nginx log 日志监控应用服务
选型通常后端应用都通过 api 接口暴露服务,通过 nginx log 监控服务有以下特点和优势满足应用监控的需求通过响应状态码识别错误距离用户侧更近,请求时延包含了 nginx 到后端的网络时延,更接近用户体验对后端程序完全无侵入可以通过 namespace 从一份日志中解析出各个服务指标应用监控使用 RED 指标,即request 请求频率error 错误数delay 请求时延监控方案使用 prometheus-nginx-exporter采集 nginx 的 acc原创 2021-02-02 21:05:29 · 4131 阅读 · 0 评论 -
Prometheus源码学习(3) main程序启动
主要工作流程设置命令行参数及其默认值和描述信息解析启动命令的命令行参数为 cfg 实例校验配置文件(–config.file 设置),默认是 prometheus.yml打印 “Starting Prometheus” 和主机系统信息日志初始化子任务对象并发启动各个子任务在单独的 goroutine 中执行的子任务接收 kill/web 终止信号,退出程序启动Scrape Discovery manager启动 Notify Discovery manager启动 Scrape原创 2021-02-01 20:49:28 · 831 阅读 · 0 评论 -
Prometheus 监控 windows process 进程存活
安装 windows-exportermsiexec /i "D:\monitor\windoes_exporter.msi" ENABELD_COLLECTORS="os,cpu,cs.logical_disk,net,system,process" LISTEN_PORT="19182" EXTRA_FLAGS="--collector.process.whitelist=abc|windows_exporter"rule 配置up{job="windows",ip="10.0.0.1"} *原创 2021-01-27 10:22:22 · 3101 阅读 · 3 评论 -
Prometheus源码学习(2) 服务发现
Prometheus 每个被控目标暴露一个 endpoint 供 server 抓取,要获知这些 endpoint 有多种方式,最简单的是在配置文件里静态配置,还有基于 k8s、consul、dns 等多种方式,基于文件的服务发现是比较灵活普遍的一种方式。当监控目标量比较大,变化的频率和量也比较大的时候,用 file SD 比较合适,我尝试过 consul,因为每次更新都要删除全量数据重新填充,所以不太适用这个场景。下文以 file SD 为例研究服务发现。概要介绍(from README.md)SD原创 2021-01-22 20:00:16 · 780 阅读 · 0 评论 -
Prometheus 基于 snmp 监控网络设备注意事项
使用ifHCOUTOctets 而不是 ifOUTOctets,前者是64位的counter,后者是32位的snmp-exporter 的配置文件中,抓什么指标就 walk 什么 oid,最小化 walk 提高效率告警指标通常使用端口占用率而不是端口流量绝对值,ifSpeed 的值 GB口是 1000,也就是10进制,单位是兆比特,例如rate(ifHCOUTOctets{job='snmp',ifOperStatus='1'}[2m]) * 8 / (ifSpeed{ifOperStatus=".原创 2021-01-22 17:29:00 · 2728 阅读 · 0 评论 -
Prometheus 监控进程的内存使用率 PromQL 多对一向量匹配
使用 process-exporter 监控进程,node-expoert 监控节点获取每个进程的内存使用量的表达式为 node_process_namegroup_memory_bytes{job="process",ip="10.1.1.1",memtype="resident"}获取节点总内存量的表达式为 node_memory_MemTotal_bytes{job="node",ip="10.1.1.1"}如果想计算每个进程的内存使用率,简单地将二者相除是得不到结果的,正确的计算表达式为原创 2021-01-21 17:13:04 · 6261 阅读 · 0 评论 -
更新 Prometheus 配置文件的正确姿势
Prometheus 有几种配置文件,每种可能有多个具体的文件。这些配置文件可能包括:配置文件如 prometheus.yml告警规则文件如 rule.yml服务发现用的监控目标文件如 targets.jsonnode-exporter 的 textfile这些文件有些可能会手工修改,然后手工触发 reload,有些可能会由 sidecar 程序监控变更并reload,如 thanos-sidecar,有些可能由自定义的程序进行修改如自己写的 go 程序定期更新目标文件。以监控目标文件为例原创 2021-01-21 15:08:43 · 1945 阅读 · 2 评论 -
Grafana table 表格配置方法
使用 table panel 展示文件系统的使用率,这个指标只关心当前值。在 Query tab 设置 Format 为 Table,勾选 InstantPanel tab 的 Visualization 选择 TableTransform tab 隐藏不显示的列Field tab 设置 Cell display mode 和 Unit修改列名...原创 2021-01-21 14:34:35 · 27959 阅读 · 30 评论 -
Prometheus源码学习(1) 编译源码
代码里面看不明白的变量或者函数可以通过两种方式观测它的值来了解其含义一种是把代码片段摘出来,写到一个测试程序里运行一下另一种时日志里打印它的值来观察第一种比较简单易行,但是代码片段要比较独立才好做,第二种要修改源码重新编译,可以在整个源码上下文中观测,但是需要编码源码,相对麻烦一些,研究源码早晚也要编译,所以先总结一下编译 Prometheus 源码的步骤。编译 Prometheus 源码需要 node.js 和 yarn。我是在 WSL2 上编译的。安装 node.js$ curl -原创 2021-01-19 21:32:51 · 878 阅读 · 0 评论 -
Prometheus源码学习(0) 总览
架构和工作流程Prometheus server 的核心功能模块是 HTTP server、TSDB 、服务发现和指标抓取整个工作流程大概是这样的:通过 Service discovery 知道要抓取什么指标抓取指标数据存入 TSDB客户通过 HTTP server 使用 PromQL 查询结果目录Prometheus源码学习(0) 概览Prometheus源码学习(1) 编译源码Prometheus源码学习(3) 服务发现...原创 2021-01-19 21:31:41 · 238 阅读 · 0 评论