Skip to content
This repository has been archived by the owner on Aug 14, 2024. It is now read-only.

Commit

Permalink
Cache Integration (#1223)
Browse files Browse the repository at this point in the history
  • Loading branch information
cleptric authored Apr 23, 2024
1 parent 9497a6a commit e9c676a
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/components/sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,9 @@ export default () => {
<SidebarLink to="/sdk/performance/opentelemetry/">
OpenTelemetry Support
</SidebarLink>
<SidebarLink to="/sdk/performance/modules/">
Modules
</SidebarLink>
</SidebarLink>
<SidebarLink to="/sdk/research/performance">
Research: Performance Monitoring API
Expand Down
71 changes: 71 additions & 0 deletions src/docs/sdk/performance/modules/cache.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
title: Cache
sidebar_order: 20
---

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 conventions

### Span Operations

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

### Span Data

| 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 | has the command succeeded |
| `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 |

Additionally, the `span.status` can be used to signal if the operation was successful (`success`) or failed (`error`).

## Instrumentation

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>
```

### SDK Options

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: [
new Sentry.Integrations.Redis({
cachePrefixes: ['posts:', 'authors:'],
}),
],
})
```

In this example, all Redis queries involving keys that match `posts:*` and `authors:*` will be wrapped into `cache.*` span.
7 changes: 7 additions & 0 deletions src/docs/sdk/performance/modules/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: 'Performance Modules'
---

The list below contains SDK documentation for our various Performance Modules.

- [Cache Module](/sdk/performance/modules/cache/)

0 comments on commit e9c676a

Please sign in to comment.