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

服务端面试题手册

在生产环境中使用 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 的 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

Prometheus 常用的 Exporter 有哪些,如何选择和使用?

Prometheus 常见 Exporter 及其使用场景:系统监控 Exporter:Node Exporter:监控 Linux/Unix 系统指标指标:CPU、内存、磁盘、网络、文件系统部署:在每个节点上运行示例指标:node_cpu_seconds_total、node_memory_MemAvailable_bytesWindows Exporter:监控 Windows 系统支持 WMI 性能计数器指标:CPU、内存、进程、服务数据库 Exporter:MySQL Exporter:监控 MySQL/MariaDB指标:连接数、查询性能、复制状态配置:DSN 连接字符串示例:mysql_global_status_threads_connectedPostgreSQL Exporter:监控 PostgreSQL指标:连接、查询、锁、复制支持扩展指标Redis Exporter:监控 Redis指标:内存使用、连接数、命令统计支持集群模式应用 Exporter:Blackbox Exporter:HTTP/HTTPS、TCP、ICMP 探测用于可用性监控配置模块定义探测参数JMX Exporter:监控 Java 应用通过 JMX 获取指标支持 Kafka、Tomcat 等StatsD Exporter:兼容 StatsD 协议适合应用埋点容器和云平台 Exporter:cAdvisor:容器资源使用集成在 KubeletKube-State-Metrics:Kubernetes 对象状态Pod、Deployment、Service 等部署示例:scrape_configs: - job_name: 'node' static_configs: - targets: ['node1:9100', 'node2:9100'] - job_name: 'mysql' static_configs: - targets: ['mysql-exporter:9104']最佳实践:选择合适的 Exporter 版本配置认证和安全监控 Exporter 自身健康使用标签区分不同实例
阅读 0·2月21日 15:39