mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-21 18:11:27 -07:00
update skills
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
# Observability Patterns
|
||||
|
||||
## Usage-Based Billing
|
||||
|
||||
```typescript
|
||||
env.ANALYTICS.writeDataPoint({
|
||||
blobs: [customerId, request.url, request.method],
|
||||
doubles: [1], // request_count
|
||||
indexes: [customerId]
|
||||
});
|
||||
```
|
||||
|
||||
```sql
|
||||
SELECT blob1 AS customer_id, SUM(_sample_interval * double1) AS total_calls
|
||||
FROM api_usage WHERE timestamp >= DATE_TRUNC('month', NOW())
|
||||
GROUP BY customer_id
|
||||
```
|
||||
|
||||
## Performance Monitoring
|
||||
|
||||
```typescript
|
||||
const start = Date.now();
|
||||
const response = await fetch(url);
|
||||
env.ANALYTICS.writeDataPoint({
|
||||
blobs: [url, response.status.toString()],
|
||||
doubles: [Date.now() - start, response.status]
|
||||
});
|
||||
```
|
||||
|
||||
```sql
|
||||
SELECT blob1 AS url, AVG(double1) AS avg_ms, percentile(double1, 0.95) AS p95_ms
|
||||
FROM fetch_metrics WHERE timestamp >= NOW() - INTERVAL '1' HOUR
|
||||
GROUP BY url
|
||||
```
|
||||
|
||||
## Error Tracking
|
||||
|
||||
```typescript
|
||||
env.ANALYTICS.writeDataPoint({
|
||||
blobs: [error.name, request.url, request.method],
|
||||
doubles: [1],
|
||||
indexes: [error.name]
|
||||
});
|
||||
```
|
||||
|
||||
## Multi-Tenant Tracking
|
||||
|
||||
```typescript
|
||||
env.ANALYTICS.writeDataPoint({
|
||||
indexes: [tenantId], // efficient filtering
|
||||
blobs: [tenantId, url.pathname, method, status],
|
||||
doubles: [1, duration, bytesSize]
|
||||
});
|
||||
```
|
||||
|
||||
## Tail Worker Log Filtering
|
||||
|
||||
```typescript
|
||||
export default {
|
||||
async tail(events, env, ctx) {
|
||||
const critical = events.filter(e =>
|
||||
e.exceptions.length > 0 || e.event.wallTime > 1000000
|
||||
);
|
||||
if (critical.length === 0) return;
|
||||
|
||||
ctx.waitUntil(
|
||||
fetch('https://logging.example.com/ingest', {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': `Bearer ${env.API_KEY}` },
|
||||
body: JSON.stringify(critical.map(e => ({
|
||||
outcome: e.event.outcome,
|
||||
cpu_ms: e.event.cpuTime / 1000,
|
||||
errors: e.exceptions
|
||||
})))
|
||||
})
|
||||
);
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## OpenTelemetry Export
|
||||
|
||||
```typescript
|
||||
export default {
|
||||
async tail(events, env, ctx) {
|
||||
const otelSpans = events.map(e => ({
|
||||
traceId: generateId(32),
|
||||
spanId: generateId(16),
|
||||
name: e.scriptName || 'worker.request',
|
||||
attributes: [
|
||||
{ key: 'worker.outcome', value: { stringValue: e.event.outcome } },
|
||||
{ key: 'worker.cpu_time_us', value: { intValue: String(e.event.cpuTime) } }
|
||||
]
|
||||
}));
|
||||
|
||||
ctx.waitUntil(
|
||||
fetch('https://api.honeycomb.io/v1/traces', {
|
||||
method: 'POST',
|
||||
headers: { 'X-Honeycomb-Team': env.HONEYCOMB_KEY },
|
||||
body: JSON.stringify({ resourceSpans: [{ scopeSpans: [{ spans: otelSpans }] }] })
|
||||
})
|
||||
);
|
||||
}
|
||||
};
|
||||
```
|
||||
Reference in New Issue
Block a user