diff options
Diffstat (limited to 'docs/guides/csv-format-flexibility.md')
| -rw-r--r-- | docs/guides/csv-format-flexibility.md | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/docs/guides/csv-format-flexibility.md b/docs/guides/csv-format-flexibility.md new file mode 100644 index 0000000..180dc28 --- /dev/null +++ b/docs/guides/csv-format-flexibility.md @@ -0,0 +1,52 @@ +# CSV Format Flexibility + +Watch mode works with **any tabular CSV**. You do not need a fixed schema; Epimetheus infers metric names and labels from column headers and value types. + +## How It Works + +- **First row:** Column headers (automatically sanitized for Prometheus label/metric names). +- **Numeric columns:** Treated as metric values. Each gets a metric name derived from the base metric name and the column header. +- **String columns:** Treated as labels. Each row’s value becomes the label value for that series. +- **Metric name:** Set with `-metric-name` (e.g. `web`, `food`, `network`). It is used as a prefix for all numeric columns. + +Column names can contain characters that are invalid in Prometheus (e.g. parentheses, spaces). They are sanitized: for example `min(potatoes)` becomes a valid metric suffix like `min_potatoes`. + +## Examples + +### Web metrics + +```csv +avg(response_time),p99(latency),endpoint,method +45.2,120.5,/api/users,GET +52.1,135.8,/api/orders,POST +``` + +With `-metric-name=web` this produces series such as: + +- `web_avg_response_time{endpoint="/api/users",method="GET"} 45.2` +- `web_p99_latency{endpoint="/api/users",method="GET"} 120.5` +- `web_avg_response_time{endpoint="/api/orders",method="POST"} 52.1` +- `web_p99_latency{endpoint="/api/orders",method="POST"} 135.8` + +### Food / business metrics + +```csv +min(potatoes),last(coke),avg(price),country,store_type +5.2,10.5,12.99,USA,grocery +3.8,8.2,9.99,Canada,convenience +``` + +With `-metric-name=food` this produces series such as: + +- `food_min_potatoes{country="USA",store_type="grocery"} 5.2` +- `food_last_coke{country="USA",store_type="grocery"} 10.5` +- `food_avg_price{country="USA",store_type="grocery"} 12.99` +- and the same metrics with `country="Canada",store_type="convenience"`. + +### Summary + +- Each **row** becomes one or more samples (one per numeric column). +- **Numeric columns** → different metrics (same labels for that row). +- **String columns** → labels shared by all those metrics for that row. + +For the standard Epimetheus CSV format (explicit metric name, labels, value, timestamp) see [Data Formats](data-formats.md). For modes and watch options see [Operating Modes](modes.md). |
