Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add shared spec for span type/subtype #443

Merged
merged 15 commits into from
Sep 6, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion specs/agents/tracing-instrumentation-messaging.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
320 changes: 320 additions & 0 deletions tests/agents/json-specs/span_types.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,320 @@
{
"__description": {
"<type>": "root element for type identified by '<type>'",
"<type>.__description": "description for '<type>' (optional)",
"<type>.__used_by": "list of agents that use '<type>' to help document alignment (optional)",
"<type>.allow_null_subtype": "true to allow null subtype, false by default if omitted",
"<type>.allow_unlisted_subtype": "true to allow unlisted subtypes, false by default if omitted",
"<type>.subtypes": "root element for sub-types of type '<type>', if omitted or empty subtype must be null, unless 'allow_unlisted_subtype' is set to true",
"<type>.subtypes.<subtype>": "sub-type element for <subtype>",
"<type>.subtypes.<subtype>.__description": "description of <subtype> subtype (optional)",
"<type>.subtypes.<subtype>.__used_by": "list of agents that use <subtype> 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": {
SylvainJuge marked this conversation as resolved.
Show resolved Hide resolved
"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"
]
}
}
}
}