ClickHouse / ClickHouse/ClickStack

Bind mounts using Windows and Docker Desktop

Abierto
#1 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Shell
Estrellas
166
Forks
19
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I tried setting up a demo and experimentation environment for ClickStack starting with the documentation [[0]](https://clickhouse.com/docs/use-cases/observability/clickstack/getting-started#local-deployment) using the single image distribution and loading the data as described in the sample data section [[1]](https://clickhouse.com/docs/use-cases/observability/clickstack/getting-started/sample-data). I eventually moved to the docker compose setup in an attempt to figure out what was going on [[2]](https://clickhouse.com/docs/use-cases/observability/clickstack/deployment/docker-compose).

My setup is Windows with Docker for windows installed. After doing the setup and running the import it seems that the OTel collector will accept all the data and return a `200` on all the requests. The data would never appear in HyperDX though, leading me to think there was an issue with the OTel collector.

Turns out this was a red herring and the database couldn't write to the bound volumes. There were a few message like this one;

```
ch-server-1 | 2026.01.27 05:39:22.744026 [ 724 ] {} void DB::SystemLog::flushImpl(const std::vector &, uint64_t) [LogElement = DB::AsynchronousMetricLogElement]: Failed to flush system log system.asynchronous_metric_log with 2912 entries up to offset 2912: std::exception. Code: 1001, type: std::__1::filesystem::filesystem_error, e.what() = filesystem error: in rename: Permission denied ["/var/lib/clickhouse/store/d01/d01be757-5763-4d27-bb4c-2dcb98d86347/tmp_insert_202601_1_1_0/"] ["/var/lib/clickhouse/store/d01/d01be757-5763-4d27-bb4c-2dcb98d86347/202601_1_1_0/"], Stack trace (when copying this message, always include the lines below):
ch-server-1 |
ch-server-1 | 0. std::system_error::system_error(std::error_code, String const&) @ 0x000000001b6225f7
ch-server-1 | 1. std::filesystem::filesystem_error::filesystem_error[abi:ne190107](String const&, std::filesystem::path const&, std::filesystem::path const&, std::error_code) @ 0x000000001b5da520
ch-server-1 | 2. void std::filesystem::__throw_filesystem_error[abi:ne190107](String&, std::filesystem::path const&, std::filesystem::path const&, std::error_code const&) @ 0x000000001b5da234
ch-server-1 | 3. std::filesystem::detail::ErrorHandler::report(std::error_code const&) const @ 0x000000001b5d881a
ch-server-1 | 4. std::filesystem::__rename(std::filesystem::path const&, std::filesystem::path const&, std::error_code*) @ 0x000000001b5df75d
ch-server-1 | 5. DB::DiskLocal::moveDirectory(String const&, String const&) @ 0x0000000013338f1b
ch-server-1 | 6. DB::DataPartStorageOnDiskBase::rename(String, String, std::shared_ptr, bool, bool) @ 0x0000000014dabc82
ch-server-1 | 7. DB::IMergeTreeDataPart::renameTo(String const&, bool) @ 0x0000000014de7d1b
ch-server-1 | 8. DB::MergeTreeData::preparePartForCommit(std::shared_ptr&, DB::MergeTreeData::Transaction&, bool, bool) @ 0x0000000014ecf8a2
ch-server-1 | 9. DB::MergeTreeData::renameTempPartAndReplaceImpl(std::shared_ptr&, DB::MergeTreeData::Transaction&, DB::DataPartsLock&, std::vector, std::allocator>>*, bool) @ 0x0000000014f08997
ch-server-1 | 10. DB::MergeTreeData::renameTempPartAndAdd(std::shared_ptr&, DB::MergeTreeData::Transaction&, DB::DataPartsLock&, bool) @ 0x0000000014f09a28
ch-server-1 | 11. DB::MergeTreeSink::finishDelayedChunk() @ 0x00000000152d7e57
ch-server-1 | 12. DB::runStep(std::function, std::shared_ptr&) @ 0x0000000015927503
ch-server-1 | 13. DB::ExceptionKeepingTransform::work() @ 0x0000000015926f5f
ch-server-1 | 14. DB::ExecutionThreadContext::executeTask() @ 0x000000001568ad62
ch-server-1 | 15. DB::PipelineExecutor::executeStepImpl(unsigned long, std::atomic*) @ 0x000000001567e865
ch-server-1 | 16. DB::PipelineExecutor::executeStep(std::atomic*) @ 0x000000001567dc32
ch-server-1 | 17. DB::SystemLog::savingThreadFunction() @ 0x0000000013f87f8c
ch-server-1 | 18. void std::__function::__policy_invoker::__call_impl[abi:ne190107]::ThreadFromGlobalPoolImpl::startup()::'lambda'()>(DB::SystemLogBase::startup()::'lambda'()&&)::'lambda'(), void ()>>(std::__function::__policy_storage const*) @ 0x000000000fdc9b23
ch-server-1 | 19. ThreadPoolImpl::ThreadFromThreadPool::worker() @ 0x000000000fd6c752
ch-server-1 | 20. void* std::__thread_proxy[abi:ne190107]>, void (ThreadPoolImpl::ThreadFromThreadPool::*)(), ThreadPoolImpl::ThreadFromThreadPool*>>(void*) @ 0x000000000fd73c1a
ch-server-1 | 21. ? @ 0x0000000000094ac3
ch-server-1 | 22. ? @ 0x00000000001268c0
```

And turning the bound directories to named volumes in the `docker-compose.yml` file fixed this issue.

```
services:
ch-server:
volumes:
- ./docker/clickhouse/local/config.xml:/etc/clickhouse-server/config.xml
- ./docker/clickhouse/local/users.xml:/etc/clickhouse-server/users.xml
# When using WSL creating a volume mapped to the file system causes the database to be unable to write to it
# use some named volumes instead, these can still be persisted for later inspection and all that.
#- .volumes/ch_data:/var/lib/clickhouse
#- .volumes/ch_logs:/var/log/clickhouse-server
- ch_data:/var/lib/clickhouse
- ch_logs:/var/log/clickhouse-server
volumes:
ch_data:
ch_logs:
```

It took me a while to figure this out as there was quite a bit of noise in the database log and being unfamiliar with the tool I don't know what to look for. I'm assuming this would be the same issue in the single image setup, although I haven't gone through the trouble of validating that fact. This might be worth mentioning in the docker compose deployment documentation and the getting started.

Output from `docker info` for completeness

$ docker info
Client:
Version: 27.2.0
Context: desktop-linux
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.16.2-desktop.1
Path: C:\Program Files\Docker\cli-plugins\docker-buildx.exe
compose: Docker Compose (Docker Inc.)
Version: v2.29.2-desktop.2
Path: C:\Program Files\Docker\cli-plugins\docker-compose.exe
debug: Get a shell into any image or container (Docker Inc.)
Version: 0.0.34
Path: C:\Program Files\Docker\cli-plugins\docker-debug.exe
desktop: Docker Desktop commands (Alpha) (Docker Inc.)
Version: v0.0.15
Path: C:\Program Files\Docker\cli-plugins\docker-desktop.exe
dev: Docker Dev Environments (Docker Inc.)
Version: v0.1.2
Path: C:\Program Files\Docker\cli-plugins\docker-dev.exe
extension: Manages Docker extensions (Docker Inc.)
Version: v0.2.25
Path: C:\Program Files\Docker\cli-plugins\docker-extension.exe
feedback: Provide feedback, right in your terminal! (Docker Inc.)
Version: v1.0.5
Path: C:\Program Files\Docker\cli-plugins\docker-feedback.exe
init: Creates Docker-related starter files for your project (Docker Inc.)
Version: v1.3.0
Path: C:\Program Files\Docker\cli-plugins\docker-init.exe
sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
Version: 0.6.0
Path: C:\Program Files\Docker\cli-plugins\docker-sbom.exe
scout: Docker Scout (Docker Inc.)
Version: v1.13.0
Path: C:\Program Files\Docker\cli-plugins\docker-scout.exe
Server:
Containers: 8
Running: 4
Paused: 0
Stopped: 4
Images: 26
Server Version: 27.2.0
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 nvidia runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 8fc6bcff51318944179630522a095cc9dbf9f353
runc version: v1.1.13-0-g58aa920
init version: de40ad0
Security Options:
seccomp
Profile: unconfined
cgroupns
Kernel Version: 6.6.87.2-microsoft-standard-WSL2
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 22
Total Memory: 15.35GiB
Name: docker-desktop
ID: 5f4801ad-2c0d-4367-ae2e-abcc2ace2de9
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Labels:
com.docker.desktop.address=npipe://\\.\pipe\docker_cli
Experimental: false
Insecure Registries:
hubproxy.docker.internal:5555
127.0.0.0/8
Live Restore Enabled: false

WARNING: daemon is not using the default seccomp profile

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.