diff --git a/specs/agents/tracing-instrumentation-messaging.md b/specs/agents/tracing-instrumentation-messaging.md index 8a007403..a9230000 100644 --- a/specs/agents/tracing-instrumentation-messaging.md +++ b/specs/agents/tracing-instrumentation-messaging.md @@ -28,8 +28,18 @@ polling spans, where we want to capture such as well). - `transaction.type`: `messaging` - Spans: - `span.type`: `messaging` - - `span.subtype`: the name of the framework - e.g. `jms`, `kafka`, `rabbitmq` + - `span.subtype`: depends on service/provider, see table below - `span.action`: `send`, `receive` or `poll` + +| `subtype` | Description | +| ------------------- | --------------------------------- | +| `azurequeue` | Azure Queue | +| `azureservicebus` | Azure Service Bus | +| `jms` | Java Messaging Service | +| `kafka` | Apache Kafka | +| `rabbitmq` | RabbitMQ | +| `sns` | AWS Simple Notification Service | +| `sqs` | AWS Simple Queue Service | ### Naming diff --git a/tests/agents/json-specs/span_types.json b/tests/agents/json-specs/span_types.json new file mode 100644 index 00000000..e6af9031 --- /dev/null +++ b/tests/agents/json-specs/span_types.json @@ -0,0 +1,320 @@ +{ + "__description": { + "": "root element for type identified by ''", + ".__description": "description for '' (optional)", + ".__used_by": "list of agents that use '' to help document alignment (optional)", + ".allow_null_subtype": "true to allow null subtype, false by default if omitted", + ".allow_unlisted_subtype": "true to allow unlisted subtypes, false by default if omitted", + ".subtypes": "root element for sub-types of type '', if omitted or empty subtype must be null, unless 'allow_unlisted_subtype' is set to true", + ".subtypes.": "sub-type element for ", + ".subtypes..__description": "description of subtype (optional)", + ".subtypes..__used_by": "list of agents that use to help document alignment (optional)" + }, + "app": { + "__description": "Spans within application (usually not calling an external system)", + "allow_null_subtype": true, + "subtypes": { + "inferred": { + "__description": "Sampling profiler inferred spans", + "__used_by": [ + "java" + ] + }, + "controller": { + "__description": "Application controller actions", + "__used_by": [ + "ruby" + ] + }, + "graphql": { + "__description": "Incoming GraphQL requests", + "__used_by": [ + "ruby" + ] + }, + "mailer": { + "__description": "Application mailer actions", + "__used_by": [ + "ruby" + ] + }, + "resource": { + "__description": "Application resource actions", + "__used_by": [ + "ruby" + ] + } + } + }, + "custom": { + "__description": "API custom instrumentation", + "__used_by": [ + "java", + "ruby" + ], + "allow_null_subtype": true + }, + "db": { + "__description": "database span", + "subtypes": { + "cassandra": { + "__description": "Cassandra", + "__used_by": [ + "java" + ] + }, + "cosmosdb": { + "__description": "Azure CosmosDB" + }, + "db2": { + "__description": "IBM DB2", + "__used_by": [ + "java" + ] + }, + "derby": { + "__description": "Apache Derby", + "__used_by": [ + "java" + ] + }, + "dynamodb": { + "__description": "AWS DynamoDB", + "__used_by": [ + "ruby" + ] + }, + "elasticsearch": { + "__description": "Elasticsearch", + "__used_by": [ + "java", + "ruby" + ] + }, + "graphql": { + "__description": "GraphQL", + "__used_by": [ + "nodejs" + ] + }, + "h2": { + "__description": "H2", + "__used_by": [ + "java" + ] + }, + "hsqldb": { + "__description": "HSQLDB", + "__used_by": [ + "java" + ] + }, + "ingres": { + "__description": "Ingres" + }, + "mariadb": { + "__description": "MariaDB", + "__used_by": [ + "java", + "ruby" + ] + }, + "memcached": { + "__description": "Memcached", + "__used_by": [ + "nodejs" + ] + }, + "mongodb": { + "__description": "MongoDB", + "__used_by": [ + "java", + "ruby" + ] + }, + "mssql": { + "__description": "Microsoft SQL Server", + "__used_by": [ + "nodejs" + ] + }, + "mysql": { + "__description": "MySQL", + "__used_by": [ + "java", + "ruby" + ] + }, + "oracle": { + "__description": "Oracle Database", + "__used_by": [ + "java" + ] + }, + "postgresql": { + "__description": "PostgreSQL", + "__used_by": [ + "ruby" + ] + }, + "redis": { + "__description": "Redis", + "__used_by": [ + "java", + "ruby" + ] + }, + "sqlite": { + "__description": "SQLite", + "__used_by": [ + "ruby" + ] + }, + "sqlite3": { + "__description": "SQLite 3", + "__used_by": [ + "ruby" + ] + }, + "sqlserver": { + "__description": "Microsoft SQL Server", + "__used_by": [ + "java" + ] + }, + "unknown": { + "__description": "Unknown database", + "__used_by": [ + "java", + "ruby" + ] + } + } + }, + "external": { + "__description": "Request to external service, usually in request/response pattern", + "subtypes": { + "dubbo": { + "__description": "Apache Dubbo", + "__used_by": [ + "java" + ] + }, + "grpc": { + "__description": "gRPC", + "__used_by": [ + "ruby", + "java" + ] + }, + "http": { + "__description": "HTTP client", + "__used_by": [ + "ruby", + "java" + ] + } + } + }, + "json": { + "__description": "JSON parsing and generation", + "subtypes": { + "parse": { + "__description": "JSON parsing" + }, + "generate": { + "__description": "JSON generation" + } + }, + "__used_by": [ + "ruby" + ] + }, + "messaging": { + "__description": "Messaging", + "subtypes": { + "azurequeue": { + "__description": "Azure Queue" + }, + "azureservicebus": { + "__description": "Azure Service Bus" + }, + "jms": { + "__description": "Java Messaging Service", + "__used_by": [ + "java" + ] + }, + "kafka": { + "__description": "Apache Kafka", + "__used_by": [ + "java" + ] + }, + "rabbitmq": { + "__description": "RabbitMQ", + "__used_by": [ + "java" + ] + }, + "sns": { + "__description": "AWS Simple Notification Service", + "__used_by": [ + "ruby" + ] + }, + "sqs": { + "__description": "AWS Simple Queue Service", + "__used_by": [ + "ruby" + ] + } + } + }, + "process": { + "__description": "External process", + "__used_by": [ + "java" + ] + }, + "storage": { + "subtypes": { + "azureblob": { + "__description": "Azure Blob Storage" + }, + "azurefile": { + "__description": "Azure Files" + }, + "azuretable": { + "__description": "Azure Storage Table", + "__used_by": [ + "ruby" + ] + }, + "s3": { + "__description": "AWS S3", + "__used_by": [ + "ruby" + ] + } + } + }, + "template": { + "__description": "Template engines (no sub-type for now as really platform-specific)", + "__used_by": [ + "java", + "ruby" + ], + "allow_unlisted_subtype": true + }, + "websocket": { + "__description": "Websockets", + "subtypes": { + "send": { + "__used_by": [ + "nodejs" + ] + } + } + } +}