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

服务端面试题手册

如何在微服务架构中使用 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

如何优化 MariaDB 的查询性能?有哪些常用的优化技巧?

MariaDB 的查询优化是提升数据库性能的核心,以下是主要的优化策略:1. 使用 EXPLAIN 分析查询EXPLAIN SELECT * FROM users WHERE name = 'John' AND age > 25;关键指标:type:访问类型(ALL < index < range < ref < eq_ref < const < system)key:使用的索引rows:预估扫描行数Extra:额外信息(Using filesort, Using temporary 需要优化)2. 索引优化-- 创建合适的索引CREATE INDEX idx_name_age ON users(name, age);-- 使用覆盖索引SELECT id, name, age FROM users WHERE name = 'John';-- 避免索引失效-- 不推荐:WHERE name LIKE '%John%'-- 推荐:WHERE name LIKE 'John%'3. 查询重写-- 避免 SELECT *-- 不推荐:SELECT * FROM users WHERE id = 1;-- 推荐:SELECT id, name, email FROM users WHERE id = 1;-- 使用 LIMIT 限制结果SELECT * FROM orders ORDER BY created_at DESC LIMIT 10;-- 避免子查询,使用 JOIN-- 不推荐:SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);-- 推荐:SELECT u.* FROM users u JOIN orders o ON u.id = o.user_id;-- 使用 UNION ALL 替代 UNION(如果不需要去重)-- 不推荐:SELECT name FROM users UNION SELECT name FROM admins;-- 推荐:SELECT name FROM users UNION ALL SELECT name FROM admins;4. 分页优化-- 传统分页(深分页性能差)SELECT * FROM orders ORDER BY id LIMIT 100000, 10;-- 优化方案1:使用游标分页SELECT * FROM orders WHERE id > 100000 ORDER BY id LIMIT 10;-- 优化方案2:延迟关联SELECT o.* FROM orders oINNER JOIN (SELECT id FROM orders ORDER BY id LIMIT 100000, 10) tmpON o.id = tmp.id;5. JOIN 优化-- 确保被驱动表有索引CREATE INDEX idx_user_id ON orders(user_id);-- 小表驱动大表SELECT * FROM small_table s JOIN large_table l ON s.id = l.small_id;-- 使用 STRAIGHT_JOIN 强制连接顺序SELECT * FROM large_table l STRAIGHT_JOIN small_table s ON s.id = l.small_id;6. 配置优化# my.cnf 配置query_cache_size = 64Mquery_cache_type = 1tmp_table_size = 256Mmax_heap_table_size = 256Msort_buffer_size = 2Mread_buffer_size = 1Mread_rnd_buffer_size = 2M7. 监控慢查询-- 启用慢查询日志SET GLOBAL slow_query_log = ON;SET GLOBAL long_query_time = 2;-- 查看慢查询SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;通过以上优化策略,可以显著提升 MariaDB 的查询性能。
阅读 0·2月21日 15:39