AwesomeGRV/opensource-olly

GitHub: AwesomeGRV/opensource-olly

一套基于 Docker Compose 一键部署的开源可观测性技术栈,用于模拟 Databricks 监控与 Pipeline 可观测性,为 SRE 学习、事件响应演练和监控演示提供真实演练环境。

Stars: 0 | Forks: 0

# Databricks 可观测性技术栈 一个用于模拟 Databricks 监控和 Pipeline 可观测性的完整开源技术栈。本项目提供了一个真实的环境,适用于 SRE 学习、事件响应实践和监控演示。 ## 功能特性 ### 核心组件 - **Grafana** - 可视化和仪表盘 - **Prometheus** - 指标收集和存储 - **Loki** - 日志聚合 - **Tempo** - 分布式追踪 - **OpenTelemetry Collector** - 遥测处理 - **Alertmanager** - 告警路由和通知 - **Node Exporter** - 系统指标 - **cAdvisor** - 容器指标 ### 附加服务 - **Kafka** - 用于事件流的消息队列 - **Redis** - 缓存和会话存储 - **PostgreSQL** - 元数据和长期存储 - **MinIO** - S3 兼容存储 - **Pyroscope** - 持续性能分析 ### 模拟的 Databricks 遥测数据 - **集群指标** - CPU、内存、执行器故障、成本 - **作业监控** - 失败、持续时间、排队时间 - **Pipeline 健康状况** - 流式处理延迟、Delta 延迟 - **SQL 仓库** - 查询性能、失败 - **Spark 性能** - 任务/阶段失败、GC 时间 - **DBFS 操作** - 错误、使用指标 - **Unity Catalog** - 访问控制、查询性能 - **SLO/SLA 监控** - 错误预算、消耗率 ## 前置条件 - Docker 20.10+ - Docker Compose 2.0+ - 至少 8GB RAM - 20GB+ 可用磁盘空间 ## 快速开始 1. **克隆仓库** git clone cd databricks-observability-stack 2. **启动所有服务** docker-compose up -d 3. **等待服务就绪**(2-3 分钟) docker-compose ps 4. **访问仪表盘** - Grafana: http://localhost:3000 (admin/admin123) - Prometheus: http://localhost:9090 - Alertmanager: http://localhost:9093 - Loki: http://localhost:3100 - Tempo: http://localhost:3200 5. **验证遥测数据生成** docker-compose logs -f telemetry-generator ## 服务 URL 和凭据 | 服务 | URL | 凭据 | 描述 | |---------|-----|-------------|-------------| | Grafana | http://localhost:3000 | admin/admin123 | 主仪表盘界面 | | Prometheus | http://localhost:9090 | - | 指标查询界面 | | Alertmanager | http://localhost:9093 | - | 告警管理 | | Loki | http://localhost:3100 | - | 日志查询界面 | | Tempo | http://localhost:3200 | - | 追踪查询界面 | | MinIO | http://localhost:9001 | minioadmin/minioadmin123 | 对象存储 | | Kafka UI | http://localhost:8080 | - | Kafka 管理 | | Redis CLI | localhost:6379 | - | Redis 界面 | | PostgreSQL | localhost:5432 | postgres/postgres123 | 数据库 | ## 仪表盘 ### 可用的仪表盘 1. **Databricks 平台概览** - 按 Workspace 划分的活跃集群 - 资源使用趋势 - 成本概览 - 最近的错误日志 2. **Pipeline 健康状况** - Pipeline 状态概览 - 流式处理延迟指标 - Delta 表延迟 - Pipeline 错误日志 3. **Spark 性能** - 任务/阶段失败率 - GC 时间百分比 - Spark 追踪 - 性能日志 4. **作业失败** - 当前失败的作业 - 失败率趋势 - 排队时间分析 - 作业错误日志 5. **成本监控** - 每小时/天/月的成本 - 按实例类型划分的成本 - 空闲时间分析 - 成本优化机会 6. **SLO/SLA 仪表盘** - 剩余错误预算 - SLO 消耗率 - 服务成功率 - 性能 SLA ### 仪表盘功能 - **实时更新** - 5 秒刷新间隔 - **交互式过滤** - Workspace、服务和组件过滤器 - **深入下钻能力** - 点击进入详细视图 - **告警集成** - 告警条件的可视化指示器 - **导出选项** - PDF、PNG 和数据导出 ## 配置 ### 环境变量 `docker-compose.yml` 中的主要环境变量: ``` environment: - PROMETHEUS_GATEWAY=http://prometheus:9091 - LOKI_ENDPOINT=http://loki:3100/loki/api/v1/push - TEMPO_ENDPOINT=http://tempo:4317 - GENERATION_INTERVAL=5 # Telemetry generation interval (seconds) - FAILURE_RATE=0.1 # Simulated failure rate (10%) ``` ### 自定义指标 编辑 `telemetry-generator/telemetry_generator.py` 以: - 调整故障率 - 添加新的指标类型 - 修改数据模式 - 更改 Workspace 配置 ### 告警配置 编辑 `prometheus/alert_rules.yml` 以: - 调整告警阈值 - 添加新的告警规则 - 修改告警标签和注释 编辑 `alertmanager/alertmanager.yml` 以: - 配置通知渠道(Slack、电子邮件、webhook) - 设置路由规则 - 自定义告警模板 ## 遥测生成器 Python 遥测生成器可模拟真实的 Databricks 遥测数据: ### 生成的指标 ``` # Cluster metrics databricks_cluster_up databricks_cluster_cpu_usage_percent databricks_cluster_memory_usage_percent databricks_cluster_executor_failures_total databricks_cluster_cost_per_hour databricks_cluster_idle_time_seconds # Job metrics databricks_job_failed databricks_job_duration_seconds databricks_job_queue_time_seconds # Pipeline metrics databricks_pipeline_failed databricks_streaming_lag_seconds databricks_delta_table_latency_seconds # SQL metrics databricks_sql_warehouse_up databricks_sql_query_failures_total databricks_sql_query_duration_seconds ``` ### 生成的日志 结构化 JSON 日志包含: - 时间戳和严重级别 - 组件和 Workspace 标签 - 集群、作业和 Notebook 标识符 - 错误信息和堆栈追踪 ### 生成的追踪 OpenTelemetry 追踪包含: - 作业执行工作流 - 集群启动序列 - Notebook 单元执行 - Spark 任务处理 ## 告警 ### 预定义的告警 - **严重**: 集群宕机、作业失败、Pipeline 失败 - **警告**: 资源使用率高、流处理延迟、查询超时 - **信息**: 未使用的集群、成本优化机会 ### 告警渠道 在 `alertmanager/alertmanager.yml` 中配置: ``` # Slack 集成 slack_configs: - api_url: 'YOUR_SLACK_WEBHOOK_URL' channel: '#databricks-alerts' send_resolved: true # Email 通知 email_configs: - to: 'team@company.com' send_resolved: true ``` ### 告警测试 手动测试告警: ``` # 触发测试告警 curl -XPOST http://localhost:9093/api/v1/alerts \ -d '[{ "labels": { "alertname": "TestAlert", "severity": "warning" } }]' ``` ## 故障排除 ### 常见问题 1. **服务未启动** # 检查日志 docker-compose logs # 检查资源使用情况 docker stats 2. **Grafana 中无指标** # 检查 Prometheus targets curl http://localhost:9090/api/v1/targets # 检查 telemetry generator docker-compose logs telemetry-generator 3. **Loki 中无日志** # 检查 Promtail 配置 docker-compose logs promtail # 验证 Loki 运行状况 curl http://localhost:3100/ready 4. **Tempo 中无追踪** # 检查 OpenTelemetry collector docker-compose logs otel-collector # 验证 Tempo 运行状况 curl http://localhost:3200/ready ### 性能调优 1. **减少资源使用** - 增加 `GENERATION_INTERVAL` - 减少模拟 Workspace 的数量 - 降低数据保留期 2. **提升查询性能** - 在 Prometheus 中添加记录规则 - 优化 Grafana 查询 - 使用合适的时间范围 3. **扩展到生产环境** - 部署到 Kubernetes - 使用外部数据库 - 实现分片 ## 测试 ### 健康检查 ``` # 检查所有服务 docker-compose ps # 单独服务运行状况 curl http://localhost:3000/api/health # Grafana curl http://localhost:9090/-/healthy # Prometheus curl http://localhost:3100/ready # Loki curl http://localhost:3200/ready # Tempo ``` ### 负载测试 生成额外负载: ``` # 扩展 telemetry generator docker-compose up -d --scale telemetry-generator=3 # 增加失败率 docker-compose exec telemetry-generator \ python -c "import os; os.environ['FAILURE_RATE']='0.3'" ``` ### 数据验证 ``` # 查询 Prometheus metrics curl -G 'http://localhost:9090/api/v1/query' \ --data-urlencode 'query=sum(databricks_cluster_up)' # 搜索 Loki 日志 curl -G 'http://localhost:3100/loki/api/v1/query_range' \ --data-urlencode 'query={job="telemetry-generator"}' \ --data-urlencode 'start=2023-01-01T00:00:00Z' \ --data-urlencode 'end=2023-01-01T01:00:00Z' ``` ## 迁移到生产环境 ### Kubernetes 部署 1. **转换为 Kubernetes 清单** # 使用 Kompose kompose convert -f docker-compose.yml -o k8s/ 2. **部署到集群** kubectl apply -f k8s/ 3. **配置持久化存储** # 示例 PVC apiVersion: v1 kind: PersistentVolumeClaim metadata: name: prometheus-data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 100Gi ### 扩展性考量 - **Prometheus**: 在多区域中使用联邦机制 - **Loki**: 以分布式模式部署 - **Tempo**: 配置后端存储(S3、GCS) - **Grafana**: 使用带有 PostgreSQL 的高可用模式 ### 安全加固 - 启用身份验证和授权 - 对所有通信使用 TLS - 实施网络策略 - 定期进行安全更新 - 审计日志 ## 架构 ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Telemetry │ │ OpenTelemetry │ │ Storage │ │ Generator │───▶│ Collector │───▶│ Backends │ │ │ │ │ │ │ │ • Metrics │ │ • Processing │ │ • Prometheus │ │ • Logs │ │ • Enrichment │ │ • Loki │ │ • Traces │ │ • Routing │ │ • Tempo │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Visualization │ │ Alerting │ │ Analytics │ │ │ │ │ │ │ │ • Grafana │ │ • Alertmanager │ │ • Pyroscope │ │ • Dashboards │ │ • Notifications │ │ • Profiling │ │ • Exploration │ │ • Routing │ │ • Analysis │ └─────────────────┘ └──────────────────┘ └─────────────────┘ ``` ## 许可证 本项目基于 MIT 许可证授权 - 详见 LICENSE 文件。 ## 支持 如有问题和需要支持: 1. 查看故障排除部分 2. 查阅 GitHub Issues 3. 创建包含详细信息的新 Issue 4. 加入我们的社区讨论 **祝你拥有出色的可观测性体验!**
标签:API集成, Databricks, DNS解析, Docker, Docker-Compose, GET参数, Grafana, Kafka, Loki, MinIO, OpenTelemetry, Pipeline, PostgreSQL, Pyroscope, Redis, SLA监控, SLO监控, SonarQube插件, Spark监控, SRE, Tempo, 互联网扫描, 偏差过滤, 分布式追踪, 可观测性, 可视化仪表盘, 告警管理, 告警路由, 大数据, 安全防御评估, 实时处理, 容器化部署, 开源项目, 持续性能分析, 指标收集, 搜索引擎查询, 教学演示, 数据仿真, 数据工程, 数据库监控, 数据流水线, 无线安全, 日志聚合, 测试用例, 版权保护, 用户代理, 监控技术栈, 目录扫描, 站点可靠性工程, 系统架构, 自定义请求头, 请求拦截, 运维工具, 逆向工具, 错误预算