All resources at a glance
Metoro’s CRDs live under two API groups:observability.metoro.io/v1alpha1 for resources that manage observability configuration, and rbac.metoro.io/v1alpha1 for access control.
How Kubernetes-managed resources behave
The same model applies to every resource on this page:- Kubernetes is the source of truth. Resources synced from Kubernetes appear in the Metoro UI with a Managed via K8s badge and are read-only there. To change or remove one, edit or delete the custom resource.
- Changes sync automatically. Metoro detects creates,
specupdates, and deletions for every resource in a monitored cluster. Most changes appear in about 30 seconds; allow up to one minute for the exporter and sync workflow to process a change. The exception is the hub-onlyMetoroGroup, which follows its own reconciliation schedule; see Metoro Resource Sync Timing. - CRDs are installed by the Metoro charts. The Metoro exporter chart installs every CRD except
MetoroGroupon each monitored cluster, so they are available on both Metoro cloud and on-prem. TheMetoroGroupCRD is installed by the on-prem hub chart only, so group creation stays centralized in the hub cluster. - Synced resources get deterministic locations. Alerts, dashboards, and webhooks land under
/alerts|/dashboards|/webhooks/kubernetes-managed/<cluster>/<namespace>/, and dashboards and webhooks get the IDkubernetes-managed.<cluster>.<namespace>.<name>.
Alerts and dashboards can alternatively be managed through labelled
ConfigMaps; see ConfigMap-managed
dashboards and alert
examples. ConfigMaps reconcile hourly
rather than in near real time and don’t get Kubernetes API validation; the
custom resources on this page are the recommended path.
Listing Metoro resources with kubectl
Every Metoro CRD is in themetoro category, so one command lists all Metoro objects in a cluster:
metoro-observability category covers the observability.metoro.io kinds and metoro-rbac covers the rbac.metoro.io kinds. Short names work as usual, e.g. kubectl get malerts -n payments or kubectl get mcingrules.
Observability resources
MetoroAlert
Declares a Metoro timeseries alert. Thespec.timeseries body mirrors the alert API’s timeseries configuration: a MetoroQL query plus evaluation rules, with optional notification actions (slack, pagerDuty, email, webhook).
spec.displayNamedefaults tometadata.name;spec.descriptionandspec.aiInvestigateOnFire(start an AI investigation when the alert fires) are optional.- You don’t have to write these by hand: export any existing alert from the alert page via Export → Metoro CRD Format, then
kubectl apply -n <namespace>it. See exporting existing alerts.
MetoroDashboard
Declares a Metoro dashboard.spec.content is the dashboard’s root widget group, in the same shape as the dashboard API.
spec.titledefaults tometadata.name;spec.settingsis optional. Do not set a dashboard ID or folder: Metoro derives them from the cluster, namespace, and resource name.- Export any existing dashboard as a ready-to-apply manifest from its settings via Export → YAML (MetoroDashboard CRD).
MetoroWebhook
Declares a webhook integration that alerts and AI SRE notifications can use as a destination. The URL and body support template variables.- Only
spec.urlis required.spec.displayNamedefaults tometadata.name,spec.methoddefaults toPOST, andspec.headers/spec.bodyare optional (an empty body sends Metoro’s default JSON payload). spec.headersFromandspec.bodyFromreference Kubernetes Secrets in the webhook’s own namespace, resolved only at delivery time so credentials never enter the manifest or Metoro’s resource history. Requires the exporter’ssecretRefsopt-in andmetoro-exporterchart 0.477.0 or later.- The synced integration gets the deterministic ID
kubernetes-managed.<cluster>.<namespace>.<name>, which is how alert manifests reference it inwebhookDestination.uuid. - Export any existing webhook as a manifest with the download icon on the integrations page.
MetoroClusterIngestionRule
Excludes matching logs and trace spans before they leave the cluster where the rule is applied. Rules are exclude-only and per-cluster; expressions within a rule are ANDed, separate rules are ORed.signalsislogs,traces, or both;actionmust beExclude. Omittingmatchdrops everything for the rule’s signals in that cluster.- Supported operators are
In(exact value) andRegexIn(unanchored RE2). Note thatservice.namevalues are stored in the canonical/k8s/<namespace>/<service>form. - Synced rules appear in Settings → Data Ingestion Settings with a Managed badge.
- Requires
metoro-exporterchart version 0.476.0 or later (Metoro cloud), ormetoro-exporter-onpremchart version 11.0.0 or later; older charts do not install this CRD.
Access control resources
Metoro’s RBAC model can be declared as Kubernetes resources: groups plus telemetry and resource rules. A rule is a Role and RoleBinding in one object: it creates a managed Metoro role and binds it to the groups inspec.groups. Grants are allow-only and additive.
MetoroGroup
Declares a Metoro group. The group name ismetadata.name; the optional spec.oidcMappings list automatically adds users to the group when their OIDC groups claim matches.
On-prem only: apply
MetoroGroup to the hub cluster. The CRD is
intentionally not installed in monitored clusters. On Metoro cloud, create
groups in Settings → Users & Groups → Groups instead.MetoroNamespaceTelemetryRule
Grants groups access to telemetry from the rule’s own namespace. Signals arelogs, metrics, traces, profiles, and kubernetesResources; an optional match narrows the grant by telemetry attributes.
MetoroClusterTelemetryRule
The cluster-scoped variant: same spec asMetoroNamespaceTelemetryRule, but the grant spans the whole cluster rather than one namespace.
MetoroNamespaceResourceRule
Grants groups verbs (create, read, update, delete) on Kubernetes-managed alerts, dashboards, and webhooks declared in the rule’s own namespace. Resource rules never grant access to resources created in the UI.
MetoroClusterResourceRule
The cluster-scoped variant: same spec asMetoroNamespaceResourceRule, covering Kubernetes-managed resources across the whole cluster. An optional rules[].path narrows the grant to a subfolder.
