当前位置:首页 > 技术分析 > 正文内容

监控生态面试通关秘籍

ruisui881个月前 (03-25)技术分析43

对于监控监控方面的问题我们这边来探讨下,话就不多说了,讲真的,面试问的真不多,是不是面试官觉得我技术不行,Doge

这些都是一些基础的问题,不过对面试多多少少也会有帮助,直接开始吧。

1. 什么是 Prometheus?它的主要功能是什么?

Prometheus 是一个开源的系统监控和报警工具,主要用于收集和存储时序数据(metrics),并且提供查询语言(PromQL)来支持灵活的查询。它具有强大的可扩展性和灵活性,广泛用于监控微服务、容器和云原生应用。

主要功能:

  • o 数据采集: 通过 Pull 模型定期从目标服务拉取数据。
  • o 时序数据存储: 高效地存储时序数据,并支持高吞吐量。
  • o 查询和报警: 使用 PromQL 进行数据查询,并通过 Alertmanager 配置报警。
  • o 自动发现: 通过配置自动发现机制(如 Kubernetes、Consul)来发现监控目标。

2. Prometheus 中的时序数据是什么?它的存储方式是什么?

Prometheus 主要用于存储 时序数据,即时间与某些指标值的映射。每个数据点包含了一个时间戳、一个值和一个时间序列标识符。时序数据存储在 Prometheus 自带的时序数据库中,数据库使用 列式存储,每个时序数据被按标签(Label)进行索引,并存储在高效的时间序列格式中。

3. Prometheus 如何抓取数据?

Prometheus 通过 pull 模型 定期从被监控的目标(例如,应用程序或服务的端点)抓取指标数据。每个目标需要暴露一个 HTTP 端点,通常是 /metrics 路径,Prometheus 会定期访问这个端点获取数据。如果目标不支持暴露 /metrics,可以使用 exporter 工具(如 node_exporter、blackbox_exporter)将指标数据暴露出来。

4. Prometheus 中的目标(Targets)是什么?如何配置?

在 Prometheus 中,目标 是指 Prometheus 用来抓取指标数据的外部系统或服务。目标通常是通过 静态配置服务发现 来指定。在 prometheus.yml 配置文件中,可以配置静态目标或通过 Kubernetes、Consul、EC2 等进行服务发现。目标配置示例如下:

scrape_configs:
job_name: 'node'
static_configs:

5. Prometheus 的采集周期是如何定义的?

Prometheus 会定期从配置中的目标抓取数据,默认抓取周期是 15 秒(scrape_interval: 15s)。可以在 Prometheus 的配置文件中进行调整,设置不同的 scrape_intervalscrape_timeout。例如,设置更短的抓取周期可以获取更实时的指标数据,但会增加 Prometheus 的负担。

6. Prometheus 如何进行数据查询?

Prometheus 提供了一个强大的查询语言 PromQL,用于从时序数据库中查询和操作数据。通过 PromQL,用户可以进行数据聚合、计算、过滤等操作。常见的查询方式包括:

  • o 获取单个时序数据: http_requests_total{status="200"}
  • o 计算聚合值: avg(http_requests_total{status="200"})
  • o 时间范围选择: http_requests_total[5m] 获取过去 5 分钟的数据

7. Prometheus 如何进行告警管理?

Prometheus 使用 Alertmanager 进行告警管理。Alertmanager 负责接收 Prometheus 中触发的告警并将它们转发到不同的通知渠道,如电子邮件、Slack、PagerDuty 等。告警规则在 prometheus.yml 配置文件中定义,告警条件可以基于 PromQL 查询结果设定。例如:

alerting:
alertmanagers:
-static_configs:
-targets: ['localhost:9093']
rule_files:
"alert.rules"
alerts:
alert:HighCpuUsage
expr:avg(rate(cpu_usage[5m]))>0.9
for:1m
annotations:
summary: "CPU usage is high"

8. 如何在 Prometheus 中使用标签(Labels)?

标签是 Prometheus 用来区分同一时间序列不同维度的标识符。每个时间序列可以有多个标签,标签键值对可以帮助用户区分不同的资源和维度。例如,http_requests_total{status="200", method="GET"},其中 status 和 method 是标签键,分别表示 HTTP 状态和请求方法。标签使得 Prometheus 能够执行高效的维度查询。

9. Prometheus 如何与其他监控系统(如 Grafana)集成?

Prometheus 通常与 Grafana 配合使用,Grafana 用于可视化 Prometheus 收集的指标数据。在 Grafana 中,用户可以配置 Prometheus 作为数据源,并创建仪表盘来展示监控数据。通过 Prometheus 的查询结果,Grafana 可以绘制各种类型的图表(如折线图、柱状图等)来帮助监控系统的健康和性能。

10. 如何扩展 Prometheus?

Prometheus 本身不提供水平扩展机制,但可以通过以下几种方式扩展其功能:

  • o Prometheus Federation: 通过 Prometheus 联邦机制,将多个 Prometheus 实例聚合在一起,提供更大的数据处理能力。
  • o 分布式存储: 通过外部存储后端(如 Cortex、Thanos、 GreptimeDB 等等)实现 Prometheus 数据的长期存储和扩展。
  • o 使用多个 Prometheus 实例: 针对不同的监控目标,使用多个 Prometheus 实例分担数据抓取任务,然后通过聚合和查询多个实例的数据来提高性能。

11. Prometheus 如何与 Kubernetes 集成?

Prometheus 与 Kubernetes 的集成通常通过以下方式实现:

  • o 服务发现: Prometheus 使用 Kubernetes API 进行服务发现,自动发现 Kubernetes 集群中的 Pod 和服务。
  • o Kubernetes Exporter:kube-state-metrics、node-exporter 等 Exporter 用于暴露 Kubernetes 集群的各种监控指标(如 Pod 状态、节点资源使用情况等)。
  • o Prometheus Operator: 一个 Kubernetes 原生的 Prometheus 配置和管理工具,简化 Prometheus 的部署、配置和维护。

12. Prometheus 如何与其他工具(如 Grafana、Alertmanager)协作?

Prometheus 作为时序数据收集和存储工具,通常与其他生态工具协作,以实现全面的监控解决方案。

  • o Grafana: 用于数据的可视化。Prometheus 提供的时序数据可以通过 Grafana 进行图表化展示,Grafana 提供了丰富的仪表板和自定义视图,用于实时监控数据。
    • o 集成方式: Grafana 可以作为 Prometheus 的数据源,使用 PromQL 查询 Prometheus 存储的时序数据并进行可视化。
  • o Alertmanager: 负责 Prometheus 生成的警报。Alertmanager 可以对告警进行聚合、分组、抑制等操作,并发送通知(如通过邮件、Slack、PagerDuty 等)。
    • o 集成方式: Prometheus 将触发的报警发送到 Alertmanager,Alertmanager 进一步处理并通知用户。

13. 什么是 Prometheus 的数据模型?

Prometheus 的数据模型是以 时序数据(Time Series)为核心的。时序数据由 指标(Metric)和时间戳组成,每个指标都有一个唯一的名称和相关的标签(labels)。

  • o Metric(指标): 一个数据点,表示某个时间点的某种度量(如 CPU 使用率、内存占用)
  • o Labels(标签): 用来区分不同维度的指标。例如,instance="localhost" 或 job="nginx" 可以作为标签来描述不同的度量来源。
  • o Time Series(时序数据): 由指标名称和标签组合标识,每个时序数据点都有一个时间戳和数值。

14. Prometheus 的数据抓取(Scraping)是如何工作的?

Prometheus 使用 Pull 模型 来抓取数据,它定期从配置好的目标(如应用程序、主机或容器)拉取时序数据。数据抓取的流程如下:

  1. 1. 配置目标: 通过配置文件 prometheus.yml,定义需要抓取数据的目标(例如,应用程序的端点、Node Exporter、Kubernetes 等)。
  2. 2. Scraping: Prometheus 会按照配置的时间间隔(通常为每 15 秒)定期访问这些目标的 /metrics 端点,拉取最新的指标数据。
  3. 3. 数据存储: 拉取的数据被存储在 Prometheus 的本地时序数据库中,并按时间戳、指标名称和标签索引。

15. 什么是 PromQL?它的主要用途是什么?

PromQL(Prometheus Query Language)是 Prometheus 提供的查询语言,用于从时序数据库中提取和处理数据。

主要用途:

  • o 数据查询: PromQL 允许用户基于指标名称、标签、时间区间等条件进行灵活的查询。
  • o 聚合和计算: 支持对查询结果进行聚合(如求和、平均、最大值、最小值)以及计算(如比率、变化率等)。
  • o 数据可视化: PromQL 查询结果可用于生成图表,或者通过 Grafana 进行展示。
  • o 报警规则: 在 Prometheus 中,报警规则是基于 PromQL 编写的,告警会在满足查询条件时触发。

16. Prometheus 如何处理高可用性?

Prometheus 本身并不内置高可用性机制,但可以通过以下方式实现高可用性:

  • o 多实例配置: 通过部署多个 Prometheus 实例,每个实例都抓取相同的数据源。为了避免重复报警和存储数据,可以配置 Prometheus 的 federation(联邦)和 Alertmanager 来整合多个实例的数据和警报。
  • o 跨区域冗余: 在分布式系统中,可以部署多个 Prometheus 实例,将不同区域的指标聚合到一个主 Prometheus 实例中。
  • o 数据备份: 通过备份和恢复策略,确保 Prometheus 数据的安全。

17. 如何优化 Prometheus 的性能,特别是在处理大量指标时?

优化 Prometheus 性能时,可以从以下几个方面入手:

  • o 数据压缩: Prometheus 对存储的数据进行压缩,可以节省存储空间并提高存取效率。
  • o 合理配置抓取频率: 根据需求合理配置抓取频率。如果某些数据不需要频繁采集,可以将采集频率降低,减少系统负载。
  • o 存储分区和限制数据保留: 通过配置 Prometheus 的存储策略(如数据保留时间、存储文件大小)来限制不必要的老旧数据占用存储空间。
  • o 外部存储解决方案: 对于长期存储和高容量数据,可以将数据迁移到外部存储系统(如 Thanos、Cortex、 GreptimeDB 等等),这可以提高 Prometheus 的可扩展性。

18. Prometheus 与其他监控工具(如 Nagios 或 Zabbix)有何不同?

  • o 架构: Prometheus 基于 Pull 模式(主动拉取数据),而 Nagios 和 Zabbix 通常基于 Push 模式(被动接收数据)
  • o 数据存储: Prometheus 使用时序数据库来存储数据,特别适合监控和分析指标数据,而 Nagios 和 Zabbix 使用传统的数据库管理数据。
  • o 灵活性: Prometheus 提供强大的查询语言 PromQL,能够进行复杂的数据聚合和分析,而 Nagios 和 Zabbix 更侧重于告警管理和事件处理。
  • o 扩展性: Prometheus 设计上更适合云原生和微服务架构,支持多种插件和与 Kubernetes、Docker 等工具的集成,而 Nagios 和 Zabbix 更适合传统的 IT 基础设施。

19. 什么是 Prometheus 的 Exporters?

Exporters 是用于暴露应用程序或基础设施的监控指标的组件。Prometheus 通过 Scraping 来获取这些 Exporters 暴露的指标数据。

常见 Exporters:

  • o Node Exporter: 用于暴露 Linux 主机的硬件和操作系统指标,如 CPU、内存、磁盘、网络等。
  • o Blackbox Exporter: 用于对外部服务进行可用性监控,如 HTTP、TCP、DNS 等协议。
  • o MySQL Exporter: 用于暴露 MySQL 数据库的指标,如查询数、连接数、缓存命中率等。
  • o Docker Exporter: 用于暴露 Docker 容器的监控指标。

Exporters 提供了与 Prometheus 兼容的 /metrics 端点,Prometheus 会定期抓取这些端点并收集数据。

20. Alertmanager 是什么?它的主要功能是什么?

Alertmanager 是 Prometheus 的一个组件,负责接收 Prometheus 发送的报警,并对报警进行处理、分组、抑制、路由和通知。

主要功能:

  • o 报警分组: 将相似的报警合并,减少通知的噪声。
  • o 报警抑制: 根据用户设置的规则,当某些报警触发时,自动抑制其他相关报警。
  • o 通知渠道: 支持将报警通过多种通知渠道(如电子邮件、Slack、PagerDuty)发送给相关人员。
  • o 多级通知: 支持根据报警的严重性或紧急程度进行不同的通知策略。

21. Prometheus 生态系统包括哪些工具?它们的作用是什么?

Prometheus 生态系统包括多个工具,每个工具负责监控、存储、告警、可视化等不同任务。常见的工具包括:

  • o Prometheus: 用于数据收集和存储,专注于时序数据。
  • o Grafana: 用于数据可视化,展示 Prometheus 收集的指标数据,创建自定义仪表盘。
  • o Alertmanager: 管理 Prometheus 中的告警,提供告警去重、抑制、通知等功能。
  • o Prometheus Exporters: 用于将特定应用或硬件的指标暴露给 Prometheus。例如,node_exporter 用于暴露操作系统指标,blackbox_exporter 用于服务可用性监控。
  • o Thanos: 提供 Prometheus 数据的长期存储和高可用性支持,扩展 Prometheus 的存储能力。
  • o Cortex: 一个分布式 Prometheus 后端,支持 Prometheus 数据的长期存储和查询。
  • o Alertmanager: 负责接收 Prometheus 的告警并将其转发到通知系统(如邮件、Slack、PagerDuty 等)。

22. Prometheus 与 Thanos 和 Cortex 的关系是什么?

Thanos 和 Cortex 都是 Prometheus 的扩展工具,主要用于解决 Prometheus 的长期存储 和 多集群查询 问题。

  • o Thanos: 通过将多个 Prometheus 实例的数据集中存储,提供了 全球查询持久化存储高可用性 支持。它允许用户查询跨多个 Prometheus 实例的历史数据,并将 Prometheus 的数据存储能力扩展到长期存储。
  • o Cortex: 是一个分布式 Prometheus 后端,支持跨多个集群存储和查询 Prometheus 数据。它实现了 Prometheus 的 多租户支持可扩展性,适用于大规模的云原生环境。

23. Prometheus 中的标签(Labels)有什么作用?

标签是 Prometheus 用于区分同一时序数据不同维度的标识符。每个时序数据都有一个或多个标签,标签可以用来区分相同指标的不同实例,例如:

  • o http_requests_total{method="GET", status="200"} 表示 HTTP 请求总数,其中 method 和 status 是标签,用于区分不同的请求类型。
  • o 标签可以帮助用户根据不同维度筛选和聚合数据,进行更精确的监控和分析。

24. Prometheus 支持哪些数据存储后端?

Prometheus 默认使用本地存储来存储时序数据。然而,对于长期存储或高可用性的需求,Prometheus 支持通过以下后端扩展:

  • o Thanos: 提供持久化存储和高可用性支持,适合大规模分布式系统。
  • o Cortex: 分布式的 Prometheus 存储解决方案,支持跨多个集群的数据存储和查询。
  • o InfluxDB: 可以将 Prometheus 的时序数据推送到 InfluxDB 进行长期存储。
  • o GreptimeDB: 一个新兴的云原生时序数据库,大家可以尝试下,很不错。

25. 什么是 Prometheus 查询语言(PromQL)?举例说明。

PromQL 是 Prometheus 的查询语言,用于从时序数据库中提取、聚合、过滤数据。它支持基本的数学运算、聚合函数和时间范围选择。

示例:

  • o 查询过去 5 分钟内 http_requests_total 指标的平均值:avg(http_requests_total[5m])
  • o 查询状态为 200 的请求总数:http_requests_total{status="200"}
  • o 查询 1 分钟内 cpu_usage 的 rate:rate(cpu_usage[1m])

26. Prometheus 如何处理动态环境中的目标(Targets)?

Prometheus 支持通过 服务发现 自动发现动态环境中的目标(如 Kubernetes、Consul、EC2 等)。Prometheus 可以自动发现和抓取新添加的服务或应用的指标,而无需手动更新配置。通过服务发现,Prometheus 可以适应云平台和容器化环境中的动态扩展。

27. 如何避免告警风暴?

  • o 分组(Grouping): 合并相似告警(如按服务分组)。
  • o 抑制(Inhibition): 主告警触发时抑制相关子告警。
  • o 静默(Silences): 临时屏蔽预期内的告警(如维护窗口)。

28. Prometheus 存储数据有哪些优化策略?

  • o 压缩(Compaction): 合并小块数据为更大块,减少查询开销。
  • o 降采样(Downsampling): 长期数据保留低精度样本(如 1 小时粒度)。
  • o 调整保留时间: 根据需求设置 --storage.tsdb.retention.time(默认 15 天)

29. Prometheus 的 Pull 模型与 Push 模型有何区别?适用场景是什么?

  • o Pull: Prometheus 主动拉取目标暴露的指标(默认方式),适合可控内网环境。
  • o Push: 应用主动推送指标到 Pushgateway(如短暂任务),可能引入单点瓶颈。

30. Thanos 如何解决 Prometheus 的长期存储问题?

  • o Sidecar 模式: 与 Prometheus 实例共存,上传数据到对象存储(如 S3)。
  • o 全局查询: 通过 Thanos Query 统一查询多个 Prometheus 或历史数据。

31. 如何通过 Prometheus 监控 Kubernetes 的 GPU 资源?

  • o 部署 DCGM ExporterNVIDIA GPU Operator,暴露 GPU 指标。
  • o Prometheus 抓取对应指标并配置告警规则。

32. 解释 Prometheus 的 rate() 和 irate() 函数的区别

  • o rate(): 计算时间范围内每秒平均增长率(适合缓慢变化计数器)
  • o irate(): 基于最后两个样本计算瞬时增长率(适合快速变化但可能丢失峰值)

33. Prometheus 的 up 指标为 0,如何排查?

  • o 检查目标状态: 目标服务是否存活,端口是否开放。
  • o 网络连通性: Prometheus 是否能访问目标(防火墙、DNS 解析)。
  • o 指标路径: 检查 metrics_path 配置是否正确。

34. Alertmanager 如何处理告警?支持哪些通知方式?

  • o 流程: 告警触发 → 分组 → 抑制 → 静默 → 发送通知。
  • o 支持方式: Email、Slack、PagerDuty、Webhook 等。

35. Prometheus 与 Grafana 的集成有哪些最佳实践?

  • o 模板化仪表盘: 使用变量(如 $instance)实现动态筛选。
  • o 告警集成: Grafana 直接配置 Alert Rules 或对接 Alertmanager。

36. 如何监控一个自定义的 Java 应用?

  • o 暴露指标: 集成 Prometheus 客户端库(如 micrometer)暴露 /actuator/prometheus 端点。
  • o 配置抓取: 在 Prometheus 中添加对应 Job。

37. Prometheus 的局限性是什么?如何在大规模场景下替代或增强?

  • o 局限性: 单机存储限制、无原生长期存储、高基数问题。
  • o 增强方案: Thanos/Cortex/GreptimeDB 实现水平扩展,VictoriaMetrics 优化存储效率。

38. 未来 3 年,Prometheus 生态可能面临哪些挑战?

  • o 云原生混合环境: 跨云、边缘设备的统一监控。
  • o AIOps 集成: 指标与日志、Trace 的关联分析。
  • o 成本优化: 海量数据下的存储与计算效率。

以上就是我们监控方面的问题,几乎该有的都有了。还有,感谢大家的支持。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3016.html

分享给朋友:

“监控生态面试通关秘籍” 的相关文章

gitlab 分支保护设置

一、功能描述代码管理中管理,我们把稳定的分支设置为保护,可以防止其他人员误操作(例如删除,合并,推送代码等)。二、Gitlab配置步骤1 点击项目Repository标签2.点击Expand标签3.配置如下:默认master是被保护的,而且只有维护人员具有推送和合并权限。设置保护分支,这里的beta...

Windows 下 Git 拉 Gitlab 代码

读者提问:『阿常你好,Windows 下 Git 拉 Gitlab 代码的操作步骤可以分享一下吗?』阿常回答:好的,总共分为五个步骤。一、Windows 下安装 Git官网下载链接:https://git-scm.com/download/winStandalone Installer(安装版)注意...

Python 幕后:Python导入import的工作原理

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)Python 最容易被误解的方面其中之一是import。Python 导入系统不仅看起来很复杂。因此,即使文档非常好,它也不能让您全面了解正在发生的事情。唯一方法是研究 Python 执行 import 语句时幕后发生的事情。注意:在这篇文...

一起学Vue:路由(vue-router)

前言学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题,就是本篇要探讨的主要问题。vue-router是什么路由是什么?大概有两种说法:从路由的用途上来解释路由就是指随着浏览器地址栏的变化,展示给用户的页面也不相同。从路由的实现原理上来解释路...

vue 开发规范

项目运行指南(#项目运行指南)开发本地环境(#开发本地环境)开发相关插件/工具(#开发相关插件工具)开发规范(#开发规范)vue(#vue)【数据流向】(#数据流向)【慎用全局注册】(#慎用全局注册)【组件名称】(#组件名称)【组件中的 CSS】(#组件中的-css)【统一标签顺序】(#统一标签顺序...

Vue中的路由配置常用属性

router:路由页面跳转的核心库;引入路由:import VueRouter from 'vue-router'; 注册路由:const router = new VueRouter({ })mode:模式路由有hash history两种模式:hash模式URL中包含#,#后边是...