乐闻世界logo
搜索文章和话题

面试题手册

Prometheus 的 Recording Rules 和 Alerting Rules 有什么区别?

Prometheus Recording Rules 和 Alerting Rules 的区别和使用:Recording Rules(记录规则):预先计算并存储常用的查询结果提高查询性能,减少计算开销不会触发告警配置示例:groups: - name: api_recording_rules interval: 30s rules: - record: job:http_requests:rate5m expr: sum by (job) (rate(http_requests_total[5m])) - record: job:request_errors:rate5m expr: sum by (job) (rate(http_requests_total{status=~"5.."}[5m]))使用场景:频繁查询的复杂表达式需要聚合多个指标的计算提高仪表盘加载速度减少实时查询压力Alerting Rules(告警规则):监控指标并触发告警支持告警分组、抑制、静默发送通知到 Alertmanager配置示例:groups: - name: api_alerting_rules rules: - alert: HighErrorRate expr: job:request_errors:rate5m / job:http_requests:rate5m > 0.05 for: 5m labels: severity: critical annotations: summary: "High error rate on {{ $labels.job }}" description: "Error rate is {{ $value | humanizePercentage }}"关键区别:| 特性 | Recording Rules | Alerting Rules ||------|----------------|----------------|| 目的 | 预计算查询结果 | 触发告警通知 || 存储 | 生成新的时间序列 | 不存储新序列 || 性能 | 提高查询性能 | 可能增加评估开销 || 使用 | 仪表盘、查询 | 监控、告警 |最佳实践:Recording Rules:使用有意义的命名规范合理设置评估间隔定期审查和清理无用规则使用 by 子句进行分组Alerting Rules:合理设置 for 参数避免误报使用分级告警(info、warning、critical)添加清晰的描述信息使用标签便于分组和路由规则管理:使用版本控制管理规则文件使用 promtool 检查规则语法测试规则后再部署监控规则评估性能验证规则:promtool check rules /path/to/rules.yml
阅读 0·2月21日 15:41

在生产环境中使用 Prometheus 有哪些最佳实践?

Prometheus 在生产环境中的最佳实践:架构设计:高可用部署:部署多个 Prometheus 实例使用 Thanos 或 Cortex 实现长期存储配置负载均衡分散查询压力资源规划:resources: requests: memory: "4Gi" cpu: "2" limits: memory: "8Gi" cpu: "4"数据保留策略:storage: tsdb: retention.time: 15d retention.size: 50GB监控指标设计:命名规范:使用下划线分隔包含应用名称使用标准单位(bytes、seconds)示例:http_requests_total、memory_usage_bytes标签设计:使用有意义的标签避免高基数标签保持标签一致性示例:job="api", instance="10.0.0.1:9090"指标类型选择:Counter:累计值(请求数、错误数)Gauge:瞬时值(内存、CPU)Histogram:分布统计(延迟、响应大小)Summary:客户端分位数告警策略:分级告警:- alert: CriticalError expr: error_rate > 0.1 labels: severity: critical- alert: WarningError expr: error_rate > 0.05 labels: severity: warning告警抑制:inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'instance']告警路由:route: group_by: ['alertname', 'cluster'] group_wait: 10s group_interval: 10s repeat_interval: 12h receiver: 'default' routes: - match: severity: critical receiver: 'pagerduty'安全配置:认证和授权:basic_auth: username: admin password: ${PROMETHEUS_PASSWORD}TLS 加密:tls_config: cert_file: /etc/prometheus/certs/server.crt key_file: /etc/prometheus/certs/server.key client_ca_file: /etc/prometheus/certs/ca.crt网络安全:使用防火墙限制访问配置 Kubernetes NetworkPolicy使用 VPN 或私有网络运维管理:配置管理:使用版本控制(Git)使用 Helm 或 Operator 部署实施变更审核流程备份策略:# 定期备份配置和数据promtool tsdb snapshot /var/lib/prometheus/ /backup/监控 Prometheus 自身:# 健康状态up{job="prometheus"}# 性能指标prometheus_tsdb_head_samples_appended_totalprometheus_query_duration_seconds_sum# 存储指标prometheus_tsdb_storage_blocks_bytes性能优化:采集优化:合理设置采集间隔使用 Recording Rules过滤不需要的指标查询优化:使用预计算规则限制查询时间范围使用标签过滤存储优化:配置数据压缩定期清理旧数据使用外部存储文档和培训:文档化:监控架构文档告警规则说明故障处理流程运维手册培训:团队培训计划值班轮换制度应急演练持续改进:定期审查:审查告警规则优化查询性能清理无用指标性能监控:监控资源使用分析查询性能优化存储策略安全审计:定期安全检查更新依赖版本审查访问权限
阅读 0·2月21日 15:40

如何在微服务架构中使用 Prometheus 进行监控?

Prometheus 在微服务架构中的监控实践:服务网格监控(Istio/Linkerd):利用 Sidecar 代理收集指标监控服务间调用关系追踪请求链路配置示例:scrape_configs: - job_name: 'istio-pilot' kubernetes_sd_configs: - role: endpoints namespaces: names: [istio-system] relabel_configs: - source_labels: [__meta_kubernetes_service_name] action: keep regex: istio-pilot分布式追踪集成:使用 OpenTelemetry 收集指标与 Jaeger/Zipkin 集成关联追踪和监控数据服务依赖关系监控:# 服务间调用延迟histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, source, target))# 服务错误率sum(rate(http_requests_total{status=~"5.."}[5m])) by (service)/ sum(rate(http_requests_total[5m])) by (service)金丝雀发布监控:使用标签区分版本对比新旧版本性能自动回滚告警配置示例:# 使用版本标签scrape_configs: - job_name: 'api' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_label_version] target_label: versionSLA/SLO 监控:# 错误率 SLOsum(rate(http_requests_total{status=~"5.."}[30d])) by (service)/ sum(rate(http_requests_total[30d])) by (service) < 0.01# 延迟 SLOhistogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[30d])) by (le, service)) < 0.5最佳实践:统一命名规范:使用标准化的指标名称保持标签一致性文档化指标含义服务级别指标:RED 方法:Rate(请求率)、Errors(错误率)、Duration(延迟)USE 方法:Utilization(利用率)、Saturation(饱和度)、Errors(错误)自动化监控:通过注解自动发现服务使用 Operator 自动配置基础设施即代码告警策略:分级告警(P0/P1/P2/P3)告警抑制和聚合值班轮换和升级策略
阅读 0·2月21日 15:40

Prometheus 与 Zabbix、Nagios 等监控系统有什么区别?

Prometheus 与其他监控系统的对比:与 Zabbix 对比:| 特性 | Prometheus | Zabbix ||------|-----------|--------|| 架构 | Pull 模式 | Push/Pull 混合 || 数据模型 | 时间序列 | 关系型数据库 || 查询语言 | PromQL | Zabbix 查询语言 || 可视化 | 需配合 Grafana | 内置 || 告警 | Alertmanager | 内置 || 自动发现 | 丰富 | 丰富 || 适用场景 | 云原生、容器化 | 传统 IT 基础设施 |与 Nagios 对比:Prometheus:主动采集,适合动态环境Nagios:被动检查,适合静态环境Prometheus:原生支持容器Nagios:需要插件支持与 InfluxDB 对比:Prometheus:专注监控,Pull 模式InfluxDB:通用时序数据库,Push 模式Prometheus:内置服务发现InfluxDB:需要外部集成与 Datadog 对比:Prometheus:开源免费Datadog:商业 SaaS,收费Prometheus:需要自行维护Datadog:托管服务,开箱即用Prometheus:高度可定制Datadog:集成度高,使用简单与 ELK Stack 对比:Prometheus:数值型指标监控ELK:日志分析Prometheus:结构化数据ELK:非结构化文本两者可互补使用选择建议:选择 Prometheus 当:使用 Kubernetes 或容器化部署需要云原生监控解决方案预算有限,需要开源方案需要灵活的查询和告警团队有运维能力选择 Zabbix 当:监控传统 IT 基础设施需要内置的告警和可视化团队熟悉 Zabbix需要网络设备监控选择 Datadog 当:预算充足需要快速部署需要全栈监控(APM、日志、指标)团队规模较小,运维能力有限混合方案:Prometheus + Thanos:长期存储Prometheus + Grafana:可视化Prometheus + Alertmanager:告警Prometheus + Loki:日志关联
阅读 0·2月21日 15:40

如何将 Prometheus 与 Grafana 集成,有哪些最佳实践?

Prometheus 与 Grafana 的集成和最佳实践:集成配置:添加 Prometheus 数据源:{ "name": "Prometheus", "type": "prometheus", "url": "http://prometheus:9090", "access": "proxy", "isDefault": true}创建仪表盘:使用变量实现动态查询使用模板变量实现多环境切换配置告警面板常用查询示例:CPU 使用率:100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)内存使用率:(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100磁盘使用率:(1 - (node_filesystem_avail_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes)) * 100网络流量:rate(container_network_receive_bytes_total[5m])变量配置示例:# 实例变量instance: label_values(up, instance)# 命名空间变量namespace: label_values(kube_pod_info, namespace)# 时间范围变量interval: 30s, 1m, 5m, 15m, 1h告警配置:在 Grafana 中配置告警规则支持多种通知渠道(邮件、Slack、Webhook)可与 Prometheus Alertmanager 集成最佳实践:仪表盘组织:按业务或系统分类使用文件夹管理添加描述和标签查询优化:使用 Recording Rules 预计算避免复杂查询合理设置刷新间隔可视化技巧:选择合适的图表类型使用阈值标注添加图例和注释权限管理:配置基于角色的访问控制限制敏感数据访问使用 API Key 自动化导入社区仪表盘:使用 Grafana 官方仪表盘库搜索关键词:Prometheus、Kubernetes、Node Exporter根据需求自定义修改
阅读 0·2月21日 15:40

什么是 Prometheus 的 Remote Write 和 Remote Read?

Prometheus Remote Write 和 Remote Read 机制:Remote Write(远程写入):将数据从 Prometheus 发送到远程存储系统。配置示例:remote_write: - url: "http://remote-storage:9201/api/v1/write" basic_auth: username: "user" password: "pass" queue_config: capacity: 10000 max_shards: 50 min_shards: 1 max_samples_per_send: 1000 batch_send_deadline: 5s min_backoff: 30ms max_backoff: 100ms write_relabel_configs: - source_labels: [__name__] regex: 'expensive_.*' action: drop使用场景:长期数据存储跨集群数据聚合数据分析和报表备份和容灾Remote Read(远程读取):从远程存储系统读取数据。配置示例:remote_read: - url: "http://remote-storage:9201/api/v1/read" read_recent: true basic_auth: username: "user" password: "pass"使用场景:查询历史数据跨数据源查询数据分析支持的远程存储:ThanosCortexVictoriaMetricsInfluxDBM3DBTimescaleDB队列配置参数:capacity:队列容量max_shards:最大分片数min_shards:最小分片数max_samples_per_send:每次发送的最大样本数batch_send_deadline:批量发送超时min_backoff / max_backoff:退避时间最佳实践:使用 write_relabel_configs 过滤不需要的数据合理配置队列参数避免内存溢出监控 Remote Write 的性能指标使用 read_recent: true 提高查询性能考虑数据压缩减少网络传输监控指标:prometheus_remote_storage_queue_lengthprometheus_remote_storage_failed_samples_totalprometheus_remote_storage_succeeded_samples_total
阅读 0·2月21日 15:40

如何配置 Prometheus 的安全认证和访问控制?

Prometheus 安全配置和最佳实践:认证配置:Basic Auth 认证:scrape_configs: - job_name: 'prometheus' basic_auth: username: 'admin' password: 'password' static_configs: - targets: ['localhost:9090']TLS/SSL 加密:scrape_configs: - job_name: 'https' scheme: https tls_config: ca_file: /path/to/ca.crt cert_file: /path/to/cert.crt key_file: /path/to/key.key insecure_skip_verify: falseBearer Token 认证:scrape_configs: - job_name: 'kubernetes-apiservers' bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenAPI 访问控制:# prometheus.ymlweb: tls_config: cert_file: /path/to/cert.pem key_file: /path/to/key.pem basic_auth_users: admin: $2b$12$...网络安全:使用防火墙限制访问配置网络策略(Kubernetes NetworkPolicy)使用 VPN 或私有网络启用 HTTPS 加密传输数据安全:定期备份配置和数据使用加密存储敏感信息限制日志中的敏感信息实施访问审计RBAC 配置(Kubernetes):apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: name: prometheusrules:- apiGroups: [""] resources: ["pods", "nodes", "services", "endpoints"] verbs: ["get", "list", "watch"]最佳实践:最小权限原则:只授予必要的权限使用服务账号隔离定期审查权限密钥管理:使用 Kubernetes Secrets避免硬编码密码定期轮换密钥监控安全事件:监控异常访问配置安全告警记录审计日志更新维护:及时更新版本关注安全公告定期安全审计
阅读 0·2月21日 15:40