

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1234567# OpenTelemetry Metrics Guidelines89When creating or editing OTEL metrics (counters, histograms, gauges), always ensure metric attributes have **low cardinality**.1011## What is Cardinality?1213Cardinality refers to the number of unique values an attribute can have. Each unique combination of attribute values creates a new time series, which consumes memory and storage in your metrics backend.1415## Rules1617### DO use low-cardinality attributes:18- **Enums**: `environment_type` (PRODUCTION, STAGING, DEVELOPMENT, PREVIEW)19- **Booleans**: `hasFailures`, `streaming`, `success`20- **Bounded error codes**: A finite, controlled set of error types21- **Shard IDs**: When sharding is bounded (e.g., 0-15)2223### DO NOT use high-cardinality attributes:24- **UUIDs/IDs**: `envId`, `userId`, `runId`, `projectId`, `organizationId`25- **Unbounded integers**: `itemCount`, `batchSize`, `retryCount`26- **Timestamps**: `createdAt`, `startTime`27- **Free-form strings**: `errorMessage`, `taskName`, `queueName`2829## Example3031```typescript32// BAD - High cardinality33this.counter.add(1, {34 envId: options.environmentId, // UUID - unbounded35 itemCount: options.runCount, // Integer - unbounded36});3738// GOOD - Low cardinality39this.counter.add(1, {40 environment_type: options.environmentType, // Enum - 4 values41 streaming: true, // Boolean - 2 values42});43```4445## Prometheus Metric Naming4647When metrics are exported via OTLP to Prometheus, the exporter automatically adds unit suffixes to metric names:4849| OTel Metric Name | Unit | Prometheus Name |50|------------------|------|-----------------|51| `my_duration_ms` | `ms` | `my_duration_ms_milliseconds` |52| `my_counter` | counter | `my_counter_total` |53| `items_inserted` | counter | `items_inserted_inserts_total` |54| `batch_size` | histogram | `batch_size_items_bucket` |5556Keep this in mind when writing Grafana dashboards or Prometheus queries—the metric names in Prometheus will differ from the names defined in code.5758## Reference5960See the schedule engine (`internal-packages/schedule-engine/src/engine/index.ts`) for a good example of low-cardinality metric attributes.6162High cardinality metrics can cause:63- Memory bloat in metrics backends (Axiom, Prometheus, etc.)64- Slow queries and dashboard timeouts65- Increased costs (many backends charge per time series)66- Potential data loss or crashes at scale67
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| winsenlabs/platos.cursor/rules/executing-commands.mdc · 22 | Cursor rules | test | 49/100 | 9 days ago | |
| winsenlabs/platos.cursor/rules/webapp.mdc · 22 | Cursor rules | setuptestsecurity | 55/100 | 9 days ago | |
| winsenlabs/platos.cursor/rules/writing-tasks.mdc · 22 | Cursor rules | setupbuildarchtypes+5 | 64/100 | 9 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| bybren-llc/safe-agentic-workflow.cursor/rules/10-backend-python.mdc · 399 | Cursor rules | testlint-formatstylegit+4 | 97/100 | today |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/winsenlabs-platos-cursor-rules-otel-metrics)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.