opentelemetry-python-contrib icon indicating copy to clipboard operation
opentelemetry-python-contrib copied to clipboard

Redis instrumentation doesn't work properly with Redis Cluster

Open Grey-Fox opened this issue 1 year ago • 1 comments
trafficstars

Spans from redis instrumentation don't contain a lot of attributes, such as "db.system", "net.transport" and so on. It happens because RedisCluster instance doesn't have connection_pool attribute.

Describe your environment Ubuntu 22.04 Python 3.10.13

Packages:

asgiref==3.8.1
async-timeout==4.0.3
Deprecated==1.2.14
importlib-metadata==7.0.0
opentelemetry-api==1.24.0
opentelemetry-distro==0.45b0
opentelemetry-instrumentation==0.45b0
opentelemetry-instrumentation-asgi==0.45b0
opentelemetry-instrumentation-asyncio==0.45b0
opentelemetry-instrumentation-aws-lambda==0.45b0
opentelemetry-instrumentation-dbapi==0.45b0
opentelemetry-instrumentation-logging==0.45b0
opentelemetry-instrumentation-redis==0.45b0
opentelemetry-instrumentation-sqlite3==0.45b0
opentelemetry-instrumentation-urllib==0.45b0
opentelemetry-instrumentation-wsgi==0.45b0
opentelemetry-propagator-aws-xray==1.0.1
opentelemetry-sdk==1.24.0
opentelemetry-semantic-conventions==0.45b0
opentelemetry-test-utils==0.45b0
opentelemetry-util-http==0.45b0
redis==5.0.4
typing_extensions==4.11.0
wrapt==1.16.0
zipp==3.18.1

Steps to reproduce main.py file:

from redis import RedisCluster

if __name__ == '__main__':
    redis = RedisCluster(host='localhost', port=6380)
    redis.set('key', 'value')
    print(redis.get('key'))

docker-compose.yaml for Redis Cluster:

services:
  redis-node-0:
    image: bitnami/redis-cluster:latest
    network_mode: host
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_PORT_NUMBER=6380'
      - 'REDIS_NODES=localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384,localhost:6385'

  redis-node-1:
    image: bitnami/redis-cluster:latest
    network_mode: host
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_PORT_NUMBER=6381'
      - 'REDIS_NODES=localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384,localhost:6385'

  redis-node-2:
    image: bitnami/redis-cluster:latest
    network_mode: host
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_PORT_NUMBER=6382'
      - 'REDIS_NODES=localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384,localhost:6385
 
  redis-node-3:
    image: bitnami/redis-cluster:latest
    network_mode: host
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_PORT_NUMBER=6383'
      - 'REDIS_NODES=localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384,localhost:6385'

  redis-node-4:
    image: bitnami/redis-cluster:latest
    network_mode: host
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_PORT_NUMBER=6384'
      - 'REDIS_NODES=localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384,localhost:6385'

  redis-node-5:
    image: bitnami/redis-cluster:latest
    network_mode: host
    depends_on:
      - redis-node-0
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_PORT_NUMBER=6385'
      - 'REDIS_NODES=localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384,localhost:6385'
      - 'REDIS_CLUSTER_REPLICAS=1'
      - 'REDIS_CLUSTER_CREATOR=yes'

Run Redis Cluster:

docker compose up

Run main.py:

opentelemetry-instrument \
    --traces_exporter console \
    --metrics_exporter console \
    --logs_exporter console \
    --service_name test \
    python main.py

What is the expected behavior? There are "db.system" and other attributes in span.

What is the actual behavior?

{
    "name": "GET",
    "context": {
        "trace_id": "0x992cb2db5d1253c9c9491669f5329079",
        "span_id": "0x9dffc53ee2108907",
        "trace_state": "[]"
    },
    "kind": "SpanKind.CLIENT",
    "parent_id": null,
    "start_time": "2024-05-07T14:58:25.048832Z",
    "end_time": "2024-05-07T14:58:25.049004Z",
    "status": {
        "status_code": "UNSET"
    },
    "attributes": {
        "db.statement": "GET ?",
        "db.redis.args_length": 2
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.24.0",
            "service.name": "test",
            "telemetry.auto.version": "0.45b0"
        },
        "schema_url": ""
    }
}

Grey-Fox avatar May 07 '24 15:05 Grey-Fox