API Gateway
Note
Version: v2
Base URL:https://your.iax.fqdn.com/api/obcerv-app-api-gateway/v2
API Gateway exposes a REST API for the ITRS Analytics platform. Integrations and apps call these endpoints to query entities, metrics, analytics, and lookups.
Rate limiting Copied
All public REST endpoints on the API Gateway are subject to rate limiting. The exact limit is deployment-specific and configured by your ITRS Analytics administrators. This protects the platform when many clients or automated jobs send traffic at once.
- When you exceed the limit, the service responds with
429 Too Many Requests. Treat this as a signal to slow down and use retries with backoff, along with cap total retries, instead of tight loops. - The limit is shared for the Gateway, not allocated per API client or user. Traffic from every integration counts toward the same pool for that environment, so heavy usage by one consumer can cause others to see
429sooner. - How high the limit is (requests per second or per window) is set per deployment by your platform operators (for example, via Helm values). If you need a higher sustained throughput, discuss capacity with your ITRS Analytics administrator rather than only increasing client parallelism.
The individual endpoint sections below focus on success and validation errors (400, 404, and so on). 429 can apply to any of them when rate limits are hit.
Helm configuration for rate limiting Copied
If you deploy or upgrade the API Gateway with Helm, rate limits are not changed inside the application image. They are applied at runtime from environment variables on the pod environment. You can set these variables through the chart’s env values, which are a list of name / value pairs, typically in a values file passed to helm install or helm upgrade with -f.
Rate limit environment variables reference Copied
Use this table when you edit chart defaults or cluster-specific overrides. The same RL_* names appear in the chart env list in both cases.
| Variable pattern | Purpose |
|---|---|
RL_DEFAULT_LIMIT_FOR_PERIOD and RL_DEFAULT_LIMIT_REFRESH_PERIOD |
Affect any instance that only overrides via nested defaults in application.yml. |
RL_<RPC_NAME>_LIMIT_FOR_PERIOD and RL_<RPC_NAME>_LIMIT_REFRESH_PERIOD |
Per-RPC keys follow this pattern, where the RPC name matches the Resilience4j instance key. For example, GET_ENTITIES in the environment variable name for getEntities. |
Note
The values forlimit-refresh-periodmust be valid Spring Boot duration strings (for example,10s,1m) to match whatapplication.ymlexpects. Quote numeric limits and durations as strings in YAML (for example,value: "50"andvalue: "10s").
Edit default rate limits in the Helm chart Copied
Follow this to change the chart’s default values.yaml and publish a new chart version, so installs that use the chart without extra overrides pick up the new RL_* rate limits.
- Open
helm/src/main/resources/values.yamlin the API Gateway Helm chart module. - Under the
env:key, locate theRL_*entries after the comment# Rate limiting - default config. - Change the
valuestrings for the limits you need, using the variable names in the table above. - Commit and run your normal Helm build or release pipeline to publish the updated chart.
Overrides at install or upgrade Copied
Follow this to change rate limits for a running deployment by passing or updating a values file at helm install or helm upgrade time, without editing or republishing the chart source.
- Supply an additional
valuesfile usinghelm -f. - Alternatively, set the equivalent values in your GitOps configuration or parent chart so the rendered workload includes the desired
RL_*environment variables.
Note
envis defined as a YAML list. By default, Helm replaces lists when both the base chart and an override define the same field, rather than merging them element by element.To avoid this, you can:
- Copy the chart’s
envblock fromvalues.yamlinto your override file, update only theRL_*value fields while preserving all other required entries, and supply the file using-f.- If the API Gateway is deployed as a subchart of a larger product chart, place the same structure under the appropriate subchart values key, which is the key that maps to this chart’s root values. Refer to that product’s deployment documentation for the correct key.
Override file format (full-values style) Copied
Follow this when you author or edit a values file for helm install or helm upgrade (-f) so its layout matches the chart, your RL_* entries stay valid, and merges with other value layers stay predictable.
When you pass -f my-values.yaml, that file is typically a custom values file that mirrors the chart’s default top-level structure. It may be based on the chart’s default values.yaml, the output of helm get values -o yaml from an existing release, or a consolidated file you maintain alongside the installation.
When creating a custom values file, it is important to stay consistent with the chart’s expected values structure. For example, a typical structure contains the following keys:
| Root key | Role |
|---|---|
docker |
registry for the image pull |
env |
List of Kubernetes-style environment variables. Each variable is one list item: - name: … then value: … on the next line. This follows the same structure as in the chart’s default values.yaml.
|
image |
repository, tag |
ingress |
path |
internal |
Service mesh (mesh.resources, mesh.inbound.timeout, …) |
resources |
Pod CPU / memory requests and limits |
service |
name (Kubernetes Service name) |
| Nested Web Platform keys | Optional defaults for shared charts (often global: {} placeholders) |
Abbreviated example:
docker:
registry: your-registry.example.com
env:
- name: ANALYTICS_CACHE_ENABLED
value: "true"
- name: OBCERV_APP_APISERVICE_SERVICE_GRPC_DEADLINE_SECONDS
value: "60"
# … keep every other non-RL variable your deployment needs …
- name: RL_DEFAULT_LIMIT_FOR_PERIOD
value: "50"
- name: RL_DEFAULT_LIMIT_REFRESH_PERIOD
value: "10s"
- name: RL_GET_METRICS_LIMIT_FOR_PERIOD
value: "100"
- name: RL_GET_METRICS_LIMIT_REFRESH_PERIOD
value: "10s"
# … one LIMIT_FOR_PERIOD + one LIMIT_REFRESH_PERIOD per RPC you override …
image:
repository: your-org/obcerv-app-api-gateway
tag: "2.9.0"
ingress:
path: /obcerv-app-api-gateway/
internal:
mesh:
inbound:
timeout:
connect: 60s
resources:
limits:
cpu: "1"
memory: 2Gi
requests:
cpu: 20m
memory: 32Mi
resources:
limits:
cpu: 1500m
memory: 2Gi
requests:
cpu: 100m
memory: 256Mi
service:
name: obcerv-app-api-gateway
# Optional: nested keys for shared Web Platform charts, if your product uses them
obcerv-app-helm-charts-spring-wp:
global: {}
obcerv-app-helm-charts-common:
global: {}
Copy the complete env list from the chart defaults or from your cluster’s exported values, then change only the value fields you need. Omitting unrelated root keys is only safe if your Helm invocation still supplies the rest of the values (for example, through another -f layer or chart defaults). Otherwise, keep the same full structure your install already uses.
Note
Rebuilding the application container image is not required to change rate limits. Only the pod environment must be updated for Spring to read the newRL_*values at startup.
Analytics Copied
Get summary statistics grouped by dimensions or attributes Copied
POST /analytics/grouped-summary-statistics
Returns summary statistics grouped by dimensions or attributes over a historical period. The calculation uses a map step (one statistic per bucket per series) and a reduce step (aggregate across buckets).
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
metric |
object (TargetMetric) | body | ✓ | Namespace and name of the metric |
entityFilter |
object (EntityFilter) | body | Restrict which entities contribute to the aggregation | |
from |
string (date-time) | body | ✓ | Start of the range (inclusive) |
to |
string (date-time) | body | End of the range (exclusive); defaults to now | |
aggregations |
array (MapReduceAnalyticsFunction) | body | ✓ | Map/reduce aggregation steps to apply |
unit |
integer (enum) | body | Response unit; only series with a matching base unit are included | |
groupBy |
object (SummaryStatisticsGroupBy) | body | ✓ | Dimensions and/or attributes to group by |
Example Request Copied
{
"metric": {
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_container_cpu_limit"
},
"from": "2023-10-01T09:00:00Z",
"aggregations": [
{
"map": {
"function": "BUCKET_FUNCTION_LAST"
},
"reduce": {
"function": "BUCKET_FUNCTION_SUM"
}
}
],
"unit": "UNIT_MILLICORES",
"groupBy": {
"dimensions": [
"node",
"container"
]
}
}
Example Response Copied
{
"unit": "UNIT_MILLICORES",
"aggregations": [
{
"map": {
"function": "BUCKET_FUNCTION_LAST"
},
"reduce": {
"function": "BUCKET_FUNCTION_SUM"
}
}
],
"groups": [
{
"values": [
112521.0
],
"attributes": [
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kubernetes.io/name",
"value": "obcerv-operator"
}
],
"dimensions": [
{
"key": "pod",
"value": "obcerv-operator"
}
]
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid parameters
- 404 Not Found — Metric not found
- default — Error body may follow Status
Get seasonal model for time-series data Copied
POST /analytics/models/seasonal
Returns a seasonal model by aggregating buckets across integer multiples of the supplied periodicity. Use this to compare current behavior to a typical seasonal profile (for example hourly patterns within a week).
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
metric |
object (TargetMetric) | body | ✓ | Metric to build the model from |
entityFilter |
object (ModelEntityFilter) | body | ✓ | Exactly one entity (ordered or unordered dimensions) |
latestLookbackTs |
string (date-time) | body | ✓ | Exclusive end of the lookback window (aligned to bucket size) |
numPeriods |
integer | body | ✓ | Number of seasonal periods in the lookback |
periodicity |
integer (enum) | body | ✓ | Length of one season (must be greater than bucketSize) |
bucketSize |
integer (enum) | body | ✓ | Bucket granularity; must divide the periodicity |
aggregations |
object (StatisticalModelAggregations) | body | ✓ | Functions to compute per bucket |
timezone |
string | body | IANA timezone (for example Europe/London) for DST handling |
Example Request Copied
{
"metric": {
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_container_mem_limit_usage"
},
"entityFilter": {
"dimensions": {
"dimensions": {
"container": "dpd"
}
}
},
"latestLookbackTs": "2023-07-21T08:00:00Z",
"numPeriods": 12,
"periodicity": "INTERVAL_1_WEEK",
"bucketSize": "INTERVAL_1_HOUR",
"aggregations": {
"functions": [
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 5
},
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 95
},
{
"function": "BUCKET_FUNCTION_MIN"
},
{
"function": "BUCKET_FUNCTION_MAX"
}
]
}
}
Example Response Copied
{
"unit": "UNIT_PERCENT",
"dataPoints": [
{
"ts": "2023-07-14T00:00:00Z",
"values": [
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 5.0,
"value": 12.34
},
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 95.0,
"value": 77.66
},
{
"function": "BUCKET_FUNCTION_MIN",
"value": 8.12
},
{
"function": "BUCKET_FUNCTION_MAX",
"value": 89.45
}
],
"bucketCount": 12
},
{
"ts": "2023-07-14T01:00:00Z",
"values": [
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 5.0,
"value": 15.22
},
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 95.0,
"value": 82.11
},
{
"function": "BUCKET_FUNCTION_MIN",
"value": 9.03
},
{
"function": "BUCKET_FUNCTION_MAX",
"value": 91.2
}
],
"bucketCount": 12
},
{
"ts": "2023-07-14T02:00:00Z",
"values": [
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 5.0,
"value": 18.56
},
{
"function": "BUCKET_FUNCTION_PERCENTILE",
"percentile": 95.0,
"value": 79.33
},
{
"function": "BUCKET_FUNCTION_MIN",
"value": 10.45
},
{
"function": "BUCKET_FUNCTION_MAX",
"value": 88.9
}
],
"bucketCount": 11
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid parameters
- 404 Not Found — Metric not found
- default — Error body may follow Status
Get summary statistics for entities Copied
POST /analytics/summary-statistics
Returns summary statistics for one or more entities over a historical period using map–reduce aggregation (same family of operations as grouped statistics, without grouping).
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
metric |
object (TargetMetric) | body | ✓ | Namespace and name of the metric |
entityFilter |
object (EntityFilter) | body | Restrict which entities contribute | |
from |
string (date-time) | body | ✓ | Start of the range (inclusive) |
to |
string (date-time) | body | End of the range (exclusive); defaults to now | |
aggregations |
array (MapReduceAnalyticsFunction) | body | ✓ | Map/reduce aggregation steps |
unit |
integer (enum) | body | Response unit filter |
Example Request Copied
{
"metric": {
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_container_cpu_limit"
},
"from": "2023-10-01T09:00:00Z",
"aggregations": [
{
"map": {
"function": "BUCKET_FUNCTION_LAST"
},
"reduce": {
"function": "BUCKET_FUNCTION_SUM"
}
}
],
"unit": "UNIT_MILLICORES"
}
Example Response Copied
{
"aggregations": [
{
"aggregation": {
"map": {
"function": "BUCKET_FUNCTION_LAST"
},
"reduce": {
"function": "BUCKET_FUNCTION_SUM"
}
},
"value": 112521.0
}
],
"unit": "UNIT_MILLICORES"
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid parameters
- 404 Not Found — Metric not found
- default — Error body may follow Status
Entities Copied
Get entities Copied
POST /entities
Returns entities that match the filter, including dimensions, attributes, and available metrics for each entity.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
filter |
object (Filter) | body | Expression or dimensions filter (not both; if both are sent, expression wins). Omit to return all entities up to limit. |
|
limit |
integer (uint32) | body | Maximum entities to return; must be 1–1000 when set. Default: 100. |
Example Request Copied
{
"filter": {
"expression": "cluster='prod-k8s' AND namespace='itrs'",
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
}
],
"mode": 0
},
"limit": 100
}
Example Response Copied
{
"entities": [
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "node",
"value": "worker-1"
}
],
"attributes": [
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kubernetes.io/hostname",
"value": {
"string": "worker-1.example.com"
},
"unit": 0,
"userWritable": false,
"inheritable": false,
"inherited": false
}
],
"metrics": [
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_node_cpu_capacity",
"type": "GAUGE",
"unit": "MILLICORES"
}
]
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Get the most recent entity severities Copied
POST /entities/severity/latest
Returns the latest severity per matching entity. Only entities that have a severity value are included.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
filter |
object (Filter) | body | Expression or dimensions filter | |
limit |
integer | body | Maximum results (Default: 100, Max: 1000) |
Example Request Copied
{
"filter": {
"expression": "cluster='prod-k8s' AND namespace='itrs'"
},
"limit": 100
}
Example Response Copied
{
"severities": [
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "node",
"value": "worker-1"
}
],
"severity": "WARNING"
},
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "node",
"value": "worker-2"
}
],
"severity": "CRITICAL"
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Logs Copied
Get log data Copied
POST /logs/log-data
Returns log lines from a single log source (identified by entity dimensions, log namespace, and log name) over a time range. Optional logFilter narrows by message text, severity, trace/span IDs, or log attributes. Results are ordered by timestamp (newest first unless reverseSort is true).
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
dimensions |
array (Dimension) | body | ✓ | Entity dimensions for the log source |
namespace |
string | body | ✓ | Log source namespace (for example plugin namespace) |
name |
string | body | ✓ | Log source file name |
from |
string (date-time) | body | ✓ | Range start (inclusive), RFC3339 |
to |
string (date-time) | body | Range end (exclusive); defaults to now | |
logFilter |
object (LogFilter) | body | Message, severity, trace/span, and attribute filters | |
reverseSort |
boolean | body | If true, oldest first; default false (newest first) | |
maxResults |
integer | body | Max entries (default 1000, max 10000) |
Example Request Copied
{
"dimensions": [
{ "key": "cluster", "value": "prod-k8s" },
{ "key": "namespace", "value": "itrs" },
{ "key": "pod", "value": "app-server-1" }
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "output.log",
"from": "2026-01-01T08:00:00Z",
"to": "2026-01-01T12:00:00Z",
"logFilter": {
"messageFilters": ["Exception"],
"includedLogSeverities": ["LOG_SEVERITY_ERROR", "LOG_SEVERITY_CRITICAL"]
},
"maxResults": 100
}
Example Response Copied
{
"logData": [
{
"dimensions": [
{ "key": "cluster", "value": "prod-k8s" },
{ "key": "namespace", "value": "itrs" },
{ "key": "pod", "value": "app-server-1" }
],
"namespace": "itrsgroup.com/geneos",
"name": "/opt/itrs/gateway/gateways/*/gateway.log",
"timestamp": "2026-01-07T03:59:21.054Z",
"message": "2026-01-07 03:59:21.054+0000 Exception: Forecaster Obcerv Data Access Token not available",
"traceId": "",
"spanId": "",
"logAttributes": {
"matchKey": "Exception",
"itrsgroup.com/geneos/source_gateway": "Exchange Demo"
},
"logSeverity": "LOG_SEVERITY_CRITICAL"
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Get log sources Copied
POST /logs/log-sources
Returns log sources (files) that have entries matching the filter and time range, with counts and first/last timestamps. Results are ordered by the number of matching entries in descending order. Use the returned dimensions, namespace, and name with /logs/log-data to fetch lines.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
from |
string (date-time) | body | ✓ | Range start (inclusive), RFC3339 |
filter |
object (Filter) | body | Entity filter (expression or dimensions) | |
namespace |
string | body | Log source namespace | |
name |
string | body | Log source name | |
to |
string (date-time) | body | Range end (exclusive); defaults to now | |
logFilter |
object (LogFilter) | body | Message, trace/span, severity, attribute filters | |
maxResults |
integer | body | Max sources (default 100, max 10000) |
Example Request Copied
{
"filter": {
"expression": "application='app1'"
},
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"from": "2026-01-01T08:00:00Z",
"to": "2026-01-01T23:59:59Z",
"logFilter": {
"messageFilters": ["Exception"]
},
"maxResults": 50
}
Example Response Copied
{
"logSources": [
{
"dimensions": [
{ "key": "cluster", "value": "prod-k8s" },
{ "key": "application", "value": "app1" }
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "output.log",
"numMatchingEntries": 42,
"firstMatchEntry": "2026-01-01T08:03:11Z",
"lastMatchEntry": "2026-01-01T23:57:54Z"
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Lookup Copied
Lookup dimension, attribute, and metric names Copied
POST /lookup/names
Returns dimension, attribute, and metric names. Use filters to narrow by type, namespace, or name substring.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
type |
array of integer (enum) | body | Limit by name kind (dimension, attribute, or metric types); do not mix entity types with metric types in one request | |
namespace |
string | body | Only names in this namespace | |
namePattern |
string | body | Case-sensitive substring match on name | |
limit |
integer | body | Max results (default 100, max 1000) |
Example Request Copied
{
"type": [
"METRIC_GAUGE"
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"namePattern": "cpu",
"limit": 50
}
Example Response Copied
{
"names": [
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_node_cpu_capacity",
"types": [
4
]
},
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_node_cpu_usage",
"types": [
4
]
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Lookup dimension and attribute values Copied
POST /lookup/values
Returns distinct values for a given dimension or attribute (namespace + name), optionally filtered by substring.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
namespace |
string | body | ✓ | Namespace of the dimension or attribute |
name |
string | body | ✓ | Dimension or attribute name |
valuePattern |
string | body | Case-sensitive substring filter on values | |
limit |
integer | body | Max results (default 100, max 1000) |
Example Request Copied
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kubernetes.io/hostname",
"valuePattern": "worker",
"limit": 50
}
Example Response Copied
{
"values": [
{
"string": "derek-api1-node-1"
},
{
"string": "derek-api1-node-2"
},
{
"string": "derek-api1-control-1"
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Metrics Copied
Get bucketed metric time series Copied
POST /metrics
Returns time-series points for a metric over a range, aggregated into buckets. Required fields: namespace, name, and from.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
namespace |
string | body | ✓ | Metric namespace |
name |
string | body | ✓ | Metric name |
filter |
object (Filter) | body | Entity filter | |
groupBy |
array of string | body | Dimension keys to aggregate across entities | |
from |
string (date-time) | body | ✓ | Range start (inclusive) |
to |
string (date-time) | body | Range end (exclusive); defaults to now | |
bucketSize |
integer (enum) | body | Time bucket size (omit for platform default) | |
bucketFunction |
integer (enum) | body | Aggregation inside each bucket (default last) | |
percentile |
number | body | Required when bucketFunction is percentile |
|
metricType |
integer (enum) | body | Gauge or counter filter |
Example Request Copied
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_cpu_usage",
"filter": {
"expression": "cluster='prod-k8s' AND namespace='itrs'"
},
"from": "2024-10-15T10:00:00Z",
"to": "2024-10-15T12:00:00Z",
"bucketSize": "BUCKET_SIZE_FIVE_MINUTE",
"bucketFunction": "BUCKET_FUNCTION_AVG",
"metricType": "GAUGE"
}
bucketSize, bucketFunction, and metricType are integer enum values in the API (for example bucket size 6 for five-minute buckets and bucket function 1 for average, as in the schema examples).
Example Response Copied
{
"metrics": [
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
},
{
"key": "pod",
"value": "app-server-1"
}
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_cpu_usage",
"metricType": "GAUGE",
"unit": "MILLICORES",
"timestamp": "2024-10-15T10:00:00Z",
"value": 0.45
},
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
},
{
"key": "pod",
"value": "app-server-2"
}
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_cpu_usage",
"metricType": "GAUGE",
"unit": "MILLICORES",
"timestamp": "2024-10-15T10:05:00Z",
"value": 0.52
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Get the most recent metrics Copied
POST /metrics/latest
Returns the latest sample per entity for a metric (or metrics matching the filter). Optimized for live views.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
namespace |
string | body | With name, selects a single metric |
|
name |
string | body | With namespace, selects a single metric |
|
filter |
object (Filter) | body | Entity filter; combined with namespace/name when both are set | |
limit |
integer | body | Max results (default 100, max 10000) |
Example Request Copied
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_cpu_usage",
"filter": {
"expression": "cluster='prod-k8s' AND namespace='itrs'"
},
"limit": 100
}
Example Response Copied
{
"metrics": [
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
},
{
"key": "pod",
"value": "app-server-1"
}
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_cpu_usage",
"metricType": "GAUGE",
"unit": "MILLICORES",
"timestamp": "2024-10-15T14:32:15Z",
"value": 0.45
},
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
},
{
"key": "pod",
"value": "app-server-2"
}
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_cpu_usage",
"metricType": "GAUGE",
"unit": "MILLICORES",
"timestamp": "2024-10-15T14:32:18Z",
"value": 0.62
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Get the latest status metrics Copied
POST /status-metrics/latest
Returns the most recent status string per entity for a status metric within a time window. Required: namespace, name, and from.
Parameters Copied
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
namespace |
string | body | ✓ | Status metric namespace |
name |
string | body | ✓ | Status metric name |
filter |
object (Filter) | body | Entity filter | |
from |
string (date-time) | body | ✓ | Window start (inclusive) for the latest status search |
to |
string (date-time) | body | Window end (exclusive); defaults to now |
Example Request Copied
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_status",
"filter": {
"expression": "cluster='prod-k8s' AND namespace='itrs'"
},
"from": "2024-10-15T10:00:00Z",
"to": "2024-10-15T11:00:00Z"
}
Example Response Copied
{
"statusMetrics": [
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
},
{
"key": "pod",
"value": "app-server-1"
}
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_status",
"timestamp": "2024-10-15T10:28:45Z",
"value": "Running"
},
{
"dimensions": [
{
"key": "cluster",
"value": "prod-k8s"
},
{
"key": "namespace",
"value": "itrs"
},
{
"key": "pod",
"value": "app-server-2"
}
],
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_pod_status",
"timestamp": "2024-10-15T10:29:12Z",
"value": "CrashLoopBackOff"
}
]
}
Response Codes Copied
- 200 OK — Success
- 400 Bad Request — Invalid request
- default — Error body may follow Status
Schemas Copied
The following request and response models are defined by the API (listed in alphabetical order).
AggregationResult Copied
The aggregated value and the aggregation it corresponds to
| Field | Type | Required | Description |
|---|---|---|---|
aggregation |
MapReduceAnalyticsFunction | ||
value |
number (double) | The aggregated value |
Any Copied
Wrapper for a protobuf Any value plus optional YAML. Used inside NamedAny for structured expression payloads.
| Field | Type | Required | Description |
|---|---|---|---|
value |
GoogleProtobufAny | Typed Any payload |
|
yaml |
string | Optional YAML representation |
Dimension Copied
A key-value pair representing a hierarchical identifier for entities. Dimensions form the unique identity of an entity and are ordered from highest to lowest in the hierarchy (e.g., cluster > namespace > pod > container).
| Field | Type | Required | Description |
|---|---|---|---|
key |
string | ✓ | The dimension key/name. Common dimension keys include ‘cluster’, ’namespace’, ’node’, ‘pod’, ‘container’, ‘service’, etc. The set of dimension keys defines the entity hierarchy in the system. |
value |
string | ✓ | The dimension value for this key. Together with the key, this forms part of the entity’s unique identifier. For example, key=‘cluster’, value=‘prod-k8s’. |
Entity Copied
A monitored entity in the observability platform. Entities are uniquely identified by their dimensions, contain metadata in attributes, and have associated metrics for monitoring.
| Field | Type | Required | Description |
|---|---|---|---|
attributes |
array of EntityAttribute | Metadata attributes attached to this entity. Attributes can be static (like architecture, OS type) or dynamic (like severity status). They may be user-editable, inheritable by child entities, or inherited from parent entities. Each attribute has a namespace, name, typed value, and unit. | |
dimensions |
array of Dimension | Hierarchical dimensions that uniquely identify this entity. Dimensions are ordered from highest to lowest in the hierarchy (e.g., [cluster, namespace, pod, container]). The combination of all dimension key-value pairs forms the entity’s unique identifier. | |
metrics |
array of EntityMetric | List of metrics available for this entity. This indicates which measurements can be queried using the metrics endpoints. Each metric has a namespace, name, type (counter/gauge/histogram/status), and unit. Actual metric values must be retrieved using the /metrics or /metrics/latest endpoints. |
EntityArtifactFilter Copied
Restricts EntityFilter to entities that have specific artifacts (for example named configuration or deployment objects).
| Field | Type | Required | Description |
|---|---|---|---|
names |
array of NamespacedName | Artifact names to match (each entry needs namespace and name) | |
namesOperator |
integer (enum) | AND (default): all names must match; OR: at least one must match |
|
types |
array of integer | Artifact types to match |
EntityAttribute Copied
A metadata attribute associated with an entity. Attributes provide descriptive information about entities, such as configuration details, labels, tags, and dynamic properties.
| Field | Type | Required | Description |
|---|---|---|---|
inheritable |
boolean | When true, child entities in the hierarchy automatically inherit this attribute’s value unless they explicitly override it. Useful for cascading configuration like environment tags or policies. | |
inherited |
boolean | When true, this attribute’s value was inherited from a parent entity in the hierarchy rather than being directly set on this entity. Helps distinguish between explicit and inherited properties. | |
name |
string | The attribute name, unique within its namespace. Common examples include ‘kubernetes.io/hostname’, ‘kubernetes.io/arch’, ‘severity’, ‘first_observed’. | |
namespace |
string | The namespace that logically groups this attribute. Namespaces help organize attributes from different sources (e.g., ‘itrsgroup.com/c2/kubernetes-plugin’, ‘kubernetes.io’). | |
unit |
integer (enum) | Unit of measure for numeric attribute values. Set to UNIT_UNSPECIFIED (0) for non-numeric attributes. For numeric attributes, specifies units like BYTES, MILLICORES, PERCENT, etc. | |
userWritable |
boolean | Indicates whether users can modify this attribute’s value through the API or UI. System-managed attributes (like first_observed, auto-detected properties) are typically not user-writable. | |
value |
Value | The attribute’s value in its native type (string, long, double, boolean, timestamp, or stringList). May be omitted if the attribute exists but has no value assigned. The value type is determined by the attribute definition in the system. |
EntityFilter Copied
An entity filter expressed as either an expression or an exact dimension filter.
| Field | Type | Required | Description |
|---|---|---|---|
artifactFilter |
EntityArtifactFilter | Optionally include only entities having specific artifact(s). This can be specified alone or in tandem with the entity_filter. |
|
dimensions |
UnorderedDimensionsFilter | Exact match on an entity’s entire set of dimensions, irrespective of the order of dimensions. This can match multiple entities, i.e. those with same dimensions but different hierarchy. | |
expression |
Expression | Filter by one or more entities matching an expression. | |
orderedDimensions |
OrderedDimensionsFilter | Exact match on an entity’s entire set of dimensions, taking the order of dimensions into account. This can match at most one entity. |
EntityMetric Copied
Metadata about a metric available for this entity. This describes what can be measured, but does not contain actual metric values. Use the /metrics or /metrics/latest endpoints to retrieve actual time-series data or latest values.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | The metric name, unique within its namespace. Examples include ‘kube_node_cpu_capacity’, ‘kube_node_mem_usage’, ‘kube_pod_status’. | |
namespace |
string | The namespace that groups this metric. Indicates the source or plugin that provides the metric (e.g., ‘itrsgroup.com/c2/kubernetes-plugin’ for Kubernetes monitoring metrics). | |
type |
integer (enum) | The type of metric: COUNTER (monotonically increasing, like total requests), GAUGE (can increase or decrease, like memory usage), HISTOGRAM (distribution of values), or STATUS (health/state information). Metric type affects how the data should be interpreted and aggregated. | |
unit |
integer (enum) | The unit of measurement for this metric’s values. Common units include MILLICORES (111) for CPU, BYTES (1) for memory, PERCENT (100) for utilization, etc. This metadata helps with proper formatting and unit conversion in visualizations. |
Expression Copied
Protobuf-compatible expression tree used inside EntityFilter. The published OpenAPI mirrors the internal message shape; for typical HTTP JSON usage, prefer the string expression field on Filter for entity queries.
| Field | Type | Required | Description |
|---|---|---|---|
additionalProperties |
array of NamedAny | Ordered name/value pairs for expression operands (protobuf JSON mapping) |
Filter Copied
Filter for querying entities. Supports two filtering modes:
-
Expression filter: Use a query language for complex filtering (e.g., “node=‘worker-1’ AND namespace=‘production’”)
-
Dimensions filter: Match entities by dimension key-value pairs with a specified mode:
- ANY: Matches entities containing these dimensions (may have additional dimensions)
- EXACT: Exact match - entities must have exactly these dimensions, no more, no less
Note
Use either expression OR dimensions, not both. Expression provides more flexibility, while dimensions offer simpler matching.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | List of dimension key-value pairs to match. The matching behavior depends on the mode: ANY mode matches entities containing these dimensions (partial match), EXACT mode requires entities to have exactly these dimensions. Ignored if expression is set. | |
expression |
string | Query expression using the entity query language. Supports complex logic with AND, OR, NOT, parentheses, and comparison operators (=, !=, <, >, <=, >=). Example: “cluster=‘prod’ AND (namespace=‘default’ OR namespace=‘kube-system’)”. If set, dimensions filter is ignored. | |
mode |
integer (enum) | Matching mode for dimension-based filtering. ANY (0) allows partial matches (entity may have additional dimensions), EXACT (1) requires exact match (entity must have exactly these dimensions). Only applies when using dimensions filter. |
GetEntitiesRequest Copied
Query entities from the observability platform based on filtering criteria. Entities represent monitored infrastructure components such as:
-
Kubernetes nodes, pods, containers, and services
-
Virtual machines and hosts
-
Applications and processes
-
Network devices and interfaces
Each entity has dimensions (hierarchical identifiers), attributes (metadata properties), and metrics (available measurements). Filtering can be done using:
-
Expression filter — Query language for complex filtering (e.g., “node=‘worker-1’ AND namespace=‘production’”)
-
Dimensions filter — Simple key-value pair matching with ANY or EXACT mode
Note
Use either expression OR dimensions in the filter, not both. Expression provides more flexibility with logical operators (AND, OR, NOT), while dimensions offer simpler exact or partial matching.
It is recommended to use specific filters to reduce result size and improve response times.
| Field | Type | Required | Description |
|---|---|---|---|
filter |
Filter | Filter criteria to narrow down entity results. If omitted, returns all entities (up to the limit). The filter supports two mutually exclusive modes:
|
|
limit |
integer (uint32) | Maximum number of entities to return. Must be between 1 and 1000. Defaults to 100 if not specified. Use pagination by making multiple requests with refined filters if you need to retrieve more than 1000 entities. |
GetEntitiesResponse Copied
List of entities matching the request filter. Each entity includes its complete hierarchy of dimensions, all attributes with their current values, and the list of available metrics.
| Field | Type | Required | Description |
|---|---|---|---|
entities |
array of Entity | Array of entities matching the filter criteria. Each entity includes dimensions (hierarchical identifiers), attributes (metadata with values and properties), and metrics (available measurements). Maximum of 1000 entities returned per request. |
GetEntitySeveritiesRequest Copied
Query the latest severity values for entities matching the specified filter criteria. Severity represents the current health or alert state of an entity, indicating how critical its condition is.
Severity values follow the SignalSeverity enumeration:
-
NONE(1) — No severity associated, typically used to clear a pre-existing signal -
WARNING(2) — Issue that may require attention -
CRITICAL(3) — Severe issue requiring immediate action -
OK(4) — Entity is healthy, no issues detected
Filtering can be done using:
-
Expression filter — Query language for complex filtering (e.g., “node=‘worker-1’ AND namespace=‘production’”)
-
Dimensions filter — Simple key-value pair matching with ANY or EXACT mode
Note
Only entities that have a severity value will be returned. The endpoint automatically applies a ‘severity EXISTS’ filter to exclude entities without severity data.
It is recommended to use specific filters to reduce result size and improve response times.
| Field | Type | Required | Description |
|---|---|---|---|
filter |
Filter | Filter criteria to narrow down entity results. If omitted, returns severities for all entities that have severity data (up to the limit). The filter supports two mutually exclusive modes:
|
|
limit |
integer (uint32) | Maximum number of entity severities to return. Must be between 1 and 1000. Defaults to 100 if not specified. This limit is constrained by the underlying platform’s getEntities endpoint. |
GetEntitySeveritiesResponse Copied
List of entity severities matching the request filter. Each result includes the entity’s dimensions for identification and its current severity value.
| Field | Type | Required | Description |
|---|---|---|---|
severities |
array of GetEntitySeveritiesResponse_Severity | Array of entity severities matching the filter criteria. Each entry contains the entity’s identifying dimensions and its current severity value. Maximum of 1000 results returned per request. |
GetEntitySeveritiesResponse_Severity Copied
An entity’s severity information, combining the entity’s identifying dimensions with its current severity level.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | Hierarchical dimensions that uniquely identify the entity. Dimensions are ordered from highest to lowest in the hierarchy (e.g., [cluster, namespace, pod, container]). Use these dimensions to correlate severity data with other entity information. | |
severity |
integer (enum) | The entity’s current severity level. Values are: NONE (1), WARNING (2), CRITICAL (3), OK (4).
|
GetGroupedSummaryStatisticsRequest Copied
Returns grouped summary statistics based on the supplied parameters:
metric— The namespace and name of the metric.entityFilter— Defines a set of ordered/unordered dimensions that can only match up to one entity or an expression. If an expression is provided and it matches more than one entity then the metric values of all these entities will be indiscriminately contribute to the summary statistics.from/to— The historical period the summary statistics will be based on.aggregations— One or more statistical aggregations to return.groupBy— The dimensions or attributes to group the summary statistics by.
| Field | Type | Required | Description |
|---|---|---|---|
aggregations |
array of MapReduceAnalyticsFunction | ✓ | A list of unique aggregations to return |
entityFilter |
EntityFilter | ||
from |
string (date-time) | ✓ | Starting inclusive timestamp. Must be a time in the past. |
groupBy |
SummaryStatisticsGroupBy | ✓ | |
metric |
TargetMetric | ✓ | |
to |
string (date-time) | Ending exclusive timestamp. Defaults to the current time if not supplied. | |
unit |
integer (enum) | The unit to return the response in. Only series whose values share a common base unit are included in the aggregation. If UNIT_NONE is specified, only series without a unit are included. |
GetGroupedSummaryStatisticsResponse Copied
A list of grouped aggregated values based on the supplied parameters
| Field | Type | Required | Description |
|---|---|---|---|
aggregations |
array of MapReduceAnalyticsFunction | The requested aggregations. The values array in each group will be in the same order as the aggregations | |
groups |
array of SummaryStatisticsGroup | The the grouped summary statistics | |
unit |
integer (enum) | The unit the aggregations are returned in. |
GetLogDataRequest Copied
Request to retrieve log data from a single log source, over the specified time range and filtering criteria.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | ✓ | Dimensions that identify the entity for the log source |
from |
string (date-time) | ✓ | Range start (inclusive), RFC3339 |
logFilter |
LogFilter | Optional filters on message, severity, trace/span, attributes | |
maxResults |
integer (int32) | Max log entries (default 1000, max 10000) | |
name |
string | ✓ | Log source name |
namespace |
string | ✓ | Log source namespace |
reverseSort |
boolean | If true, ascending by timestamp; default false (newest first) | |
to |
string (date-time) | Range end (exclusive); defaults to now |
GetLogDataResponse Copied
Response containing log data entries from a single log source.
| Field | Type | Required | Description |
|---|---|---|---|
logData |
array of LogData | Log entries ordered by timestamp |
GetLogSourcesRequest Copied
Request to retrieve log sources that match filtering criteria over a time range.
| Field | Type | Required | Description |
|---|---|---|---|
filter |
Filter | Entity filter | |
from |
string (date-time) | ✓ | Range start (inclusive), RFC3339 |
logFilter |
LogFilter | Optional log line filters | |
maxResults |
integer (int32) | Max sources (default 100, max 10000) | |
name |
string | Log source name | |
namespace |
string | Log source namespace | |
to |
string (date-time) | Range end (exclusive); defaults to now |
GetLogSourcesResponse Copied
Response containing log sources. Each entry is one log source with summary stats for the matching window.
| Field | Type | Required | Description |
|---|---|---|---|
logSources |
array of LogSource | Matching log sources |
GetMetricsLatestRequest Copied
Request to retrieve the most recent metrics given the filtering criteria. This endpoint is optimized for real-time monitoring scenarios where only the current value is needed, not historical time-series data.
Filtering options — at least one of the following must be provided:
namespaceandname— Retrieve a specific metric for all entities that have it- filter — Restrict results to specific entities using expression or dimension-based filtering
If both are specified, they are combined (AND logic) to return the specific metric for matching entities only.
Use the limit parameter to control the maximum number of results returned (default: 100, max: 10,000).
| Field | Type | Required | Description |
|---|---|---|---|
filter |
Filter | ||
limit |
integer (uint32) | Maximum number of metrics to return. Defaults to 100 if not specified. Maximum allowed value is 10,000 to prevent exceeding message size limits. | |
name |
string | The metric name to query. If specified, namespace must also be specified. If omitted along with namespace, all metrics for matching entities are returned. Use the LookupNames endpoint to discover available metrics. | |
namespace |
string | The namespace that the metric belongs to. If specified, name must also be specified. Namespaces provide logical grouping of metrics by data source or plugin. For example, Kubernetes metrics use ‘itrsgroup.com/c2/kubernetes-plugin’. |
GetMetricsLatestResponse Copied
Response containing the most recent metrics given the filtering criteria. Each metric represents the latest measurement for a specific entity, including entity identification, metric metadata, and the current value.
| Field | Type | Required | Description |
|---|---|---|---|
metrics |
array of Metric | Array of the most recent metrics. Each entry represents the latest measurement for a specific entity. When multiple entities match the filtering criteria, the array contains one entry per entity. Results are not guaranteed to be in any specific order. |
GetMetricsRequest Copied
Request to retrieve time-series metric data aggregated into time buckets. This is the primary request for querying historical metric measurements for visualization, analysis, and monitoring.
Required parameters — namespace, name, from
Optional parameters — filter, group_by, to (defaults to now), bucket_size (defaults to platform behavior if omitted), bucket_function (defaults to LAST), percentile (when bucket_function is PERCENTILE), metric_type.
Time range — Specify the historical period using from and to timestamps. For raw (un-bucketed) data using BUCKET_SIZE_NONE, the maximum time range is 30 minutes. For bucketed data, larger time ranges are supported depending on the bucket size.
Filtering — Use the filter parameter to restrict results to specific entities. Supports both expression-based filtering (e.g., “cluster=‘prod’ AND namespace=‘default’”) and dimension-based filtering.
Grouping — Use group_by to aggregate metrics across multiple entities by specific dimensions, producing a single time-series per unique dimension value combination.
Metric type — Use the optional metric_type parameter to specify whether to retrieve GAUGE or COUNTER metrics. If not specified, both GAUGE and COUNTER metrics are retrieved.
| Field | Type | Required | Description |
|---|---|---|---|
bucketFunction |
integer (enum) | (Optional) The aggregation function to apply within each time bucket. Defaults to LAST if omitted. Determines how multiple data points within a bucket are combined. Common values:
|
|
bucketSize |
integer (enum) | (Optional) The size of time buckets for aggregating metric data. Determines the granularity of returned data points. If omitted, the platform uses default bucketing. Common values:
|
|
filter |
Filter | ||
from |
string (date-time) | ✓ | Start of the time range for the query (inclusive). Must be in RFC3339 format. For raw metrics (bucket_size=NONE), the time range (to - from) cannot exceed 30 minutes. For bucketed metrics, larger ranges are supported. |
groupBy |
array of string | List of dimension keys to group by. When specified, metrics from multiple entities are aggregated together based on common dimension values, producing one time-series per unique combination of the specified dimensions. For example, group_by=[‘cluster’, ’namespace’] aggregates all pods within each namespace. If omitted, returns separate time-series for each individual entity. |
|
metricType |
integer (enum) | The type of metric.
|
|
name |
string | ✓ | The metric name to query. Use the LookupNames endpoint to discover available metrics. Common examples include ‘kube_pod_cpu_usage’, ‘kube_node_memory_usage’, ‘http_request_duration_seconds’, etc. |
namespace |
string | ✓ | The namespace that the metric belongs to. Namespaces provide logical grouping of metrics by data source or plugin. For example, Kubernetes metrics use ‘itrsgroup.com/c2/kubernetes-plugin’. |
percentile |
number (double) | The percentile value to compute, required when bucket_function is PERCENTILE (4). Must be in the exclusive range (0, 100). Common values
|
|
to |
string (date-time) | End of the time range for the query (exclusive). Must be in RFC3339 format. If omitted, defaults to the current time (“now”). The ’to’ timestamp should be greater than ‘from’. |
GetMetricsResponse Copied
Response containing time-series metric data. Returns an array of metric data points, where each point represents a single measurement at a specific time for a specific entity. Data points are organized by entity (identified by dimensions) and ordered by timestamp within each entity’s time-series.
| Field | Type | Required | Description |
|---|---|---|---|
metrics |
array of Metric | Array of metric data points. Each data point represents a single measurement at a specific time for a specific entity. When multiple entities match the filter, the array contains data points for all matching entities. Data points are typically ordered by entity, then by timestamp within each entity. |
GetSeasonalModelRequest Copied
Generates a seasonal model based on the supplied parameters:
-
metric— The namespace, name, and type (optional) of the metric to base the model on -
entityFilter— Targets the entity that the model is going to be based on -
latestLookbackTs— An exclusive timestamp of the latest lookback data to include in the model -
periodicity: The model’s periodicity. Defines the length of the seasonal period of the historical data. Buckets within each season will be merged with buckets 1..N number of seasons apart where N is the supplied number of periods. -
bucketSize— The length of the buckets the model will return. It must be a factor of theperiodicity -
numPeriods— The number of seasonal periods to include in the model’s evaluation. A high number may reduce the impact of outliers. When setting this consider whether the data during this time has been consistent with what is considered ’normal’. If the data within the look-back period contain irregularities then consider increasing the number of seasonal periods. Note that setting this to a very high number may have a severe impact on performance, particularly if the bucket size is small. -
aggregations— One or more statistical aggregations to return for each bucket
| Field | Type | Required | Description |
|---|---|---|---|
aggregations |
StatisticalModelAggregations | ✓ | |
bucketSize |
integer (enum) | ✓ | The model’s bucket size. Must be smaller than the periodicity. |
entityFilter |
ModelEntityFilter | ✓ | |
latestLookbackTs |
string (date-time) | ✓ | An exclusive timestamp of the most recent data to include as part of the model’s lookback window. The timestamp will be adjusted such that it is aligned with the supplied bucket size. The source data window is calculated as |
metric |
TargetMetric | ✓ | |
numPeriods |
integer (uint32) | ✓ | The number of seasonal periods to include in the model’s lookback window. The duration of a seasonal period is set by the When setting this, consider whether the data during this time has been consistent with what is considered ’normal’. If the data within the look-back period contain irregularities then consider increasing the number of seasonal periods.
|
periodicity |
integer (enum) | ✓ | The model’s periodicity. Must be greater than the bucket_size. |
timezone |
string | Timezone in the format of Europe/London, America/New_York, etc. |
GetSeasonalModelResponse Copied
A seasonal model as a time series of aggregated buckets. Each model data point contains a timestamp, the number of buckets that were aggregated together, the total number of metric values, and the requested aggregations.
| Field | Type | Required | Description |
|---|---|---|---|
dataPoints |
array of SeasonalModelDataPoint | The seasonal model time-series of aggregated data points. | |
unit |
integer (enum) | The normalized metric unit for the aggregation values. |
GetStatusMetricsLatestRequest Copied
Request to retrieve the most recent status metric values for entities. Status metrics represent discrete state or condition values (such as ‘OK’, ‘WARNING’, ‘ERROR’, ‘Running’, ‘Stopped’) that indicate the health, operational state, or alert level of monitored entities.
Key characteristics:
- Returns only the latest or most recent status value for each matching entity
- No time-series data or historical values - just the current state
Required parameters — namespace, name, from
Optional parameters — filter, to (defaults to now).
The endpoint returns the most recent status value within this window for each entity.
| Field | Type | Required | Description |
|---|---|---|---|
filter |
Filter | ||
from |
string (date-time) | ✓ | Start of the time window for finding the latest status (inclusive). The endpoint will search for the most recent status value after this timestamp. Must be in RFC3339 format. The time range (to - from) should typically be kept small (e.g., last few minutes) for latest status queries, with a maximum of 30 minutes. |
name |
string | ✓ | The status metric name to query. Status metrics typically represent health states, operational conditions, or alert levels. Use the LookupNames endpoint with type=METRIC_STATUS (6) to discover available status metrics. Common examples include ‘kube_pod_status’, ‘kube_node_condition’, ‘service_health_status’, etc. |
namespace |
string | ✓ | The namespace that the status metric belongs to. Namespaces provide logical grouping of metrics by data source or plugin. For example, Kubernetes status metrics use ‘itrsgroup.com/c2/kubernetes-plugin’. |
to |
string (date-time) | End of the time window for finding the latest status (exclusive). Must be in RFC3339 format. If omitted, defaults to the current time (’now’). The endpoint returns the most recent status value that occurred between ‘from’ and ’to’ for each entity. |
GetStatusMetricsLatestResponse Copied
Response containing the latest status metric values for matching entities. Returns one status value per entity, representing the most recent state within the specified time window. Each result includes the entity identification, status metric metadata, timestamp of the status, and the status value itself.
| Field | Type | Required | Description |
|---|---|---|---|
statusMetrics |
array of StatusMetrics | Array of status metric values, one per entity. Each entry represents the latest (most recent) status for a specific entity within the requested time window. Entities are uniquely identified by their dimensions. If an entity has no status update within the time window, it will not appear in the results. |
GetSummaryStatisticsRequest Copied
Returns summary statistics based on the supplied parameters:
metric— The namespace and name of the metricentityFilter— Defines a set of ordered/unordered dimensions that can only match up to one entity or an expression. If an expression is provided and it matches more than one entity then the metric values of all these entities will be indiscriminately contribute to the summary statisticsfrom/to— The historical period the summary statistics will be based onaggregations— One or more statistical aggregations to return
| Field | Type | Required | Description |
|---|---|---|---|
aggregations |
array of MapReduceAnalyticsFunction | ✓ | A list of unique aggregations to return |
entityFilter |
EntityFilter | ||
from |
string (date-time) | ✓ | Starting inclusive timestamp. Must be a time in the past. |
metric |
TargetMetric | ✓ | |
to |
string (date-time) | Ending exclusive timestamp. Defaults to the current time if not supplied. | |
unit |
integer (enum) | The unit to return the response in. Only series whose values share a common base unit are included in the aggregation. If UNIT_NONE is specified, only series without a unit are included. |
GetSummaryStatisticsResponse Copied
A list of aggregated values based on the supplied parameters
| Field | Type | Required | Description |
|---|---|---|---|
aggregations |
array of AggregationResult | The requested aggregations. | |
unit |
integer (enum) | The unit the aggregations are returned in. |
GoogleProtobufAny Copied
Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
| Field | Type | Required | Description |
|---|---|---|---|
@type |
string | The type of the serialized message. |
LogAttributeFilterExpression Copied
Defines a filter on log entry logAttributes so only entries whose attributes match are returned. If both keyFilter and valueFilter are set on a term, both must match.
| Field | Type | Required | Description |
|---|---|---|---|
attributeFilterTerms |
array of LogAttributeFilterExpression_LogAttributeFilterTerm | Terms combined with AND; at least one if this object is present |
LogAttributeFilterExpression_LogAttributeFilterTerm Copied
One attribute key/value match term for log attribute maps.
| Field | Type | Required | Description |
|---|---|---|---|
keyFilter |
string | Match keys against this string (with keyMatchType) |
|
keyMatchType |
integer (enum) | Match type for keyFilter; default EXACT when keyFilter is set |
|
valueFilter |
string | Match values against this string (with valueMatchType) |
|
valueMatchType |
integer (enum) | Match type for valueFilter; default EXACT when valueFilter is set |
LogData Copied
A single log row from a log source for a specific entity.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | Entity dimensions | |
logAttributes |
object (string values) | Arbitrary key/value attributes on the log line (not entity attributes) | |
logSeverity |
integer (enum) | Parsed severity; NONE if unknown |
|
message |
string | Log message text | |
name |
string | Log source name | |
namespace |
string | Log source namespace | |
spanId |
string | Span id when correlated to tracing | |
timestamp |
string (date-time) | Entry timestamp, RFC3339 | |
traceId |
string | Trace id when correlated to tracing |
LogFilter Copied
Optional filters applied to log queries. messageFilters entries are ORed together.
| Field | Type | Required | Description |
|---|---|---|---|
attributeFilter |
LogAttributeFilterExpression | Filter on logAttributes |
|
includedLogSeverities |
array of integer (enum) | Allowed severities | |
messageFilters |
array of string | Substrings searched in the message (OR) | |
spanId |
string | Exact span id filter | |
traceId |
string | Exact trace id filter |
LogSource Copied
One log source identified by dimensions, namespace, and name, with match statistics for the query window.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | Entity dimensions | |
firstMatchEntry |
string (date-time) | Timestamp of first matching line in the window | |
lastMatchEntry |
string (date-time) | Timestamp of last matching line in the window | |
name |
string | Log source name | |
namespace |
string | Log source namespace | |
numMatchingEntries |
integer (int32) | Count of matching lines in the window |
LookupNamesRequest Copied
Discover available dimension, attribute, and metric names in the system. This endpoint enables discovery of what can be queried and is particularly useful for building dynamic UIs, discovering available metrics for monitoring, and implementing auto-completion features.
Supports filtering by:
-
type— Filter by specific types. Multiple types can be combined:- DIMENSION (1) — Entity hierarchical identifiers
- ATTRIBUTE (2) — Entity metadata properties
- METRIC_COUNTER (3) — Monotonically increasing metrics
- METRIC_GAUGE (4) — Metrics that can increase or decrease
- METRIC_HISTOGRAM (5) — Distribution metrics
- METRIC_STATUS (6) — Status/health metrics
-
namespace— Restrict results to a specific namespace (e.g., ‘itrsgroup.com/c2/kubernetes-plugin’) -
namePattern— Search for names containing a specific pattern (case-sensitive substring match) -
limit— Maximum number of results to return (default: 100, max: 1000)
Important
You can request either entity types (dimensions/attributes) OR metric types (counter/gauge/histogram/status), but not both in the same request.
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer (uint32) | Maximum number of results to return. Must be between 1 and 1000. Defaults to 100 if not specified. | |
namePattern |
string | Search pattern for name matching. Uses case-sensitive substring matching. For example, “cpu” will match “kube_node_cpu_capacity”, “cpu_usage”, etc. If omitted, returns all names. | |
namespace |
string | Filter results to a specific namespace. If omitted, searches across all namespaces. | |
type |
array of integer | Filter results by type. Multiple types can be specified. If omitted, returns all types.
|
LookupNamesResponse Copied
List of matching names with their namespace, name, and applicable types.
| Field | Type | Required | Description |
|---|---|---|---|
names |
array of Name | Array of matching names. Each name includes its namespace, name, and applicable types. Maximum of 1000 results returned per request. |
LookupValuesRequest Copied
Retrieve all possible values for a specific dimension or attribute. This endpoint returns the complete set of unique values that exist across all entities in the system.
Use cases:
-
Building dynamic filter dropdowns showing actual available values (e.g., all cluster names, all namespaces, all node hostnames)
-
Discovering what entities exist by dimension value (e.g., “what clusters do we have?”)
-
Validating user input against known values
-
Implementing auto-completion features in search interfaces
-
Exploring the entity hierarchy (e.g., which namespaces exist in a cluster)
Required parameters — The namespace and name parameters are required to identify which specific dimension or attribute to query. Use the LookupNames endpoint first to discover available dimensions and attributes if needed.
Optional filtering — Results can be filtered using valuePattern for case-sensitive substring matching, useful for large value sets or search-as-you-type functionality.
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer (uint32) | Maximum number of results to return. Must be between 1 and 1000. Defaults to 100 if not specified. | |
name |
string | ✓ | The name of the dimension or attribute to lookup values for. Combined with namespace, this uniquely identifies what to query. Use the LookupNames endpoint to discover available names. |
namespace |
string | ✓ | The namespace of the dimension or attribute to lookup values for. This identifies which logical grouping the name belongs to. |
valuePattern |
string | Optional filter pattern for values. Uses case-sensitive substring matching. For example, “prod” will match “prod-cluster”, “production”, “prod-us-east”, etc. If omitted, returns all values. |
LookupValuesResponse Copied
List of unique values for the specified dimension or attribute. Values are returned in their native type (string, number, boolean, timestamp, or string list).
| Field | Type | Required | Description |
|---|---|---|---|
values |
array of Value | Array of unique values. Each value is returned in its native type (string, long, double, boolean, timestamp, or stringList). The value type depends on how the dimension or attribute is defined in the system. Maximum of 1000 results returned per request. |
MapReduceAnalyticsFunction Copied
Extracts statistics from each time series in the result set based on the map function and reduces it to a single scalar value by applying the reduce function over the values extracted by the map phase. BUCKET_FUNCTION_RATE is not supported in the map phase. BUCKET_FUNCTION_RATE, BUCKET_FUNCTION_FIRST, BUCKET_FUNCTION_LAST are not supported in the reduce phase.
| Field | Type | Required | Description |
|---|---|---|---|
map |
StatisticalAggregationFunction | ||
reduce |
StatisticalAggregationFunction | ✓ |
{
"map": {
"function": "BUCKET_FUNCTION_LAST"
},
"reduce": {
"function": "BUCKET_FUNCTION_SUM"
}
}
Metric Copied
A single metric data point representing a measurement at a specific time for a specific entity. Includes the entity identification (dimensions), metric metadata (namespace, name, type, unit), timestamp, and the measured value.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | The hierarchical dimensions that uniquely identify the entity this metric belongs to. Dimensions are ordered from highest to lowest in the hierarchy (e.g., cluster → namespace → pod → container). Together, these dimensions form the unique identity of the monitored entity. | |
metricType |
integer (enum) | The type of metric. Indicates the semantic meaning and expected behavior:
|
|
name |
string | The metric name. This identifies what is being measured (e.g., ‘kube_pod_cpu_usage’, ‘kube_node_memory_bytes’, ‘http_request_duration_seconds’). | |
namespace |
string | The namespace that the metric belongs to. Indicates the source or plugin that provides this metric. For example, ‘itrsgroup.com/c2/kubernetes-plugin’ for Kubernetes metrics. | |
timestamp |
string (date-time) | The timestamp for this data point in RFC3339 format. For bucketed data, this represents the start of the time bucket. For raw data, this is the exact time the measurement was taken. | |
unit |
integer (enum) | The unit of measurement for the metric value. Common units include:
|
|
value |
number (double) | The measured or aggregated metric value. For bucketed data, this is the result of applying the bucket function (e.g., average, max, sum) to all data points within the bucket. The interpretation depends on the metric type and unit. For example, 0.45 with unit MILLICORES means 0.45 CPU cores (450 millicores). |
ModelDataPointValue Copied
A single aggregated value
| Field | Type | Required | Description |
|---|---|---|---|
function |
integer (enum) | The aggregation function (e.g. BUCKET_FUNCTION_PERCENTILE, BUCKET_FUNCTION_MIN). | |
percentile |
number (double) | The percentile that is being calculated. Set only if BucketFunction is BUCKET_FUNCTION_PERCENTILE |
|
value |
number (double) | The aggregated value |
ModelEntityFilter Copied
Targets a single entity for seasonal modelling. Supply exactly one of the following:
| Variant | Field | Type | Description |
|---|---|---|---|
| Ordered dimensions | orderedDimensions |
OrderedDimensionsFilter | Match dimension list in order (at most one entity) |
| Unordered dimensions | dimensions |
UnorderedDimensionsFilter | Match a set of dimension key/value pairs (order ignored) |
Name Copied
A named entity or metric with its namespace, name, and applicable types.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | The name identifier, unique within its namespace. | |
namespace |
string | The namespace that the name belongs to. Namespaces provide logical grouping of related names. For example, Kubernetes plugin names use ‘itrsgroup.com/c2/kubernetes-plugin’. | |
types |
array of integer | The types that apply to this name. A name can have multiple types. For example, a metric might be available as both COUNTER and GAUGE depending on collection method. |
NamedAny Copied
Automatically-generated message used to represent maps of Any as ordered (name,value) pairs.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Map key | |
value |
Any | Mapped value |
NamespacedName Copied
Qualified name within a namespace (used for attributes, metrics, and artifact references).
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Non-blank, up to 64 characters | |
namespace |
string | Up to 128 characters |
OrderedDimensionsFilter Copied
A filter that exactly matches entity dimension keys and values, taking the order of dimensions into account.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | ✓ | Dimensions (required). Cannot be empty. |
SeasonalModelDataPoint Copied
Each seasonal model data point consists of a timestamp and set of one or more aggregated values as supplied in the request. Additionally, the response contains two counts that can aid evaluating the reliability of the data point. These are:
bucketCount— The number of historical buckets that were combined to generate the model data point. For example, if the look-back period is 12 weeks and the periodicity is 1 week then for each model data point the maximum number of buckets that can be combined is 12. If the count is very low it indicates gap in the data during the look-back window. If the count is 0, then no data was found and the model data point should be ignored.
| Field | Type | Required | Description |
|---|---|---|---|
bucketCount |
integer (uint32) | The number of buckets across the look-back period that contributed to the model data point. | |
ts |
string (date-time) | The timestamp for this model data point. | |
values |
array of ModelDataPointValue | A list of one or more aggregated values |
StatisticalAggregationFunction Copied
The aggregation function to apply on the metric datapoints. If the aggregation function is BUCKET_FUNCTION_PERCENTILE then the percentile must be set to a value in the exclusive range (0, 100).
| Field | Type | Required | Description |
|---|---|---|---|
function |
integer (enum) | ✓ | The aggregation function (e.g. BUCKET_FUNCTION_AVG, BUCKET_FUNCTION_PERCENTILE). |
percentile |
number (double) | The percentile. Required if the function is BUCKET_FUNCTION_PERCENTILE. Must be set to a value in the exclusive range (0, 100). |
StatisticalModelAggregations Copied
Specifies one or more statistical aggregations to calculate and return for each bucket
| Field | Type | Required | Description |
|---|---|---|---|
functions |
array of StatisticalAggregationFunction | One or more statistical aggregation functions to calculate for each bucket. |
Status Copied
The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the API Design Guide.
| Field | Type | Required | Description |
|---|---|---|---|
code |
integer (int32) | The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. | |
details |
array of GoogleProtobufAny | A list of messages that carry the error details. There is a common set of message types for APIs to use. | |
message |
string | A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. |
StatusMetrics Copied
A single status metric value representing the latest state of a specific entity. Status values are categorical strings (not numbers) that indicate health, operational state, or alert level. Common status values include ‘Running’, ‘Pending’, ‘Failed’, ‘OK’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’, ‘Unknown’, etc.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
array of Dimension | The hierarchical dimensions that uniquely identify the entity this status belongs to. Dimensions are ordered from highest to lowest in the hierarchy (e.g., cluster → namespace → pod → container). Together, these dimensions form the unique identity of the monitored entity. | |
name |
string | The status metric name. This identifies what state or condition is being reported. Common examples include ‘kube_pod_status’ (e.g., Running, Pending, Failed), ‘kube_node_condition’ (e.g., Ready, NotReady), ‘service_health_status’ (e.g., OK, WARNING, ERROR), ‘alert_severity’ (e.g., Critical, Warning, Info). | |
namespace |
string | The namespace that the status metric belongs to. Indicates the source or plugin that provides this status metric. For example, ‘itrsgroup.com/c2/kubernetes-plugin’ for Kubernetes status metrics. | |
timestamp |
string (date-time) | The timestamp when this status value was observed or last updated, in RFC3339 format. This represents when the entity entered or was confirmed to be in this state. For ’latest’ queries, this is the most recent timestamp within the requested time window. | |
value |
string | The status value as a categorical string. The specific values depend on the status metric type. Examples:
|
StringList Copied
A list of string values, used for multi-valued attributes.
| Field | Type | Required | Description |
|---|---|---|---|
values |
array of string | Array of string values. |
SummaryStatisticsGroup Copied
| Field | Type | Required | Description |
|---|---|---|---|
attributes |
array of SummaryStatisticsGroup_GroupByAttributeValue | The attributes that the summary statistics were grouped by | |
dimensions |
array of Dimension | The dimensions that the summary statistics were grouped by | |
values |
array of number | The aggregated values. The order of the values corresponds to the order of the aggregations in the request |
SummaryStatisticsGroupBy Copied
The dimensions or attributes to group the summary statistics by
| Field | Type | Required | Description |
|---|---|---|---|
attributes |
array of SummaryStatisticsGroupBy_GroupByAttribute | The attributes to group the summary statistics by | |
dimensions |
array of string | The dimensions to group the summary statistics by |
SummaryStatisticsGroupBy_GroupByAttribute Copied
The attribute to group by
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ | The name of the attribute to group by |
namespace |
string | ✓ | The namespace of the attribute to group by |
SummaryStatisticsGroup_GroupByAttributeValue Copied
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | The name of the attribute the aggregations were grouped by | |
namespace |
string | The namespace of the attribute the aggregations were grouped by | |
value |
string | The value of the attribute the aggregations were grouped by |
TargetMetric Copied
Identifies a metric by namespace and name (and optionally type for seasonal models).
| Field | Type | Required | Description |
|---|---|---|---|
metricType |
integer (enum) | The metric type | |
name |
string | ✓ | The metric name |
namespace |
string | ✓ | The metric namespace |
{
"namespace": "itrsgroup.com/c2/kubernetes-plugin",
"name": "kube_container_cpu_limit"
}
UnorderedDimensionsFilter Copied
A filter that exactly matches entity dimension keys and values, irrespective of the order of dimensions.
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
object | ✓ | Dimensions (required). Cannot be empty. |
Value Copied
A polymorphic value that can hold different types. The actual type is indicated by which field is set in the oneof. The displayValue provides a human-readable representation useful for UI display.
| Field | Type | Required | Description |
|---|---|---|---|
boolean |
boolean | Boolean value (true/false). Used for flags and binary attributes. | |
displayValue |
string | Human-readable representation of the value, useful for display purposes in UIs. May include formatted timestamps, unit conversions, or other presentation enhancements. | |
double |
number (double) | Floating-point number. Used for measurements, percentages, and decimal values. | |
long |
string | 64-bit integer value. Used for counts, IDs, and large numeric values.
|
|
string |
string | Text string value. The most common value type for names, labels, and descriptive attributes. | |
stringList |
StringList | ||
timestamp |
string (date-time) | Timestamp value in RFC3339 format. Used for time-based attributes like first_observed, last_updated, etc. |
Units enumeration Copied
Numeric unit fields in the API use the platform unit enumeration (for example millicores, bytes, percent). The full set matches the protobuf Unit enum used by the analytics platform. Prefer the lookup and metrics responses for the unit applicable to each series.