既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
Prometheus 还提供远程存储选项。这主要是存储可扩展性、长期存储、备份和灾难恢复等所必需的。
Prometheus 目标
Target 是 Prometheus 抓取指标的来源。目标可以是服务器、服务、Kubernetes Pod、应用程序端点等。
默认情况下,prometheus 在目标路径下查找指标。可以在目标配置中更改默认路径。这意味着,如果您未指定自定义指标路径,Prometheus 会在 /metrics
下查找指标。**/metrics**
目标配置位于配置文件的scrape_configs下。下面是一个示例配置。Prometheus
scrape_configs:
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter1:9100', 'node-exporter2:9100']
- job_name: 'my_custom_job'
static_configs:
- targets: ['my_service_address:port']
metrics_path: '/custom_metrics'
- job_name: 'blackbox-exporter'
static_configs:
- targets: ['blackbox-exporter1:9115', 'blackbox-exporter2:9115']
metrics_path: /probe
- job_name: 'snmp-exporter'
static_configs:
- targets: ['snmp-exporter1:9116', 'snmp-exporter2:9116']
metrics_path: /snmp
从目标端点,prometheus 需要特定文本格式的数据。每个指标都必须位于新行上。
通常,这些指标使用在目标上运行的 prometheus 导出器在目标节点上公开。
Prometheus 导出器
导出器就像在目标上运行的代理。它将指标从特定系统转换为 prometheus 理解的格式。
它可以是 CPU、内存等系统指标,也可以是 Java JMX 指标、MySQL 指标等。
默认情况下,这些转换后的指标由导出器在目标的 /metrics
路径(HTTPS 端点)上公开。
例如,如果要监视服务器的 CPU 和内存,则需要在该服务器上安装节点导出器,并且节点导出器会在 /metrics
上以 prometheus 指标格式公开 CPU 和内存指标。
一旦 Prometheus 提取了指标,它将组合指标名称、标签、值和时间戳,为该数据提供结构。
有很多社区导出器可用,但只有其中一些得到了 Prometheus 的正式批准。如果需要更多自定义项,则需要创建自己的导出器。
Prometheus 将导出器分为各个部分,例如数据库、硬件、问题跟踪器和持续集成、消息传递系统、存储、公开 Prometheus 指标的软件、其他第三方实用程序等。
您可以从官方文档中查看每个类别的出口商列表。
在 Prometheus 配置文件中,所有导出器的详细信息都将在 .scrape_configs
scrape_configs:
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter1:9100', 'node-exporter2:9100']
- job_name: 'blackbox-exporter'
static_configs:
- targets: ['blackbox-exporter1:9115', 'blackbox-exporter2:9115']
metrics_path: /probe
- job_name: 'snmp-exporter'
static_configs:
- targets: ['snmp-exporter1:9116', 'snmp-exporter2:9116']
metrics_path: /snmp
Prometheus 服务发现
Prometheus 使用两种方法从目标中抓取指标。
- 静态配置:当目标具有静态 IP 或 DNS 端点时,我们可以将这些端点用作目标。
- **服务发现:**在大多数自动缩放系统和分布式系统(如 Kubernetes)中,目标不会有静态终结点。在这种情况下,将使用 prometheus 服务发现来发现目标端点,并将目标自动添加到 prometheus 配置中。
在继续之前,让我展示一个使用 Prometheus 配置文件的 Kubernetes 服务发现块的小示例。kubernetes_sd_configs
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
Kubernetes 是动态目标的完美示例。在这里,您不能使用静态目标方法,因为 Kubernetes 集群中的目标(Pod)本质上是短暂的,并且很可能是短暂的。
Kubernetes 中还有基于文件的服务发现。它适用于静态目标,但经典静态配置与静态配置之间的主要区别在于,在这种情况下,我们创建单独的 JSON 或 YAML 文件并将目标信息保存在其中file_sd_configs
。Prometheus 将读取文件以识别目标。static_configs``file_sd_configs
不仅这两个,还有各种服务发现方法可用,例如 consul_sd_configs(prometheus 从 consul 获取目标详细信息)、ec2_sd_configs等。
要了解有关配置详细信息的更多信息,请访问官方文档。
Prometheus 推送网关
默认情况下,Prometheus 使用拉取机制来获取指标。
但是,在某些情况下**,需要将指标推送**到 prometheus。
让我们举一个在 Kubernetes cronjob 上运行的批处理作业的例子,该作业每天根据某些事件运行 5 分钟。在这种情况下,Prometheus 将无法使用拉取机制正确抓取服务级别指标。
因此,为了等待 prometheus 拉取指标,我们需要将指标推送到 prometheus。为了推送指标,prometheus 提供了一个名为 **Pushgateway 的解决方案。**它是一种中间网关。
Pushgateway 需要作为独立组件运行。批处理作业可以将指标推送到 pushgateway 端点,Pushgateway 会公开这些指标。然后 prometheus 从 Pushgateway 中抓取这些指标。
Pushgateway 将指标数据临时存储在内存存储中。它更像是一个临时缓存。
Pushgateway配置也将在配置中的部分下进行配置。scrape_configs``Prometheus
scrape_configs:
- job_name: "pushgateway"
honor_labels: true
static_configs:
- targets: [pushgateway.monitoring.svc:9091]
要将指标发送到 Pushgateway,您需要使用 prometheus 客户端库并检测应用程序或脚本以公开所需的指标。
Prometheus 客户端库
Prometheus 客户端库是软件库,可用于检测应用程序代码,以 Prometheus 理解的方式公开指标。
如果需要自定义检测或想要创建自己的导出器,可以使用客户端库。
一个非常好的用例是需要将指标推送到 Pushgateway 的批处理作业。批处理作业需要使用客户端库进行检测,以 prometheus 格式公开需求指标。
以下示例公开了名为 batch_job_records_processed_total
的自定义指标。Python Client Library
from prometheus_client import start_http_server, Counter
import time
import random
RECORDS_PROCESSED = Counter('batch_job_records_processed_total', 'Total number of records processed by the batch job')
def process_record():
time.sleep(random.uniform(0.01, 0.1))
RECORDS_PROCESSED.inc()
def batch_job():
for _ in range(100):
process_record()
if __name__ == '__main__':
start_http_server(8000)
print("Metrics server started on port 8000")
batch_job()
print("Batch job completed")
while True:
time.sleep(1)
此外,在使用客户端库**时,HTTP 服务器prometheus_client
**端点中公开指标。/metrics
Prometheus 几乎为每种编程语言提供了客户端库,如果您想创建客户端库,也可以这样做。
要了解有关创建指南的更多信息并查看客户端库列表,您可以参考官方文档。
Prometheus 警报管理器
Alertmanager是Prometheus监控系统的关键部分。它的主要工作是根据 Prometheus 警报配置中设置的指标阈值发送警报。
警报由 Prometheus 触发并发送到 Alertmanager。它反过来将警报发送到警报管理器配置中配置的相应通知系统/接收器(电子邮件、松弛等)。
此外,警报管理器还负责以下工作。
- 警报重复数据删除:静默重复警报的过程。
- 分组:将相关警报分组到其他位置的过程。
- 静音:静音警报,用于维护或误报。
- 路由:根据严重性将警报路由到适当的接收器。
- 禁止:当存在中等高严重性警报时停止低严重性警报的过程。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
78385)]
[外链图片转存中…(img-Yjrd2yzS-1715705978385)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!