-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Description
Hi. I've tried to run Zipkin with ScyllaDB with cassandra3 storage_type. As ScyllaDB is a drop-in replacement for Cassandra most of the API calls should work as is. Nevertheless Zipkin failed to run properly.
I used this docker-compose.yml
version: "3"
networks:
zipkin:
driver: bridge
services:
zipkin:
restart: always
image: openzipkin/zipkin:latest
depends_on:
- scylladb
ports:
- 9411:9411
networks:
- zipkin
environment:
- STORAGE_TYPE=cassandra3
- CASSANDRA_CONTACT_POINTS=scylladb
- CASSANDRA_KEYSPACE=zipkin2
- CASSANDRA_LOCAL_DC=datacenter1
- CASSANDRA_ENSURE_SCHEMA=true
scylladb:
restart: always
image: scylladb/scylla:latest
ports:
- 9042:9042
volumes:
- .docker/scylladb/1:/var/lib/scylla
networks:
- zipkin
healthcheck:
test: ["CMD", "cqlsh", "-e", "describe keyspaces"]
interval: 1s
retries: 120
timeout: 1s
Which starts ScyllaDB node and Zipkin. After the start Zipkin from time to time logs message, that he is trying to ensure schema:
zipkin-zipkin-1 | 2023-09-10 22:03:21.140 INFO [/] 1 --- [cking-tasks-1-1] z.s.c.Schema : Installing schema /zipkin2-schema.cql for keyspace zipkin2
zipkin-zipkin-1 | 2023-09-10 22:03:28.372 INFO [/] 1 --- [cking-tasks-1-1] z.s.c.Schema : Installing schema /zipkin2-schema.cql for keyspace zipkin2
zipkin-zipkin-1 | 2023-09-10 22:03:30.462 INFO [/] 1 --- [cking-tasks-1-2] z.s.c.Schema : Installing schema /zipkin2-schema.cql for keyspace zipkin2
I've tried to send some sample trace to zipkin via curl
curl -vvv -X POST \
http://localhost:9411/api/v2/spans \
-H 'Content-Type: application/json' \
-d '[
{
"traceId": "1234567890abcdef",
"id": "1234567890abcdef",
"name": "example-service",
"timestamp": 1629852000000000,
"duration": 1000000,
"localEndpoint": {
"serviceName": "service-A",
"ipv4": "127.0.0.1"
},
"kind": "SERVER",
"tags": {
"http.method": "GET",
"http.path": "/api/resource"
}
}
]'
Note: Unnecessary use of -X or --request, POST is already inferred.
* Trying 127.0.0.1:9411...
* Connected to localhost (127.0.0.1) port 9411 (#0)
> POST /api/v2/spans HTTP/1.1
> Host: localhost:9411
> User-Agent: curl/8.1.2
> Accept: */*
> Content-Type: application/json
> Content-Length: 396
>
< HTTP/1.1 202 Accepted
< content-length: 0
< server: Armeria/1.17.2
< date: Sun, 10 Sep 2023 22:04:22 GMT
<
* Connection #0 to host localhost left intact
There where no errors in Zipkin logs.
Then I've tried to open Zipkin UI

And checked the logs, where was and error
zipkin-zipkin-1 | 2023-09-10 22:03:32.497 WARN [/] 1 --- [-worker-nio-2-3] z.s.i.BodyIsExceptionMessage : Unexpected error handling request.
zipkin-zipkin-1 |
zipkin-zipkin-1 | java.lang.RuntimeException: Node 29be6b37-e669-4125-82c9-3bc3436072cb is running Cassandra 3.0.8, but minimum version is 3.11.3
zipkin-zipkin-1 | at zipkin2.storage.cassandra.Schema.ensureVersion(Schema.java:99) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.Schema.applyCqlFile(Schema.java:140) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.Schema.ensureExists(Schema.java:112) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.DefaultSessionFactory.create(DefaultSessionFactory.java:45) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.LazySession.get(LazySession.java:39) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.CassandraStorage.session(CassandraStorage.java:152) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.CassandraSpanStore.<init>(CassandraSpanStore.java:63) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.CassandraStorage.spanStore(CassandraStorage.java:164) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.storage.cassandra.CassandraStorage.serviceAndSpanNames(CassandraStorage.java:176) ~[zipkin-storage-cassandra-2.24.3.jar:?]
zipkin-zipkin-1 | at zipkin2.server.internal.ZipkinQueryApiV2.getServiceNames(ZipkinQueryApiV2.java:97) ~[classes/:?]
zipkin-zipkin-1 | at com.linecorp.armeria.internal.server.annotation.AnnotatedService.invoke(AnnotatedService.java:413) ~[armeria-1.17.2.jar:?]
zipkin-zipkin-1 | at com.linecorp.armeria.internal.server.annotation.AnnotatedService.lambda$serve0$8(AnnotatedService.java:382) ~[armeria-1.17.2.jar:?]
zipkin-zipkin-1 | at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646) ~[?:?]
zipkin-zipkin-1 | at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482) ~[?:?]
zipkin-zipkin-1 | at com.linecorp.armeria.common.RequestContext.lambda$makeContextAware$3(RequestContext.java:555) ~[armeria-1.17.2.jar:?]
zipkin-zipkin-1 | at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
zipkin-zipkin-1 | at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
zipkin-zipkin-1 | at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
zipkin-zipkin-1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
zipkin-zipkin-1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
zipkin-zipkin-1 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.95.Final.jar:4.1.95.Final]
zipkin-zipkin-1 | at java.lang.Thread.run(Thread.java:833) [?:?]
zipkin-zipkin-1 |
I dig into zipkin source code, decreased min supported version to 3.0.8 as ScyllaDB reports for now and build from source to check if it will work. But during opening UI got different errors
com.datastax.oss.driver.api.core.servererrors.InvalidQueryException: Unsupported CUSTOM INDEX class org.apache.cassandra.index.sasi.SASIIndex. Note that currently, Scylla does not support SASI or any other CUSTOM INDEX class.
What can be done here in order to support ScyllaDB as a storage type and get the integration working? I'm ready to help with it.