Caches Module
The SDK's caching integration is agnostic to the underlying engine used. In most cases, the SDK will instrument existing cache abstractions in certain frameworks or libraries.
Span OP | Description |
---|---|
cache.get | A single item or multiple items are retrieved from the cache |
cache.put | A single item or multiple items are written to the cache |
cache.remove | A single item or multiple items are removed from the cache |
cache.flush | The entire content of the cache is deleted |
The description of cache spans should be set to the cache key(s), sepreated by commas, e.g. posts
, or article1, article2
.
Data Key | Type | Description | Conditions |
---|---|---|---|
cache.hit | bool | cache hit or miss | required only on read-operations (cache.get ) |
cache.key | array | the key(s) involved in the operation | required only on operations that have a key |
The following data attributes are only to be set if exposed by the instrumented cache abstraction or retrievable with minimal overhead.
Data Key | Type | Description | Conditions |
---|---|---|---|
cache.item_size | int | the size of the item/items read/written/deleted in bytes | only on operations that have a key |
cache.success | bool | the operation has succeeded or failed | |
cache.ttl | int | the time to life in seconds | only on operations that have a key |
network.peer.address | string | The hostname of the cache instance | |
network.peer.port | int | the port used by the cache instance |
Once an application performs a caching operation, the SDK creates a new span based on the operation, wrapping any spans of the underlying engine as direct children.
Example
item = Cache::get('posts')
This should result in the following spans, assuming a cache hit with an underlying Redis instance being used.
<span op:"cache.get" description:"posts" cache.key:"posts" cache.hit=true>
<span op:db.redis description:"GET posts"></span>
</span>
If convenient, the SDK can optionally offer a cache_prefixes
option, that wraps existing instrumentations into a cache span. This will likely only be useful if Redis is being used as a cache.
Sentry.init({
integrations: [
Sentry.redisIntegration({
cachePrefixes: ['posts:', 'authors:'],
}),
],
})
In this example, all Redis queries involving keys that match posts:*
and authors:*
will be wrapped into cache.*
span.
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").