Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
0ca266b
feat: enable extraContainers
kaixi-wang Apr 3, 2026
2151e2e
fix: share process namespace
kaixi-wang Apr 3, 2026
a46b8f0
fix: add logs access
kaixi-wang Apr 3, 2026
93359dc
chore: update tests
kaixi-wang Apr 3, 2026
4c2865e
fix: rm unread rbac file
kaixi-wang Apr 5, 2026
adb3b9e
feat: add nativeSidecarContainers
kaixi-wang Apr 23, 2026
9578958
fix: add missing files
kaixi-wang Apr 23, 2026
e9e710a
chore: update compose files
kaixi-wang May 15, 2026
ee0ba72
chore: fix tests
kaixi-wang May 15, 2026
1ca27a4
chore: fix tests
kaixi-wang May 15, 2026
30282b1
chore: trigger ci
kaixi-wang May 16, 2026
ea4c386
fix: auto-inject sidecar settings
kaixi-wang May 17, 2026
d58c01c
fix: fix auto inject sidecar vars and update test
kaixi-wang May 18, 2026
d532ec4
chore: attempt to fix test
kaixi-wang May 18, 2026
fe89df4
feat: default true for telemetry and add templates
kaixi-wang May 19, 2026
8348c4b
feat: enable sidecar by default in docker deployments
kaixi-wang May 19, 2026
b290329
chore: temp fix for tests
kaixi-wang May 19, 2026
229c9eb
feat: default enable telemetric with all default settings generated
kaixi-wang May 19, 2026
5d410c4
test: temporarily hardcode the sidecar
kaixi-wang May 19, 2026
a8c0357
fix: use latest sidecar version 0.1.62
kaixi-wang May 19, 2026
047041c
fix: runAsNonRoot override in sidecar
kaixi-wang May 19, 2026
c4013e9
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 19, 2026
20655e2
feat(helm): support external Redis via `telemetry.redis.external.url`
mo-getter May 19, 2026
bc87707
feat(helm): configurable telemetry Redis persistence
mo-getter May 19, 2026
0581d39
fix(helm): route DO env vars through `telemetry.redis.url` helper
mo-getter May 19, 2026
bf7d297
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 19, 2026
57f1cc6
feat(compose): bring telemetry config to parity with helm chart
claude May 19, 2026
71a9456
refactor(compose): consolidate telemetry services into common-service…
claude May 20, 2026
1161abf
fix(compose): default sidecar to GAR image; fix verify-section Redis …
mo-getter May 20, 2026
703d4c7
fix(helm): use Recreate strategy for telemetry-redis Deployment
mo-getter May 20, 2026
ebd2edb
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 20, 2026
b4afaaf
refactor: align telemetry-sidecar image versioning with other voxel51…
mo-getter May 20, 2026
079c65a
refactor(helm): drop unused extraContainers/nativeSidecarContainers k…
mo-getter May 20, 2026
97649d2
fix: telemetry-sidecar repo
mo-getter May 20, 2026
5f413e8
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 20, 2026
660f544
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 21, 2026
5c8a53d
docs(telemetry): fix sidecar examples; flag UI log-viewer dependency
mo-getter May 21, 2026
04fb4f6
fix(compose): bump GPU DO image tag to v2.19.0
mo-getter May 22, 2026
0862f09
fix(helm): use FQDN for in-cluster telemetry Redis URL
mo-getter May 22, 2026
1a567a2
docs(helm): clarify telemetry sidecar tag default
mo-getter May 22, 2026
5065ebf
feat(helm): add securityContext to telemetry-redis
mo-getter May 22, 2026
a05f11c
test(helm): cover shareProcessNamespace + sidecar securityContext
mo-getter May 22, 2026
488da4b
docs: add v2.19+ telemetry upgrade callout
mo-getter May 22, 2026
2d17007
refactor(helm): drop redundant teams-api SA from telemetry RoleBinding
mo-getter May 22, 2026
e6850fb
feat(helm): support pre-provisioned PVC for telemetry Redis
mo-getter May 22, 2026
43d140c
docs: clarify upgrading docs
mo-getter May 22, 2026
63bc17a
fix: rm sys_ptrace from services, explicit user rather than root, set…
kaixi-wang May 23, 2026
23793fa
chore: trigger build
kaixi-wang May 23, 2026
60ec930
chore: trigger build
kaixi-wang May 23, 2026
046fd10
fix: split into one resource per template file to match existing pattern
mo-getter May 25, 2026
9cbff10
fix: revert validation logic
mo-getter May 25, 2026
a11ef54
fix(test): update to support split redis into multiple files
mo-getter May 25, 2026
6684bc2
chore: remove unused code
mo-getter May 25, 2026
9b807cf
style: swap key order for consistency
mo-getter May 25, 2026
95a28b8
chore: remove redis max memory policy config option
mo-getter May 25, 2026
b3a9524
style: use helper since it's available
mo-getter May 25, 2026
1ce213d
refactor(helm): drop sidecar targetUid; inherit UID from pod
mo-getter May 25, 2026
4de5de9
style(helm): normalize telemetry-socket injection across DO templates
mo-getter May 25, 2026
34627d5
chore(compose): remove redis max memory policy config option
mo-getter May 26, 2026
355dacd
docs: tighten telemetry comments and prose
mo-getter May 26, 2026
96cdd13
fix(compose): set telemetry env on teams-do-gpu main container
mo-getter May 26, 2026
e197ff4
docs(telemetry): fix mutually-exclusive base-file layering example
mo-getter May 26, 2026
22d1e8c
docs: apply suggestions from code review
mo-getter May 26, 2026
1802954
style: make var name match rest of file
mo-getter May 26, 2026
b9f9ee1
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 26, 2026
e6d87c6
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 26, 2026
4cc0da0
fix: enable do logs
kaixi-wang May 26, 2026
7128d15
Merge pull request #570 from voxel51/kacey/add-dac-read-search
kaixi-wang May 26, 2026
be81e4a
feat(compose): profile-gated DO worker slots for telemetry observability
mo-getter May 26, 2026
2b2f3ea
test(compose): expect new telemetry-socket-{2,3} volumes in DO overlay
mo-getter May 26, 2026
67e8049
fix: do not suggest helm as an alternative in the docker docs
mo-getter May 26, 2026
3165f88
chore: less flaky do integration tests
kaixi-wang May 26, 2026
4fc2b70
fix: skip the emptyDir warning when existingClaim is configured
mo-getter May 26, 2026
0b143c7
test(compose): tolerate single- or double-space Compose CLI output
mo-getter May 26, 2026
e88f372
fix: guard redis-url-env since it assumed `.ctx`
mo-getter May 26, 2026
f4fbc3f
Merge pull request #571 from voxel51/kacey/update-do-intg-test
kaixi-wang May 26, 2026
709044e
fix: add missing `DAC_READ_SEARCH` to DO telemetry to enable logging
mo-getter May 26, 2026
7b52308
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 26, 2026
047e9c4
docs: add justification for added capabilities
mo-getter May 26, 2026
952027c
fix: set user so kernel matches workload
kaixi-wang May 26, 2026
2f0c6ba
fix: api log expectation
kaixi-wang May 26, 2026
f009fa7
chore: rm comment
kaixi-wang May 27, 2026
a8c5439
fix(telemetry): drop DAC_READ_SEARCH, run inline DO sidecars as 1000:…
mo-getter May 27, 2026
16a662a
fix(tests): use a more consistently used string for log verification
mo-getter May 27, 2026
03ac3d2
fix(tests): fix DO log expect
mo-getter May 27, 2026
79402bb
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 27, 2026
54a13c5
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 27, 2026
49ffb73
fix: use fiftyone debug log msg instead of sanic motd
kaixi-wang May 27, 2026
95dd6a7
fix: use connecting str
kaixi-wang May 27, 2026
8abcc14
fix: add driver-ops and docs warning
kaixi-wang May 27, 2026
94b5263
ci(fixtures): automated bump for integration test fixtures teams-app:…
voxelbuildbot May 27, 2026
b56fe9f
chore: rm comments about upgrade issues and rm pythonbuffered
kaixi-wang May 27, 2026
b9462ad
Merge remote-tracking branch 'refs/remotes/origin/release/v2.19.0-vol…
kaixi-wang May 27, 2026
82453e8
Merge pull request #576 from voxel51/kacey/v2.19.0-volume-ownership
kaixi-wang May 27, 2026
a0e7ece
fix(tests): flaking on log entries again
mo-getter May 27, 2026
79d57ab
Update docker/docs/configuring-delegated-operators.md
kaixi-wang May 28, 2026
a27178f
Update docker/docs/configuring-gpu-workloads.md
kaixi-wang May 28, 2026
f435db5
Apply suggestions from code review
mo-getter May 28, 2026
170cddd
Apply suggestions from code review
mo-getter May 28, 2026
d2f7f32
fix: apply suggestions from code review
mo-getter May 28, 2026
ed9cd75
fix: apply suggestion from code review
mo-getter May 28, 2026
e08cff5
Apply suggestions from code review
mo-getter May 28, 2026
d25ee44
style: fix pre-commit lints
mo-getter May 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ regarding FiftyOne Enterprise.
- [Advanced Configuration](#advanced-configuration)
- [Backup And Recovery](#backup-and-recovery)
- [Secrets And Sensitive Data](#secrets-and-sensitive-data)
- [Telemetry](#telemetry)
- [Snapshot Archival](#snapshot-archival)
- [Static Banner Configuration](#static-banner-configuration)
- [Storage Credentials and `FIFTYONE_ENCRYPTION_KEY`](#storage-credentials-and-fiftyone_encryption_key)
Expand Down Expand Up @@ -656,6 +657,17 @@ and
[adding secrets](https://docs.voxel51.com/enterprise/secrets.html#adding-secrets)
for questions regarding storage and encryption.

### Telemetry

FiftyOne Enterprise bundles a telemetry sidecar and Redis backend by
default in every compose file.
The Settings → Metrics page in teams-app exposes live per-service
metrics (CPU, memory, FDs, thread counts) and tailed logs.

Please refer to the
[telemetry configuration documentation](./docs/configuring-telemetry.md)
for full details.

### Snapshot Archival

Since version v1.5, FiftyOne Enterprise supports
Expand Down
148 changes: 147 additions & 1 deletion docker/common-services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ services:
FIFTYONE_MEDIA_CACHE_APP_IMAGES: false
FIFTYONE_MEDIA_CACHE_SIZE_BYTES: -1
FIFTYONE_SIGNED_URL_EXPIRATION: ${FIFTYONE_SIGNED_URL_EXPIRATION:-24}
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
# If you are routing through a proxy server you will want to set
# HTTP_PROXY_URL, HTTPS_PROXY_URL, and NO_PROXY_LIST in your .env
# then add the following environment variables to your
Expand All @@ -43,6 +44,7 @@ services:
FIFTYONE_ENV: ${FIFTYONE_ENV}
FIFTYONE_INTERNAL_SERVICE: true
FIFTYONE_LOGGING_FORMAT: ${FIFTYONE_LOGGING_FORMAT:-text}
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
GRAPHQL_DEFAULT_LIMIT: ${GRAPHQL_DEFAULT_LIMIT}
LOGGING_LEVEL: ${API_LOGGING_LEVEL:-INFO}
MONGO_DEFAULT_DB: ${FIFTYONE_DATABASE_NAME}
Expand Down Expand Up @@ -72,6 +74,7 @@ services:
FIFTYONE_SERVER_ADDRESS: ""
FIFTYONE_SERVER_PATH_PREFIX: /api/proxy/fiftyone-teams
FIFTYONE_TEAMS_PROXY_URL: ${FIFTYONE_TEAMS_PROXY_URL}
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
NODE_ENV: production
RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED: false
FIFTYONE_APP_ANONYMOUS_ANALYTICS_ENABLED: ${FIFTYONE_APP_ANONYMOUS_ANALYTICS_ENABLED:-true}
Expand Down Expand Up @@ -144,6 +147,7 @@ services:
FIFTYONE_MEDIA_CACHE_APP_IMAGES: false
FIFTYONE_MEDIA_CACHE_SIZE_BYTES: -1
FIFTYONE_PLUGINS_DIR: /opt/plugins
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
# If you are routing through a proxy server you will want to set
# HTTP_PROXY_URL, HTTPS_PROXY_URL, and NO_PROXY_LIST in your .env
# then add the following environment variables to your
Expand All @@ -158,8 +162,12 @@ services:

teams-do-common:
image: voxel51/fiftyone-teams-cv-full:v2.19.0
# Telemetry default-on requires teams-do to share its PID namespace
# with a single sidecar (compose's `pid: "service:<name>"` only joins
# one replica). Force replicas=1 to keep the 1:1 pairing deterministic.
# See docker/docs/configuring-telemetry.md for multi-worker patterns.
deploy:
replicas: ${FIFTYONE_DELEGATED_OPERATOR_WORKER_REPLICAS:-3}
replicas: 1
Comment thread
mo-getter marked this conversation as resolved.
command: >
/bin/sh -c "fiftyone delegated launch -t remote -m"
environment:
Expand All @@ -171,6 +179,144 @@ services:
FIFTYONE_INTERNAL_SERVICE: true
FIFTYONE_MEDIA_CACHE_SIZE_BYTES: -1
FIFTYONE_PLUGINS_DIR: /opt/plugins
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
TELEMETRY_SOCKET: /tmp/telemetry/agent.sock
restart: always
volumes:
- plugins-vol:/opt/plugins:ro
- telemetry-socket:/tmp/telemetry

telemetry-redis-common:
image: ${TELEMETRY_REDIS_IMAGE:-redis:7-alpine}
command:
- redis-server
- --save
- "60"
- "1"
- --dir
- /data
- --maxmemory
- ${TELEMETRY_REDIS_MAXMEMORY:-400mb}
- --maxmemory-policy
- allkeys-lru
restart: always
deploy:
resources:
limits:
cpus: "0.25"
memory: 512M
reservations:
cpus: "0.10"
memory: 256M
volumes:
- telemetry-redis-data:/data

# One sidecar per observed service. `pid: "service:<target>"` joins the
# target's PID namespace so the sidecar can read /proc/<pid>/fd/1 and
# psutil can see the target's process.
fiftyone-app-telemetry-common:
image: voxel51/telemetry-sidecar:v2.19.0
pid: "service:fiftyone-app"
# Matches the workload image's USER 1000:1000 so the kernel's
# ptrace_may_access() check on /proc/<workload-pid>/fd/1 reads passes via the
# same-UID fast path to allow for log tailing
user: "1000:1000"
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
environment:
POD_NAME: fiftyone-app
POD_NAMESPACE: ${TELEMETRY_NAMESPACE:-docker}
SERVICE_TYPE: fiftyone-app
TARGET_NAME: ${FIFTYONE_APP_TARGET_NAME:-hypercorn}
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
deploy:
resources:
limits:
cpus: "0.10"
memory: 512M
reservations:
cpus: "0.10"
memory: 512M
restart: always

teams-api-telemetry-common:
image: voxel51/telemetry-sidecar:v2.19.0
pid: "service:teams-api"
user: "1000:1000"
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
environment:
POD_NAME: teams-api
POD_NAMESPACE: ${TELEMETRY_NAMESPACE:-docker}
SERVICE_TYPE: teams-api
TARGET_NAME: ${TEAMS_API_TARGET_NAME:-fiftyone-teams-api}
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
deploy:
resources:
limits:
cpus: "0.10"
memory: 512M
reservations:
cpus: "0.10"
memory: 512M
restart: always

teams-plugins-telemetry-common:
image: voxel51/telemetry-sidecar:v2.19.0
pid: "service:teams-plugins"
user: "1000:1000"
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
environment:
POD_NAME: teams-plugins
POD_NAMESPACE: ${TELEMETRY_NAMESPACE:-docker}
SERVICE_TYPE: teams-plugins
TARGET_NAME: ${TEAMS_PLUGINS_TARGET_NAME:-hypercorn}
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
deploy:
resources:
limits:
cpus: "0.10"
memory: 512M
reservations:
cpus: "0.10"
memory: 512M
restart: always

teams-do-telemetry-common:
image: voxel51/telemetry-sidecar:v2.19.0
pid: "service:teams-do"
user: "1000:1000"
cap_drop:
- ALL
cap_add:
- SYS_PTRACE # allows for additional profiling metrics (sampled stacks via py-spy)
security_opt:
- no-new-privileges:true
environment:
POD_NAME: teams-do
POD_NAMESPACE: ${TELEMETRY_NAMESPACE:-docker}
SERVICE_TYPE: delegated-operator
TARGET_NAME: ${TEAMS_DO_TARGET_NAME:-fiftyone delegated}
EXECUTOR_SIDECAR: "true"
TELEMETRY_SOCKET: /tmp/telemetry/agent.sock
FIFTYONE_TELEMETRY_REDIS_URL: ${FIFTYONE_TELEMETRY_REDIS_URL:-redis://telemetry-redis:6379}
FIFTYONE_DATABASE_URI: ${FIFTYONE_DATABASE_URI}
FIFTYONE_DATABASE_NAME: ${FIFTYONE_DATABASE_NAME}
deploy:
resources:
limits:
cpus: "0.10"
memory: 512M
reservations:
cpus: "0.10"
memory: 512M
volumes:
- telemetry-socket:/tmp/telemetry
restart: always
13 changes: 13 additions & 0 deletions docker/docs/configuring-delegated-operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,19 @@ in conjunction with one of the three plugin configurations.
up -d
```

> [!IMPORTANT]
> The `compose.delegated-operators.yaml` overlay defines three worker
> slots — `teams-do`, `teams-do-2`, `teams-do-3` — each paired with a
> telemetry sidecar. Slot 1 is always on (the default renders one
> observed worker); slots 2 and 3 are gated behind cumulative Compose
> profiles (`do-2`, `do-3`). Set `COMPOSE_PROFILES=do-N` to add slots
> up to N (cap of 3). This replaces the deprecated
> `FIFTYONE_DELEGATED_OPERATOR_WORKER_REPLICAS` environment variable.
> If you used on the <2.19 default of 3 workers, set `COMPOSE_PROFILES=do-3`.
> See
> [Scaling teams-do with telemetry](./configuring-telemetry.md#scaling-teams-do-with-telemetry)
> for the slot/profile reference and the rationale.

Optionally, delegated operation run logs may be uploaded to a
network-mounted file system or cloud storage path.
Logs are uploaded in the format
Expand Down
20 changes: 14 additions & 6 deletions docker/docs/configuring-gpu-workloads.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,19 @@ We will configure the
[delegated operators](./configuring-delegated-operators.md)
with GPUs.

In your `compose.delegated-operators.yaml`, under `.services.teams-do`,
add the `deploy.resource.reservation.devices` configuration.

The below will deploy a CPU-based delegated operator (`teams-do`) as well
as a GPU-based delegated operator (`teams-do-with-gpu`):
For most deployments, use the shipped GPU overlay
`compose.delegated-operators.gpu.yaml`, which includes the GPU
worker and its paired telemetry sidecar. Activate it alongside the CPU
worker profile (e.g. `COMPOSE_PROFILES=do-1,gpu`); see
[Configuring Telemetry](./configuring-telemetry.md#scaling-teams-do-with-telemetry)
for the full profile reference.

The snippet below contains custom inline example of
how to add a GPU-based delegated operator (`teams-do-with-gpu`)
alongside the standard `teams-do`. Pair it with telemetry by
adding a matching `teams-do-with-gpu-telemetry` sidecar. See
`docker/<auth-dir>/compose.delegated-operators.gpu.yaml` for an
example.

```yaml
services:
Expand All @@ -81,7 +89,7 @@ services:
volumes:
- plugins-vol:/opt/plugins:ro
deploy:
replicas: ${FIFTYONE_DELEGATED_OPERATOR_WORKER_REPLICAS:-3}
replicas: 1
resources:
reservations:
devices:
Expand Down
Loading
Loading