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: image

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)

Most upvoted comments

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.