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

面试题手册

如何将 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

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

Prometheus 支持哪些服务发现机制,如何配置?

Prometheus 服务发现机制详解:静态配置:scrape_configs: - job_name: 'node' static_configs: - targets: ['192.168.1.10:9100', '192.168.1.11:9100'] labels: datacenter: 'dc1'Kubernetes 服务发现:scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_ip] target_label: __address__ replacement: $1:9104Kubernetes 角色类型:pod:发现所有 Podservice:发现所有 Serviceendpoints:发现 Service 的 Endpointsendpointslices:发现 EndpointSlicesnode:发现所有 Nodeingress:发现所有 IngressConsul 服务发现:scrape_configs: - job_name: 'consul' consul_sd_configs: - server: 'consul.example.com:8500' services: ['web', 'api'] tag_separator: ',' scheme: httpDNS SRV 服务发现:scrape_configs: - job_name: 'dns' dns_sd_configs: - names: ['_prometheus._tcp.example.com'] type: SRV port: 9100EC2 服务发现:scrape_configs: - job_name: 'ec2' ec2_sd_configs: - region: us-east-1 access_key: AKIA... secret_key: xxx...Relabel Configs(重标签配置):replace:替换标签值keep:保留匹配的目标drop:丢弃匹配的目标keep_if_equal:如果标签相等则保留drop_if_equal:如果标签相等则丢弃hashmod:哈希取模labelmap:标签映射常用元标签:__meta_kubernetes_pod_name:Pod 名称__meta_kubernetes_service_name:Service 名称__meta_consul_service_metadata_*:Consul 元数据__meta_ec2_tag_*:EC2 标签最佳实践:使用注解控制 Pod 是否被采集合理使用标签进行分组定期清理无用的服务发现配置使用 relabel_configs 过滤不需要的目标监控服务发现的性能影响
阅读 0·2月21日 15:37