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, 互联网扫描, 偏差过滤, 分布式追踪, 可观测性, 可视化仪表盘, 告警管理, 告警路由, 大数据, 安全防御评估, 实时处理, 容器化部署, 开源项目, 持续性能分析, 指标收集, 搜索引擎查询, 教学演示, 数据仿真, 数据工程, 数据库监控, 数据流水线, 无线安全, 日志聚合, 测试用例, 版权保护, 用户代理, 监控技术栈, 目录扫描, 站点可靠性工程, 系统架构, 自定义请求头, 请求拦截, 运维工具, 逆向工具, 错误预算