refactor: signoz

This commit is contained in:
Sun-ZhenXing
2026-04-15 15:05:16 +08:00
parent ea1ca927c8
commit 0e948befac
11 changed files with 1802 additions and 398 deletions
+59 -84
View File
@@ -13,133 +13,108 @@ SigNoz 是一个开源的可观测性平台,为分布式应用程序提供监
- **告警**:基于指标和追踪配置告警
- **OpenTelemetry 原生**:构建在 OpenTelemetry 标准之上
## 服务列表
| 服务 | 镜像 | 描述 |
| -------------------------------- | ------------------------------------- | ---------------------------------------- |
| `signoz` | signoz/signoz:v0.118.0 | 后端、前端 UI 和告警管理器的合体镜像 |
| `otel-collector` | signoz/signoz-otel-collector:v0.144.2 | 接收、处理和导出遥测数据 |
| `clickhouse` | clickhouse/clickhouse-server:25.5.6 | 存储追踪、指标和日志的时序数据库 |
| `zookeeper-1` | signoz/zookeeper:3.7.1 | ZooKeeper,用于 ClickHouse 副本元数据 |
| `init-clickhouse` | clickhouse/clickhouse-server:25.5.6 | 一次性初始化,下载 histogramQuantile UDF |
| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.2 | 一次性 ClickHouse Schema 迁移 |
## 快速开始
1. 复制环境文件并根据需要调整
1. 复制环境文件并设置 JWT 密钥
```bash
cp .env.example .env
# 编辑 .env,将 SIGNOZ_JWT_SECRET 设置为随机字符串
```
2. 创建所需的配置文件
```bash
mkdir -p query-service frontend
# 根据需要下载或创建配置文件
```
3. 启动服务:
2. 启动服务
```bash
docker compose up -d
```
4. 访问 SigNoz UI`http://localhost:3301`
3. 访问 SigNoz UI`http://localhost:8080`
> **注意**:首次启动时,`init-clickhouse` 需要从 GitHub 下载约 10 MB 的二进制文件,请确保网络可访问。
## 默认端口
| 服务 | 端口 | 描述 |
| --------------------- | ---- | ---------------- |
| Frontend UI | 3301 | SigNoz Web 界面 |
| SigNoz UI | 8080 | SigNoz Web 界面 |
| OTel Collector (gRPC) | 4317 | OTLP gRPC 接收器 |
| OTel Collector (HTTP) | 4318 | OTLP HTTP 接收器 |
## 配置说明
### 环境变量
### 主要环境变量
主要环境变量(完整列表请查看 `.env.example`):
| 变量 | 默认值 | 描述 |
| -------------------------------- | --------------------------- | ----------------------------------- |
| `SIGNOZ_JWT_SECRET` | `please-change-this-secret` | JWT 签名密钥 — **生产环境必须修改** |
| `SIGNOZ_PORT_OVERRIDE` | `8080` | SigNoz UI 宿主机端口 |
| `SIGNOZ_OTEL_GRPC_PORT_OVERRIDE` | `4317` | OTLP gRPC 接收器宿主机端口 |
| `SIGNOZ_OTEL_HTTP_PORT_OVERRIDE` | `4318` | OTLP HTTP 接收器宿主机端口 |
| `SIGNOZ_VERSION` | `v0.118.0` | SigNoz 镜像版本 |
| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.2` | OTel Collector 镜像版本 |
| `SIGNOZ_CLICKHOUSE_VERSION` | `25.5.6` | ClickHouse 镜像版本 |
| `TZ` | `UTC` | 时区 |
- `SIGNOZ_PORT_OVERRIDE`:前端 UI 端口(默认:3301)
- `SIGNOZ_OTEL_GRPC_PORT_OVERRIDE`:OTLP gRPC 接收器端口(默认:4317)
- `SIGNOZ_OTEL_HTTP_PORT_OVERRIDE`:OTLP HTTP 接收器端口(默认:4318)
- `SIGNOZ_CLICKHOUSE_VERSION`ClickHouse 版本
- `SIGNOZ_QUERY_SERVICE_VERSION`:查询服务版本
- `SIGNOZ_FRONTEND_VERSION`:前端版本
### 必需的配置文件
此设置需要以下配置文件:
1. **clickhouse-config.xml**ClickHouse 服务器配置
2. **clickhouse-users.xml**ClickHouse 用户配置
3. **otel-collector-config.yaml**OTel Collector 管道配置
4. **query-service/prometheus.yml**:查询服务 Prometheus 配置
5. **frontend/nginx-config.conf**:前端 Nginx 配置
您可以从 [SigNoz 官方仓库](https://github.com/SigNoz/signoz/tree/main/deploy/docker/clickhouse-setup) 获取这些文件。
完整变量列表(含资源限制)请查看 `.env.example`。
### 发送遥测数据
要向 SigNoz 发送遥测数据,请配置您的应用程序使用 OpenTelemetry 并使用以下端点
应用程序 OpenTelemetry SDK 配置为向以下端点导出数据
- **gRPC**`localhost:4317`
- **HTTP**`localhost:4318`
Node.js 示例:
```javascript
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc')
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node')
const exporter = new OTLPTraceExporter({
url: 'http://localhost:4317',
})
```
- **gRPC**`http://localhost:4317`
- **HTTP**`http://localhost:4318`
## 架构说明
SigNoz 由以下组件组成:
```text
用户 → SigNoz UI8080)→ signoz 后端
应用 → OTel Collector4317/4318)→ ClickHouse
Zookeeper(副本元数据)
```
1. **ClickHouse**:用于存储追踪、指标和日志的时序数据库
2. **OTel Collector**:接收、处理和导出遥测数据
3. **Query Service**:从 ClickHouse 查询数据
4. **Frontend**:用于可视化和分析的 Web UI
5. **Alert Manager**:管理和发送告警
启动顺序:
## 资源需求
最低推荐资源:
- **CPU**4 核
- **内存**8GB RAM
- **存储**20GB 数据存储空间
1. `init-clickhouse` 下载 histogramQuantile 二进制文件,`zookeeper-1` 同步启动
2. `clickhouse` 在初始化完成且 ZooKeeper 健康后启动
3. `signoz-telemetrystore-migrator` 执行 Schema 迁移
4. `signoz` 和 `otel-collector` 启动
## 数据持久化
数据持久化在 Docker 卷中:
数据持久化在 Docker 命名卷中:
- `clickhouse_data`ClickHouse 数据库文件
- `signoz_data`SigNoz 应用程序数据
- `alertmanager_data`:告警管理器数据
| 卷名 | 内容 |
| ------------------------- | ------------------------------ |
| `clickhouse_data` | ClickHouse 数据库文件 |
| `clickhouse_user_scripts` | histogramQuantile UDF 二进制 |
| `signoz_data` | SigNoz SQLite 数据库及应用数据 |
| `zookeeper_data` | ZooKeeper 状态数据 |
## 安全注意事项
- 如适用,请更改默认凭据
- 使用环境变量配置敏感信息
- 生产环境部署时考虑使用密钥管理
- 仅限制必要端口的网络访问
- 生产环境请启用身份验证
## 健康检查
所有服务都包含健康检查以确保正确启动和依赖管理:
- ClickHouseHTTP 健康端点
- OTel CollectorHTTP 健康端点
- Query ServiceHTTP 健康端点
- FrontendHTTP 健康端点
- Alert ManagerHTTP 健康端点
- **生产环境必须将 `SIGNOZ_JWT_SECRET` 修改为唯一的随机值**
- 生产环境中限制端口仅对可信网络暴露
- 生产环境建议在反向代理后面启用 TLS 终止
## 故障排查
1. **服务未启动**使用 `docker compose logs` 检查日志
2. **无数据显示**:验证 OTel Collector 配置和应用程序仪器化
3. **内存使用过高**:调整 ClickHouse 内存限制或数据保留策略
## 许可证
SigNoz 采用 MIT 许可证。详情请参阅 [官方仓库](https://github.com/SigNoz/signoz)。
1. **服务未启动**运行 `docker compose logs` 检查连接错误
2. **init-clickhouse 失败**:没有网络访问权限,无法下载 UDF 二进制文件
3. **otel-collector 不健康**:可能正在等待迁移完成,通过 `docker compose logs signoz-telemetrystore-migrator` 检查
4. **无数据显示**:验证 OTel Collector 配置和应用程序的 OpenTelemetry 仪器化
## 参考资料