From b7d3248b37c5648fb50f333c28bd6ab8b5c628fc Mon Sep 17 00:00:00 2001 From: Sun-ZhenXing <1006925066@qq.com> Date: Sun, 31 May 2026 11:28:15 +0800 Subject: [PATCH] feat: add otel-host-agent and archon stacks, update signoz --- README.md | 1 + README.zh.md | 1 + apps/archon/.env.example | 101 ++++++++ apps/archon/README.md | 94 ++++++++ apps/archon/README.zh.md | 94 ++++++++ apps/archon/docker-compose.yaml | 108 +++++++++ apps/archon/migrations/000_combined.sql | 300 ++++++++++++++++++++++++ src/otel-host-agent/.env.example | 8 + src/otel-host-agent/config.yaml | 121 ++++++++++ src/otel-host-agent/docker-compose.yaml | 23 ++ src/signoz/.env.example | 9 +- src/signoz/README.md | 23 +- src/signoz/README.zh.md | 23 +- src/signoz/docker-compose.yaml | 6 +- 14 files changed, 886 insertions(+), 26 deletions(-) create mode 100644 apps/archon/.env.example create mode 100644 apps/archon/README.md create mode 100644 apps/archon/README.zh.md create mode 100644 apps/archon/docker-compose.yaml create mode 100644 apps/archon/migrations/000_combined.sql create mode 100644 src/otel-host-agent/.env.example create mode 100644 src/otel-host-agent/config.yaml create mode 100644 src/otel-host-agent/docker-compose.yaml diff --git a/README.md b/README.md index b8143f2..a77c0f6 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ These services require building custom Docker images from source. | [Apache Kafka](./src/kafka) | 7.8.0 | | [Apache Pulsar](./src/pulsar) | 4.0.7 | | [Apache RocketMQ](./src/rocketmq) | 5.3.1 | +| [Archon](./apps/archon) | latest | | [Agentgateway](./src/agentgateway) | 0.11.2 | | [AnythingLLM](./src/anythingllm) | latest | | [Bifrost Gateway](./src/bifrost-gateway) | v1.4.17 | diff --git a/README.zh.md b/README.zh.md index 37554c9..98690e0 100644 --- a/README.zh.md +++ b/README.zh.md @@ -56,6 +56,7 @@ docker compose exec redis redis-cli ping | [Apache Kafka](./src/kafka) | 7.8.0 | | [Apache Pulsar](./src/pulsar) | 4.0.7 | | [Apache RocketMQ](./src/rocketmq) | 5.3.1 | +| [Archon](./apps/archon) | latest | | [Agentgateway](./src/agentgateway) | 0.11.2 | | [AnythingLLM](./src/anythingllm) | latest | | [Bifrost Gateway](./src/bifrost-gateway) | v1.4.17 | diff --git a/apps/archon/.env.example b/apps/archon/.env.example new file mode 100644 index 0000000..60ae910 --- /dev/null +++ b/apps/archon/.env.example @@ -0,0 +1,101 @@ +# Global registry prefix (optional) +# GLOBAL_REGISTRY= + +# Service versions +# The official pre-built Archon image is currently published as the latest tag. +ARCHON_VERSION=latest +POSTGRES_VERSION=17-alpine + +# Timezone +TZ=UTC + +# Host port overrides +ARCHON_PORT_OVERRIDE=3000 +POSTGRES_PORT_OVERRIDE=5432 + +# Archon listener settings inside the container +PORT=3000 +HOST=0.0.0.0 + +# AI assistant credentials +# Docker deployments should use explicit credentials instead of relying on host auth. +CLAUDE_USE_GLOBAL_AUTH=false + +# Claude OAuth token (recommended for Docker) +CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-xxxxx + +# Claude API key (alternative to OAuth token) +# CLAUDE_API_KEY=sk-ant-xxxxx + +# Codex tokens (optional alternative assistant) +# CODEX_ID_TOKEN= +# CODEX_ACCESS_TOKEN= +# CODEX_REFRESH_TOKEN= +# CODEX_ACCOUNT_ID= + +# Default assistant for new conversations +DEFAULT_AI_ASSISTANT=claude + +# Database +# Leave empty to use SQLite at /.archon/archon.db. +# For the local PostgreSQL profile, set: +# DATABASE_URL=postgresql://postgres:postgres@postgres:5432/remote_coding_agent +DATABASE_URL= +POSTGRES_PASSWORD=postgres + +# Git provider tokens +# If you use GitHub integrations, set both variables to the same personal access token. +GH_TOKEN= +GITHUB_TOKEN= +WEBHOOK_SECRET= + +# GitLab and Gitea integrations (optional) +GITLAB_URL=https://gitlab.com +GITLAB_TOKEN= +GITLAB_WEBHOOK_SECRET= +GITEA_URL= +GITEA_TOKEN= +GITEA_WEBHOOK_SECRET= + +# Platform tokens (optional) +TELEGRAM_BOT_TOKEN= +DISCORD_BOT_TOKEN= +SLACK_BOT_TOKEN= +SLACK_APP_TOKEN= + +# Additional model provider API keys (optional) +OPENAI_API_KEY= +ANTHROPIC_API_KEY= +GEMINI_API_KEY= +OPENROUTER_API_KEY= + +# Adapter behavior +BOT_DISPLAY_NAME=Archon +TELEGRAM_STREAMING_MODE=stream +DISCORD_STREAMING_MODE=batch +SLACK_STREAMING_MODE=batch + +# Persistence +# Leave these empty to use Docker-managed named volumes. +# ARCHON_DATA=/opt/archon-data +# ARCHON_USER_HOME=/opt/archon-user-home + +# Logging and runtime +LOG_LEVEL=info +MAX_CONCURRENT_CONVERSATIONS=10 +SESSION_RETENTION_DAYS=30 + +# Telemetry opt-out (set to 1 to disable) +# DO_NOT_TRACK=1 + +# Resource limits - Archon app +ARCHON_CPU_LIMIT=2.0 +ARCHON_MEMORY_LIMIT=4G +ARCHON_CPU_RESERVATION=0.1 +ARCHON_MEMORY_RESERVATION=1G + +# Resource limits - PostgreSQL +POSTGRES_CPU_LIMIT=1.0 +POSTGRES_MEMORY_LIMIT=1G +POSTGRES_CPU_RESERVATION=0.1 +POSTGRES_MEMORY_RESERVATION=256M diff --git a/apps/archon/README.md b/apps/archon/README.md new file mode 100644 index 0000000..48d974c --- /dev/null +++ b/apps/archon/README.md @@ -0,0 +1,94 @@ +# Archon + +[English](./README.md) | [中文](./README.zh.md) + +Quick start: . + +This service deploys Archon, an open-source workflow engine for AI coding agents. The stack uses the official pre-built web UI + API image, persists Archon's working state in Docker volumes, defaults to SQLite for zero-config startup, and offers an optional `with-db` profile for local PostgreSQL. + +## Services + +- **archon**: Archon web UI and API server. +- **postgres**: Optional PostgreSQL 17 backend for shared or heavier workflow usage. + +## Quick Start + +1. Copy `.env.example` to `.env`: + + ```bash + cp .env.example .env + ``` + +2. Set at least one AI credential in `.env`. + + For Docker deployments, prefer `CLAUDE_CODE_OAUTH_TOKEN` or `CLAUDE_API_KEY`. If you use GitHub repositories or webhooks, set both `GH_TOKEN` and `GITHUB_TOKEN` to the same personal access token. + +3. Start Archon: + + ```bash + docker compose up -d + ``` + +4. Open `http://localhost:3000`. + +## Optional Local PostgreSQL + +If you want a local PostgreSQL backend instead of SQLite, set this in `.env`: + +```ini +DATABASE_URL=postgresql://postgres:postgres@postgres:5432/remote_coding_agent +``` + +Then start the optional profile: + +```bash +docker compose --profile with-db up -d +``` + +## Core Environment Variables + +| Variable | Description | Default | +| ------------------------- | --------------------------------------------------------------------------- | --------------------- | +| `ARCHON_VERSION` | Archon image tag | `latest` | +| `ARCHON_PORT_OVERRIDE` | Host port for the Archon web UI and API | `3000` | +| `CLAUDE_CODE_OAUTH_TOKEN` | Claude Code OAuth token for Docker deployments | placeholder | +| `CLAUDE_API_KEY` | Anthropic API key as an alternative to OAuth | *(empty)* | +| `DEFAULT_AI_ASSISTANT` | Default assistant for new conversations | `claude` | +| `DATABASE_URL` | PostgreSQL connection string; leave empty to use SQLite | *(empty)* | +| `GH_TOKEN` | GitHub personal access token for cloning private repos and GitHub CLI usage | *(empty)* | +| `GITHUB_TOKEN` | Same GitHub token reused by the GitHub adapter | *(empty)* | +| `ARCHON_DATA` | Optional host path for `/.archon`; leave empty for a named volume | Docker-managed volume | +| `ARCHON_USER_HOME` | Optional host path for `/home/appuser`; leave empty for a named volume | Docker-managed volume | +| `POSTGRES_PASSWORD` | Password for the optional local PostgreSQL container | `postgres` | + +## Volumes + +- `archon_data`: SQLite database, registered codebases, workspaces, worktrees, and other Archon-managed data under `/.archon`. +- `archon_user_home`: Persisted `/home/appuser` state, including Claude/Codex auth, `~/.gitconfig`, shell history, and user-installed Archon assets. +- `archon_postgres_data`: PostgreSQL data when the `with-db` profile is enabled. + +## Ports + +- **3000**: Archon web UI and API +- **5432**: Optional local PostgreSQL, bound to `127.0.0.1` only when the `with-db` profile is enabled + +## Resource Requirements + +| Service | CPU Limit | Memory Limit | +| -------- | --------- | ------------ | +| archon | 2 | 4 GB | +| postgres | 1 | 1 GB | + +The Archon image includes Chromium and Git tooling. Plan for **4+ GB RAM** and **2+ CPU cores**, and allocate more if you run concurrent workflows or browser-driven validation. + +## Notes + +- Default startup stores data in SQLite at `/.archon/archon.db`; use `DATABASE_URL` only when you need PostgreSQL. +- The bundled PostgreSQL bootstrap mounts the current `000_combined.sql` schema for fresh installs. If a future upstream release adds incremental PostgreSQL migrations, apply the newer SQL files from the Archon repository before upgrading an existing PostgreSQL data volume. +- If you expose Archon beyond localhost, put it behind an authenticated reverse proxy. + +## Documentation + +- [Archon Docker Guide](https://archon.diy/docs/deployment/docker) +- [Archon Database Reference](https://archon.diy/docs/reference/database) +- [GitHub](https://github.com/coleam00/Archon) diff --git a/apps/archon/README.zh.md b/apps/archon/README.zh.md new file mode 100644 index 0000000..bd4a177 --- /dev/null +++ b/apps/archon/README.zh.md @@ -0,0 +1,94 @@ +# Archon + +[English](./README.md) | [中文](./README.zh.md) + +快速开始:。 + +此服务用于部署 Archon,一个面向 AI 编码代理的开源工作流引擎。该栈使用官方预构建的 Web UI + API 镜像,通过 Docker 卷持久化 Archon 的工作状态,默认使用 SQLite 实现零配置启动,并提供可选的 `with-db` profile 用于本地 PostgreSQL。 + +## 服务 + +- **archon**:Archon Web UI 和 API 服务器。 +- **postgres**:可选的 PostgreSQL 17 后端,适合共享访问或更高并发的工作流场景。 + +## 快速开始 + +1. 将 `.env.example` 复制为 `.env`: + + ```bash + cp .env.example .env + ``` + +2. 在 `.env` 中至少设置一种 AI 凭据。 + + 对于 Docker 部署,优先使用 `CLAUDE_CODE_OAUTH_TOKEN` 或 `CLAUDE_API_KEY`。如果你要使用 GitHub 仓库或 Webhook,请将 `GH_TOKEN` 和 `GITHUB_TOKEN` 设置为同一个个人访问令牌。 + +3. 启动 Archon: + + ```bash + docker compose up -d + ``` + +4. 打开 `http://localhost:3000`。 + +## 可选的本地 PostgreSQL + +如果你想用本地 PostgreSQL 代替 SQLite,请在 `.env` 中设置: + +```ini +DATABASE_URL=postgresql://postgres:postgres@postgres:5432/remote_coding_agent +``` + +然后启动可选 profile: + +```bash +docker compose --profile with-db up -d +``` + +## 核心环境变量 + +| 变量 | 说明 | 默认值 | +| ------------------------- | ---------------------------------------------------- | ----------------- | +| `ARCHON_VERSION` | Archon 镜像标签 | `latest` | +| `ARCHON_PORT_OVERRIDE` | Archon Web UI 和 API 的宿主机端口 | `3000` | +| `CLAUDE_CODE_OAUTH_TOKEN` | Docker 部署推荐使用的 Claude Code OAuth Token | 占位符 | +| `CLAUDE_API_KEY` | Anthropic API Key,作为 OAuth 的替代方案 | *(空)* | +| `DEFAULT_AI_ASSISTANT` | 新会话的默认助手 | `claude` | +| `DATABASE_URL` | PostgreSQL 连接串;留空时使用 SQLite | *(空)* | +| `GH_TOKEN` | 用于克隆私有仓库和 GitHub CLI 的 GitHub 个人访问令牌 | *(空)* | +| `GITHUB_TOKEN` | GitHub 适配器复用的同一个 GitHub Token | *(空)* | +| `ARCHON_DATA` | 可选的 `/.archon` 宿主机路径;留空时使用命名卷 | Docker 托管命名卷 | +| `ARCHON_USER_HOME` | 可选的 `/home/appuser` 宿主机路径;留空时使用命名卷 | Docker 托管命名卷 | +| `POSTGRES_PASSWORD` | 可选本地 PostgreSQL 容器的密码 | `postgres` | + +## 数据卷 + +- `archon_data`:`/.archon` 下的 SQLite 数据库、已注册代码库、工作区、worktree 和其他 Archon 数据。 +- `archon_user_home`:持久化的 `/home/appuser` 状态,包括 Claude/Codex 登录信息、`~/.gitconfig`、shell 历史和用户安装的 Archon 资源。 +- `archon_postgres_data`:启用 `with-db` profile 时使用的 PostgreSQL 数据目录。 + +## 端口 + +- **3000**:Archon Web UI 和 API +- **5432**:可选的本地 PostgreSQL,仅在启用 `with-db` profile 时绑定到 `127.0.0.1` + +## 资源需求 + +| 服务 | CPU 限制 | 内存限制 | +| -------- | -------- | -------- | +| archon | 2 | 4 GB | +| postgres | 1 | 1 GB | + +Archon 镜像内置了 Chromium 和 Git 工具链。建议至少分配 **4+ GB RAM** 和 **2+ CPU 核心**;如果你要同时运行多个工作流或浏览器驱动的验证任务,请继续上调资源。 + +## 说明 + +- 默认启动路径会把数据写入 `/.archon/archon.db` 中的 SQLite;只有在需要 PostgreSQL 时才设置 `DATABASE_URL`。 +- 这个栈为全新 PostgreSQL 数据卷挂载了当前的 `000_combined.sql` 初始化脚本。如果未来上游版本新增了增量 PostgreSQL 迁移,请在升级已有 PostgreSQL 数据卷前,从 Archon 上游仓库应用新的 SQL 文件。 +- 如果你要把 Archon 暴露到 localhost 之外,请放到带认证的反向代理之后。 + +## 文档 + +- [Archon Docker 指南](https://archon.diy/docs/deployment/docker) +- [Archon 数据库参考](https://archon.diy/docs/reference/database) +- [GitHub 仓库](https://github.com/coleam00/Archon) diff --git a/apps/archon/docker-compose.yaml b/apps/archon/docker-compose.yaml new file mode 100644 index 0000000..1eccd16 --- /dev/null +++ b/apps/archon/docker-compose.yaml @@ -0,0 +1,108 @@ +# Archon defaults to a single-container SQLite deployment. +# Enable the with-db profile and set DATABASE_URL to use local PostgreSQL. + +x-defaults: &defaults + restart: unless-stopped + logging: + driver: json-file + options: + max-size: 100m + max-file: '3' + +services: + archon: + <<: *defaults + image: ${GLOBAL_REGISTRY:-ghcr.io/}coleam00/archon:${ARCHON_VERSION:-latest} + ports: + - '${ARCHON_PORT_OVERRIDE:-3000}:${PORT:-3000}' + environment: + - TZ=${TZ:-UTC} + - ARCHON_DOCKER=true + - PORT=${PORT:-3000} + - HOST=${HOST:-0.0.0.0} + - CLAUDE_USE_GLOBAL_AUTH=${CLAUDE_USE_GLOBAL_AUTH:-false} + - CLAUDE_CODE_OAUTH_TOKEN=${CLAUDE_CODE_OAUTH_TOKEN:-} + - CLAUDE_API_KEY=${CLAUDE_API_KEY:-} + - CODEX_ID_TOKEN=${CODEX_ID_TOKEN:-} + - CODEX_ACCESS_TOKEN=${CODEX_ACCESS_TOKEN:-} + - CODEX_REFRESH_TOKEN=${CODEX_REFRESH_TOKEN:-} + - CODEX_ACCOUNT_ID=${CODEX_ACCOUNT_ID:-} + - DEFAULT_AI_ASSISTANT=${DEFAULT_AI_ASSISTANT:-claude} + - DATABASE_URL=${DATABASE_URL:-} + - GH_TOKEN=${GH_TOKEN:-} + - GITHUB_TOKEN=${GITHUB_TOKEN:-} + - WEBHOOK_SECRET=${WEBHOOK_SECRET:-} + - GITLAB_URL=${GITLAB_URL:-https://gitlab.com} + - GITLAB_TOKEN=${GITLAB_TOKEN:-} + - GITLAB_WEBHOOK_SECRET=${GITLAB_WEBHOOK_SECRET:-} + - GITEA_URL=${GITEA_URL:-} + - GITEA_TOKEN=${GITEA_TOKEN:-} + - GITEA_WEBHOOK_SECRET=${GITEA_WEBHOOK_SECRET:-} + - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-} + - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-} + - SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN:-} + - SLACK_APP_TOKEN=${SLACK_APP_TOKEN:-} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-} + - GEMINI_API_KEY=${GEMINI_API_KEY:-} + - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-} + - BOT_DISPLAY_NAME=${BOT_DISPLAY_NAME:-Archon} + - TELEGRAM_STREAMING_MODE=${TELEGRAM_STREAMING_MODE:-stream} + - DISCORD_STREAMING_MODE=${DISCORD_STREAMING_MODE:-batch} + - SLACK_STREAMING_MODE=${SLACK_STREAMING_MODE:-batch} + - LOG_LEVEL=${LOG_LEVEL:-info} + - MAX_CONCURRENT_CONVERSATIONS=${MAX_CONCURRENT_CONVERSATIONS:-10} + - SESSION_RETENTION_DAYS=${SESSION_RETENTION_DAYS:-30} + - DO_NOT_TRACK=${DO_NOT_TRACK:-} + volumes: + - ${ARCHON_DATA:-archon_data}:/.archon + - ${ARCHON_USER_HOME:-archon_user_home}:/home/appuser + healthcheck: + test: [CMD, curl, -f, 'http://localhost:${PORT:-3000}/api/health'] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s + deploy: + resources: + limits: + cpus: ${ARCHON_CPU_LIMIT:-2.0} + memory: ${ARCHON_MEMORY_LIMIT:-4G} + reservations: + cpus: ${ARCHON_CPU_RESERVATION:-0.1} + memory: ${ARCHON_MEMORY_RESERVATION:-1G} + + postgres: + <<: *defaults + image: ${GLOBAL_REGISTRY:-}postgres:${POSTGRES_VERSION:-17-alpine} + profiles: + - with-db + environment: + - TZ=${TZ:-UTC} + - POSTGRES_DB=remote_coding_agent + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} + ports: + - '127.0.0.1:${POSTGRES_PORT_OVERRIDE:-5432}:5432' + volumes: + - archon_postgres_data:/var/lib/postgresql/data + - ./migrations/000_combined.sql:/docker-entrypoint-initdb.d/000_combined.sql:ro + healthcheck: + test: [CMD-SHELL, 'pg_isready -U postgres -d remote_coding_agent'] + interval: 10s + timeout: 5s + retries: 5 + start_period: 15s + deploy: + resources: + limits: + cpus: ${POSTGRES_CPU_LIMIT:-1.0} + memory: ${POSTGRES_MEMORY_LIMIT:-1G} + reservations: + cpus: ${POSTGRES_CPU_RESERVATION:-0.1} + memory: ${POSTGRES_MEMORY_RESERVATION:-256M} + +volumes: + archon_data: + archon_user_home: + archon_postgres_data: diff --git a/apps/archon/migrations/000_combined.sql b/apps/archon/migrations/000_combined.sql new file mode 100644 index 0000000..35dde14 --- /dev/null +++ b/apps/archon/migrations/000_combined.sql @@ -0,0 +1,300 @@ +-- Remote Coding Agent - Combined Schema +-- Version: Combined (final state after migrations 001-020) +-- Description: Complete database schema (idempotent - safe to run multiple times) +-- +-- 8 Tables: +-- 1. remote_agent_codebases +-- 1b. remote_agent_codebase_env_vars +-- 2. remote_agent_conversations +-- 3. remote_agent_sessions +-- 4. remote_agent_isolation_environments +-- 5. remote_agent_workflow_runs +-- 6. remote_agent_workflow_events +-- 7. remote_agent_messages +-- +-- Dropped tables (via migrations): +-- - remote_agent_command_templates (017) +-- +-- Dropped columns (via migrations): +-- - conversations.worktree_path (007) +-- - conversations.isolation_env_id_legacy (007) +-- - conversations.isolation_provider (007) + +CREATE EXTENSION IF NOT EXISTS pgcrypto; + +-- ============================================================================ +-- Table 1: Codebases +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_codebases ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + name VARCHAR(255) NOT NULL, + repository_url VARCHAR(500), + default_cwd VARCHAR(500) NOT NULL, + ai_assistant_type VARCHAR(20) DEFAULT 'claude', + allow_env_keys BOOLEAN NOT NULL DEFAULT FALSE, + commands JSONB DEFAULT '{}'::jsonb, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); + +COMMENT ON TABLE remote_agent_codebases IS + 'Repository metadata: name, URL, working directory, AI assistant type, and command paths (JSONB)'; + +-- ============================================================================ +-- Table 1b: Codebase Env Vars +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_codebase_env_vars ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + codebase_id UUID NOT NULL REFERENCES remote_agent_codebases(id) ON DELETE CASCADE, + key VARCHAR(255) NOT NULL, + value TEXT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + UNIQUE(codebase_id, key) +); + +CREATE INDEX IF NOT EXISTS idx_codebase_env_vars_codebase_id + ON remote_agent_codebase_env_vars(codebase_id); + +COMMENT ON TABLE remote_agent_codebase_env_vars IS + 'Per-project env vars merged into Options.env on Claude SDK calls. Managed via Web UI or config.'; + +-- ============================================================================ +-- Table 2: Conversations +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_conversations ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + platform_type VARCHAR(20) NOT NULL, + platform_conversation_id VARCHAR(255) NOT NULL, + codebase_id UUID REFERENCES remote_agent_codebases(id) ON DELETE SET NULL, + cwd VARCHAR(500), + ai_assistant_type VARCHAR(20) DEFAULT 'claude', + isolation_env_id UUID, + title VARCHAR(255), + deleted_at TIMESTAMP WITH TIME ZONE, + hidden BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW(), + last_activity_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + UNIQUE(platform_type, platform_conversation_id) +); + +CREATE INDEX IF NOT EXISTS idx_remote_agent_conversations_codebase + ON remote_agent_conversations(codebase_id); +CREATE INDEX IF NOT EXISTS idx_conversations_hidden + ON remote_agent_conversations(hidden); +CREATE INDEX IF NOT EXISTS idx_conversations_codebase + ON remote_agent_conversations(codebase_id) WHERE deleted_at IS NULL; + +COMMENT ON COLUMN remote_agent_conversations.isolation_env_id IS + 'UUID reference to isolation_environments table (the only isolation reference)'; + +-- ============================================================================ +-- Table 3: Sessions +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_sessions ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + conversation_id UUID REFERENCES remote_agent_conversations(id) ON DELETE CASCADE, + codebase_id UUID REFERENCES remote_agent_codebases(id) ON DELETE SET NULL, + ai_assistant_type VARCHAR(20) NOT NULL, + assistant_session_id VARCHAR(255), + active BOOLEAN DEFAULT true, + metadata JSONB DEFAULT '{}'::jsonb, + parent_session_id UUID REFERENCES remote_agent_sessions(id), + transition_reason TEXT, + ended_reason TEXT, + started_at TIMESTAMP DEFAULT NOW(), + ended_at TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_remote_agent_sessions_conversation + ON remote_agent_sessions(conversation_id, active); +CREATE INDEX IF NOT EXISTS idx_remote_agent_sessions_codebase + ON remote_agent_sessions(codebase_id); +CREATE INDEX IF NOT EXISTS idx_sessions_parent + ON remote_agent_sessions(parent_session_id); +CREATE INDEX IF NOT EXISTS idx_sessions_conversation_started + ON remote_agent_sessions(conversation_id, started_at DESC); + +COMMENT ON COLUMN remote_agent_sessions.parent_session_id IS + 'Links to the previous session in this conversation (for audit trail)'; +COMMENT ON COLUMN remote_agent_sessions.transition_reason IS + 'Why this session was created: plan-to-execute, isolation-changed, reset-requested, etc.'; +COMMENT ON COLUMN remote_agent_sessions.ended_reason IS + 'Why this session was deactivated: reset-requested, cwd-changed, conversation-closed, etc.'; + +-- ============================================================================ +-- Table 4: Isolation Environments +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_isolation_environments ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + codebase_id UUID NOT NULL REFERENCES remote_agent_codebases(id) ON DELETE CASCADE, + + -- Workflow identification (what work this is for) + workflow_type TEXT NOT NULL, + workflow_id TEXT NOT NULL, + + -- Implementation details + provider TEXT NOT NULL DEFAULT 'worktree', + working_path TEXT NOT NULL, + branch_name TEXT NOT NULL, + + -- Lifecycle + status TEXT NOT NULL DEFAULT 'active', + created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + created_by_platform TEXT, + + -- Cross-reference metadata (for linking) + metadata JSONB DEFAULT '{}' +); + +CREATE UNIQUE INDEX IF NOT EXISTS unique_active_workflow + ON remote_agent_isolation_environments (codebase_id, workflow_type, workflow_id) + WHERE status = 'active'; + +CREATE INDEX IF NOT EXISTS idx_isolation_env_codebase + ON remote_agent_isolation_environments(codebase_id); +CREATE INDEX IF NOT EXISTS idx_isolation_env_status + ON remote_agent_isolation_environments(status); +CREATE INDEX IF NOT EXISTS idx_isolation_env_workflow + ON remote_agent_isolation_environments(workflow_type, workflow_id); + +ALTER TABLE remote_agent_conversations + ADD COLUMN IF NOT EXISTS isolation_env_id UUID + REFERENCES remote_agent_isolation_environments(id) ON DELETE SET NULL; + +CREATE INDEX IF NOT EXISTS idx_conversations_isolation_env_id + ON remote_agent_conversations(isolation_env_id); + +COMMENT ON TABLE remote_agent_isolation_environments IS + 'Work-centric isolated environments with independent lifecycle'; +COMMENT ON COLUMN remote_agent_isolation_environments.workflow_type IS + 'Type of work: issue, pr, review, thread, task'; +COMMENT ON COLUMN remote_agent_isolation_environments.workflow_id IS + 'Identifier for the work (issue number, PR number, thread hash, etc.)'; + +-- ============================================================================ +-- Table 5: Workflow Runs +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_workflow_runs ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + workflow_name VARCHAR(255) NOT NULL, + conversation_id UUID REFERENCES remote_agent_conversations(id) ON DELETE CASCADE, + codebase_id UUID REFERENCES remote_agent_codebases(id) ON DELETE SET NULL, + current_step_index INTEGER, + status VARCHAR(20) NOT NULL DEFAULT 'pending', + user_message TEXT NOT NULL, + metadata JSONB DEFAULT '{}', + parent_conversation_id UUID REFERENCES remote_agent_conversations(id) ON DELETE SET NULL, + started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + completed_at TIMESTAMP WITH TIME ZONE, + last_activity_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + working_path TEXT +); + +CREATE INDEX IF NOT EXISTS idx_workflow_runs_conversation + ON remote_agent_workflow_runs(conversation_id); +CREATE INDEX IF NOT EXISTS idx_workflow_runs_status + ON remote_agent_workflow_runs(status); +CREATE INDEX IF NOT EXISTS idx_workflow_runs_parent_conv + ON remote_agent_workflow_runs(parent_conversation_id); +CREATE INDEX IF NOT EXISTS idx_workflow_runs_last_activity + ON remote_agent_workflow_runs(last_activity_at) + WHERE status = 'running'; + +COMMENT ON TABLE remote_agent_workflow_runs IS + 'Tracks workflow execution state for resumption and observability'; + +-- ============================================================================ +-- Table 6: Workflow Events +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_workflow_events ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + workflow_run_id UUID NOT NULL REFERENCES remote_agent_workflow_runs(id) ON DELETE CASCADE, + event_type VARCHAR(50) NOT NULL, + step_index INTEGER, + step_name VARCHAR(255), + data JSONB DEFAULT '{}', + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_workflow_events_run_id + ON remote_agent_workflow_events(workflow_run_id); +CREATE INDEX IF NOT EXISTS idx_workflow_events_type + ON remote_agent_workflow_events(event_type); + +COMMENT ON TABLE remote_agent_workflow_events IS + 'Lean UI-relevant workflow events for observability (step transitions, artifacts, errors)'; + +-- ============================================================================ +-- Table 7: Messages +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS remote_agent_messages ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + conversation_id UUID NOT NULL REFERENCES remote_agent_conversations(id) ON DELETE CASCADE, + role VARCHAR(20) NOT NULL, + content TEXT NOT NULL DEFAULT '', + metadata JSONB DEFAULT '{}'::jsonb, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS idx_messages_conversation_id + ON remote_agent_messages(conversation_id, created_at ASC); + +-- ============================================================================ +-- Cleanup: Drop legacy objects from older schemas +-- ============================================================================ + +DROP TABLE IF EXISTS remote_agent_command_templates; +DROP INDEX IF EXISTS idx_remote_agent_command_templates_name; + +ALTER TABLE remote_agent_conversations DROP COLUMN IF EXISTS worktree_path; +ALTER TABLE remote_agent_conversations DROP COLUMN IF EXISTS isolation_env_id_legacy; +ALTER TABLE remote_agent_conversations DROP COLUMN IF EXISTS isolation_provider; +DROP INDEX IF EXISTS idx_conversations_isolation; + +ALTER TABLE remote_agent_isolation_environments + DROP CONSTRAINT IF EXISTS unique_workflow; + +-- ============================================================================ +-- Idempotent ALTER statements for upgrading existing databases +-- ============================================================================ + +ALTER TABLE remote_agent_conversations + ADD COLUMN IF NOT EXISTS isolation_env_id UUID + REFERENCES remote_agent_isolation_environments(id) ON DELETE SET NULL; +ALTER TABLE remote_agent_conversations + ADD COLUMN IF NOT EXISTS last_activity_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(); + +ALTER TABLE remote_agent_workflow_runs + ADD COLUMN IF NOT EXISTS last_activity_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(); + +ALTER TABLE remote_agent_sessions + ADD COLUMN IF NOT EXISTS parent_session_id UUID REFERENCES remote_agent_sessions(id); +ALTER TABLE remote_agent_sessions + ADD COLUMN IF NOT EXISTS transition_reason TEXT; + +ALTER TABLE remote_agent_conversations + ADD COLUMN IF NOT EXISTS title VARCHAR(255); +ALTER TABLE remote_agent_conversations + ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP WITH TIME ZONE; + +ALTER TABLE remote_agent_workflow_runs + ADD COLUMN IF NOT EXISTS parent_conversation_id UUID + REFERENCES remote_agent_conversations(id) ON DELETE SET NULL; +ALTER TABLE remote_agent_conversations + ADD COLUMN IF NOT EXISTS hidden BOOLEAN DEFAULT FALSE; + +ALTER TABLE remote_agent_sessions + ADD COLUMN IF NOT EXISTS ended_reason TEXT; + +ALTER TABLE remote_agent_codebases + ADD COLUMN IF NOT EXISTS allow_env_keys BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/src/otel-host-agent/.env.example b/src/otel-host-agent/.env.example new file mode 100644 index 0000000..7ad5eea --- /dev/null +++ b/src/otel-host-agent/.env.example @@ -0,0 +1,8 @@ +# OpenTelemetry Collector Contrib image version +OTEL_COLLECTOR_VERSION=0.153.0 + +# Deployment environment label (used in resource attributes) +DEPLOY_ENV=production + +# OTLP HTTP exporter endpoint (your OTel backend, e.g. OpenObserve, Grafana Tempo, Jaeger) +OTEL_EXPORTER_ENDPOINT=http://localhost:4318 diff --git a/src/otel-host-agent/config.yaml b/src/otel-host-agent/config.yaml new file mode 100644 index 0000000..1a670a8 --- /dev/null +++ b/src/otel-host-agent/config.yaml @@ -0,0 +1,121 @@ +receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + hostmetrics: + root_path: /hostfs + collection_interval: 60s + scrapers: + cpu: {} + disk: {} + load: {} + filesystem: + exclude_fs_types: + match_type: strict + fs_types: + - autofs + - binfmt_misc + - cgroup + - configfs + - debugfs + - devpts + - devtmpfs + - fusectl + - hugetlbfs + - mqueue + - nsfs + - overlay + - proc + - procfs + - pstore + - rpc_pipefs + - securityfs + - squashfs + - sysfs + - tmpfs + - tracefs + exclude_mount_points: + match_type: regexp + mount_points: + - ^/dev/.*$ + - ^/proc/.*$ + - ^/sys/.*$ + - ^/run/.*$ + - ^/var/lib/docker/.*$ + - ^/snap/.*$ + memory: {} + network: + exclude: + match_type: regexp + interfaces: + - '^veth.*$' + - '^docker.*$' + - '^br-.*$' + - ^lo$ + paging: {} + process: + mute_process_name_error: true + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true + processes: {} + system: {} + + docker_stats: + endpoint: unix:///var/run/docker.sock + collection_interval: 10s + timeout: 20s + +processors: + batch: + send_batch_size: 1000 + timeout: 10s + resourcedetection: + detectors: [env, system] + timeout: 2s + system: + hostname_sources: [os] + memory_limiter: + check_interval: 5s + limit_mib: 4000 + spike_limit_mib: 800 + +exporters: + otlphttp: + endpoint: ${OTEL_EXPORTER_ENDPOINT} + tls: + insecure: true + compression: gzip + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 10000 + retry_on_failure: + enabled: true + +extensions: + health_check: + endpoint: 0.0.0.0:13133 + pprof: + endpoint: 0.0.0.0:1777 + zpages: + endpoint: 0.0.0.0:55679 + +service: + extensions: [health_check, pprof, zpages] + pipelines: + traces: + receivers: [otlp] + processors: [memory_limiter, resourcedetection, batch] + exporters: [otlphttp] + metrics: + receivers: [otlp, hostmetrics, docker_stats] + processors: [memory_limiter, resourcedetection, batch] + exporters: [otlphttp] + logs: + receivers: [otlp] + processors: [memory_limiter, resourcedetection, batch] + exporters: [otlphttp] diff --git a/src/otel-host-agent/docker-compose.yaml b/src/otel-host-agent/docker-compose.yaml new file mode 100644 index 0000000..60c0b5a --- /dev/null +++ b/src/otel-host-agent/docker-compose.yaml @@ -0,0 +1,23 @@ +services: + collection-agent: + image: otel/opentelemetry-collector-contrib:${OTEL_COLLECTOR_VERSION:-0.153.0} + restart: unless-stopped + user: '0:0' + network_mode: host + environment: + - OTEL_RESOURCE_ATTRIBUTES=deployment.environment=${DEPLOY_ENV:-production} + - OTEL_EXPORTER_ENDPOINT=${OTEL_EXPORTER_ENDPOINT:-http://localhost:4318} + volumes: + - ./config.yaml:/etc/otelcol-contrib/config.yaml:ro + - /:/hostfs:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + deploy: + resources: + limits: + cpus: '1.0' + memory: 2G + logging: + driver: json-file + options: + max-size: 10m + max-file: '3' diff --git a/src/signoz/.env.example b/src/signoz/.env.example index 7ac0526..5544f23 100644 --- a/src/signoz/.env.example +++ b/src/signoz/.env.example @@ -9,11 +9,14 @@ TZ=UTC # SigNoz Version Configuration # ============================================ +# SigNoz image repository/name +SIGNOZ_IMAGE_NAME=signoz/signoz + # SigNoz all-in-one backend + frontend + alertmanager version -SIGNOZ_VERSION=v0.118.0 +SIGNOZ_VERSION=v0.125.1 # SigNoz OTel Collector version (also used for migration jobs) -SIGNOZ_OTEL_COLLECTOR_VERSION=v0.144.2 +SIGNOZ_OTEL_COLLECTOR_VERSION=v0.144.4 # ClickHouse version SIGNOZ_CLICKHOUSE_VERSION=25.5.6 @@ -113,4 +116,4 @@ SIGNOZ_ZOOKEEPER_MEMORY_LIMIT=512M SIGNOZ_ZOOKEEPER_CPU_RESERVATION=0.1 # Memory reservation for ZooKeeper -SIGNOZ_ZOOKEEPER_MEMORY_RESERVATION=128M \ No newline at end of file +SIGNOZ_ZOOKEEPER_MEMORY_RESERVATION=128M diff --git a/src/signoz/README.md b/src/signoz/README.md index 5a1c3cf..56cdb7f 100644 --- a/src/signoz/README.md +++ b/src/signoz/README.md @@ -15,14 +15,14 @@ SigNoz is an open-source observability platform that provides monitoring and tro ## Services -| Service | Image | Description | -| -------------------------------- | ------------------------------------- | ------------------------------------------------------ | -| `signoz` | signoz/signoz:v0.118.0 | All-in-one backend, frontend UI, and alert manager | -| `otel-collector` | signoz/signoz-otel-collector:v0.144.2 | Receives, processes, and exports telemetry data | -| `clickhouse` | clickhouse/clickhouse-server:25.5.6 | Time-series database for traces, metrics, and logs | -| `zookeeper-1` | signoz/zookeeper:3.7.1 | ZooKeeper for ClickHouse replication metadata | -| `init-clickhouse` | clickhouse/clickhouse-server:25.5.6 | One-shot init that downloads the histogramQuantile UDF | -| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.2 | One-shot schema migration for ClickHouse | +| Service | Image | Description | +| -------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------ | +| `signoz` | `${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.125.1}` | All-in-one backend, frontend UI, and alert manager | +| `otel-collector` | signoz/signoz-otel-collector:v0.144.4 | Receives, processes, and exports telemetry data | +| `clickhouse` | clickhouse/clickhouse-server:25.5.6 | Time-series database for traces, metrics, and logs | +| `zookeeper-1` | signoz/zookeeper:3.7.1 | ZooKeeper for ClickHouse replication metadata | +| `init-clickhouse` | clickhouse/clickhouse-server:25.5.6 | One-shot init that downloads the histogramQuantile UDF | +| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.4 | One-shot schema migration for ClickHouse | ## Quick Start @@ -61,13 +61,16 @@ SigNoz is an open-source observability platform that provides monitoring and tro | `SIGNOZ_PORT_OVERRIDE` | `8080` | SigNoz UI host port | | `SIGNOZ_OTEL_GRPC_PORT_OVERRIDE` | `4317` | OTLP gRPC receiver host port | | `SIGNOZ_OTEL_HTTP_PORT_OVERRIDE` | `4318` | OTLP HTTP receiver host port | -| `SIGNOZ_VERSION` | `v0.118.0` | SigNoz image version | -| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.2` | OTel Collector image version | +| `SIGNOZ_IMAGE_NAME` | `signoz/signoz` | SigNoz image repository/name | +| `SIGNOZ_VERSION` | `v0.125.1` | SigNoz image version | +| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.4` | OTel Collector image version | | `SIGNOZ_CLICKHOUSE_VERSION` | `25.5.6` | ClickHouse image version | | `TZ` | `UTC` | Timezone | See `.env.example` for the complete list including resource limits. +`SIGNOZ_IMAGE_NAME` lets you switch the SigNoz image repository while keeping the tag controlled by `SIGNOZ_VERSION`. + ### Sending Telemetry Data Configure your application's OpenTelemetry SDK to export to: diff --git a/src/signoz/README.zh.md b/src/signoz/README.zh.md index 60a9670..4b8ec5d 100644 --- a/src/signoz/README.zh.md +++ b/src/signoz/README.zh.md @@ -15,14 +15,14 @@ SigNoz 是一个开源的可观测性平台,为分布式应用程序提供监 ## 服务列表 -| 服务 | 镜像 | 描述 | -| -------------------------------- | ------------------------------------- | ---------------------------------------- | -| `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 迁移 | +| 服务 | 镜像 | 描述 | +| -------------------------------- | ----------------------------------------------------------------- | ---------------------------------------- | +| `signoz` | `${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.125.1}` | 后端、前端 UI 和告警管理器的合体镜像 | +| `otel-collector` | signoz/signoz-otel-collector:v0.144.4 | 接收、处理和导出遥测数据 | +| `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.4 | 一次性 ClickHouse Schema 迁移 | ## 快速开始 @@ -61,13 +61,16 @@ SigNoz 是一个开源的可观测性平台,为分布式应用程序提供监 | `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_IMAGE_NAME` | `signoz/signoz` | SigNoz 镜像仓库名或镜像名 | +| `SIGNOZ_VERSION` | `v0.125.1` | SigNoz 镜像版本 | +| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.4` | OTel Collector 镜像版本 | | `SIGNOZ_CLICKHOUSE_VERSION` | `25.5.6` | ClickHouse 镜像版本 | | `TZ` | `UTC` | 时区 | 完整变量列表(含资源限制)请查看 `.env.example`。 +`SIGNOZ_IMAGE_NAME` 用于切换 SigNoz 镜像仓库,同时继续由 `SIGNOZ_VERSION` 控制标签版本。 + ### 发送遥测数据 将应用程序的 OpenTelemetry SDK 配置为向以下端点导出数据: diff --git a/src/signoz/docker-compose.yaml b/src/signoz/docker-compose.yaml index 3fb20b7..5686936 100644 --- a/src/signoz/docker-compose.yaml +++ b/src/signoz/docker-compose.yaml @@ -116,7 +116,7 @@ services: # One-shot migration: bootstraps and runs schema migrations signoz-telemetrystore-migrator: <<: *db-depend - image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.2} + image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.4} restart: on-failure environment: - TZ=${TZ:-UTC} @@ -140,7 +140,7 @@ services: # SigNoz all-in-one backend + frontend + alertmanager signoz: <<: *db-depend - image: ${GLOBAL_REGISTRY:-}signoz/signoz:${SIGNOZ_VERSION:-v0.118.0} + image: ${GLOBAL_REGISTRY:-}${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.125.1} ports: - '${SIGNOZ_PORT_OVERRIDE:-8080}:8080' volumes: @@ -169,7 +169,7 @@ services: # OTel Collector for receiving telemetry data otel-collector: <<: *db-depend - image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.2} + image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.4} entrypoint: [/bin/sh] command: - -c