Skip to main content

Generated at build time from charts/racora-smo/README.md (helm-docs: values.yaml + README.md.gotmpl); edit the source, not this page.

racora-smo

The SMO functions Racora ships, in the racora-smo namespace. Today that is one: the O1 collector, the receiver of what the elements' O1 adapters send north. It is the smallest useful SMO-side piece: fault notifications and performance data become rows an operator can query and chart, with no orchestration (the controller stays the only thing that deploys and changes the network) and nothing from a full SMO stack.

What this installs​

ComponentImageRole
O1 collectoro1-collector (global.components.o1Collector)Accepts VES 7.x events on /eventListener/v7 (and /eventBatch) and the O1 adapters' PM stream on /pm/stream; stores them in the monitoring ClickHouse, database o1: events (every event, verbatim), alarms (the 3GPP FaultSupervision notifications, typed) with the view current_alarms, and pm (one row per metric sample). /status reports what it accepted, stored and dropped.

The collector is ready as soon as it listens: the adapters do not retry a failed delivery, so it accepts first and inserts when the store answers, from a bounded in-memory queue.

Identity​

The adapters send one fixed identity in the event body today; the element name Racora wants on every row is the VES basic-auth username the controller gives each adapter (collector.ves.auth: identity). An element name in the body wins once the upstream identity flags land. A PM envelope's element is the ?element= query parameter, else its nfInstanceId.

Requires​

  • racora-base (the racora-smo namespace)
  • racora-monitoring's ClickHouse, for the rows to land (without it the collector accepts and drops after collector.buffer.maxRows)

Install​

helm install racora-smo ./charts/racora-smo

Values​

KeyTypeDefaultDescription
namespacestring"racora-smo"Namespace the SMO functions deploy into. Must already exist (racora-base creates it).
collector.enabledbooltrueRender the O1 collector.
collector.image.pullPolicystring"IfNotPresent"Image pull policy — IfNotPresent, because the images ship with the distribution. The image itself is the umbrella's global.components.o1Collector.
collector.portint8080The port the collector listens on: /eventListener/v7 (VES), /pm/stream (the PM stream), /status.
collector.resourcesobject{"limits":{"cpu":"500m","memory":"512Mi"},"requests":{"cpu":"50m","memory":"128Mi"}}Pod resources for the collector.
collector.store.clickhouseUrlstring"http://clickhouse.monitoring.svc.cluster.local:8123"The ClickHouse HTTP endpoint the rows go to (the monitoring chart's ClickHouse).
collector.store.databasestring"o1"The database the collector creates and writes (tables events, alarms, pm; view current_alarms).
collector.store.userstring"default"ClickHouse user; no password — the store is in-cluster only.
collector.store.ttl.eventsstring"1 DAY"Retention of o1.events (every VES event, verbatim), a ClickHouse INTERVAL.
collector.store.ttl.alarmsstring"30 DAY"Retention of o1.alarms (the fault notifications, typed).
collector.store.ttl.pmstring"7 DAY"Retention of o1.pm (the PM stream, one row per metric sample).
collector.buffer.maxRowsint100000Rows kept in memory while the store is unreachable; beyond this the oldest are dropped and counted (/status).
collector.buffer.flushSecondsint2Seconds between batch inserts.
collector.pm.ignorePrefixeslist["cells.ue_list."]PM metric name prefixes the collector drops (the per-UE rows carry no key the dashboards can use).
collector.ves.authstring"identity"How the VES basic-auth header is treated: identity records the username as the element's name and does not check the password; verify also requires the password in secretName (key password); off ignores the header.
collector.ves.secretNamestring""Secret in this namespace holding the VES password (key password) when auth is verify.
nodeSelectorobject{}Node selector for the SMO workloads.
tolerationslist[]Tolerations for the SMO workloads.
affinityobject{}Affinity rules for the SMO workloads.

Verify​

kubectl -n racora-smo rollout status deploy/o1-collector
kubectl -n racora-smo exec deploy/o1-collector -- python -c \
"import urllib.request; print(urllib.request.urlopen('http://127.0.0.1:8080/status').read().decode())"
# {"accepted": {"ves": N, "pm": M}, ..., "store": {"ok": true, ...}}
kubectl -n monitoring exec deploy/clickhouse -- clickhouse-client -q \
"SELECT element, alarm_id, alarm_name, perceived_severity FROM o1.current_alarms"