jaeger: Error reading dependencies from storage: unconfigured table dependencies
Requirement
We’re attempting to view Dependencies in Jaeger UI. Our Jaeger cluster was configured to integrate with Dgraph with the Cassandra Jaeger backend. The script used to provision the Jaeger keyspace is provided below.
Problem
We get this error message when we click on the “Dependencies” tab in the UI:

As a consequence, we cannot view that page. However, we are able to view our Dgraph traces successfully in the Search tab.
Idea of cause
We’re wondering if perhaps something is missing from the Cassandra keyspace that is causing this problem. We used the create.sh script with the v002.cql.tmpl script (that are available here: https://github.com/jaegertracing/jaeger/tree/master/plugin/storage/cassandra/schema ) to generate the keyspace below.
Script used to provision Jaeger keyspace in Cassandra:
CREATE KEYSPACE IF NOT EXISTS jaeger_v1_prodCluster1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};
CREATE TYPE IF NOT EXISTS jaeger_v1_prodCluster1.keyvalue (
key text,
value_type text,
value_string text,
value_bool boolean,
value_long bigint,
value_double double,
value_binary blob,
);
CREATE TYPE IF NOT EXISTS jaeger_v1_prodCluster1.log (
ts bigint,
fields list<frozen<keyvalue>>,
);
CREATE TYPE IF NOT EXISTS jaeger_v1_prodCluster1.span_ref (
ref_type text,
trace_id blob,
span_id bigint,
);
CREATE TYPE IF NOT EXISTS jaeger_v1_prodCluster1.process (
service_name text,
tags list<frozen<keyvalue>>,
);
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.traces (
trace_id blob,
span_id bigint,
span_hash bigint,
parent_id bigint,
operation_name text,
flags int,
start_time bigint,
duration bigint,
tags list<frozen<keyvalue>>,
logs list<frozen<log>>,
refs list<frozen<span_ref>>,
process frozen<process>,
PRIMARY KEY (trace_id, span_id, span_hash)
)
WITH compaction = {
'compaction_window_size': '1',
'compaction_window_unit': 'HOURS',
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.service_names (
service_name text,
PRIMARY KEY (service_name)
)
WITH compaction = {
'min_threshold': '4',
'max_threshold': '32',
'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.operation_names (
service_name text,
operation_name text,
PRIMARY KEY ((service_name), operation_name)
)
WITH compaction = {
'min_threshold': '4',
'max_threshold': '32',
'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.service_operation_index (
service_name text,
operation_name text,
start_time bigint,
trace_id blob,
PRIMARY KEY ((service_name, operation_name), start_time)
) WITH CLUSTERING ORDER BY (start_time DESC)
AND compaction = {
'compaction_window_size': '1',
'compaction_window_unit': 'HOURS',
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.service_name_index (
service_name text,
bucket int,
start_time bigint,
trace_id blob,
PRIMARY KEY ((service_name, bucket), start_time)
) WITH CLUSTERING ORDER BY (start_time DESC)
AND compaction = {
'compaction_window_size': '1',
'compaction_window_unit': 'HOURS',
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.duration_index (
service_name text, // service name
operation_name text, // operation name, or blank for queries without span name
bucket timestamp, // time bucket, - the start_time of the given span rounded to an hour
duration bigint, // span duration, in microseconds
start_time bigint,
trace_id blob,
PRIMARY KEY ((service_name, operation_name, bucket), duration, start_time, trace_id)
) WITH CLUSTERING ORDER BY (duration DESC, start_time DESC)
AND compaction = {
'compaction_window_size': '1',
'compaction_window_unit': 'HOURS',
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.tag_index (
service_name text,
tag_key text,
tag_value text,
start_time bigint,
trace_id blob,
span_id bigint,
PRIMARY KEY ((service_name, tag_key, tag_value), start_time, trace_id, span_id)
)
WITH CLUSTERING ORDER BY (start_time DESC)
AND compaction = {
'compaction_window_size': '1',
'compaction_window_unit': 'HOURS',
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'
}
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 172800
AND speculative_retry = 'NONE'
AND gc_grace_seconds = 10800;
CREATE TYPE IF NOT EXISTS jaeger_v1_prodCluster1.dependency (
parent text,
child text,
call_count bigint,
source text,
);
CREATE TABLE IF NOT EXISTS jaeger_v1_prodCluster1.dependencies_v2 (
ts_bucket timestamp,
ts timestamp,
dependencies list<frozen<dependency>>,
PRIMARY KEY (ts_bucket, ts)
) WITH CLUSTERING ORDER BY (ts DESC)
AND compaction = {
'min_threshold': '4',
'max_threshold': '32',
'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
}
AND default_time_to_live = 0;
About this issue
- Original URL
- State: open
- Created 5 years ago
- Comments: 17 (9 by maintainers)
If the frequency of queries to dependencies is relatively low, then the check for table version can be done at query time instead of at startup time.
I have the same problem when I click on system architecture tab. I think that might case by GetDependencyVersion. It get V1 when there is no data in dependencies_v2. After running spark job, it insert data into dependencies_v2. So the function will get V2 and you need to restart the query pod to take effect.
Yes. https://www.jaegertracing.io/docs/1.15/deployment/#aggregation-jobs-for-service-dependencies
Still weird that you got that error message, since Spark job doesn’t create tables, it only populates the data.