<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Observability on GENIE.AI</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/</link><description>Recent content in Observability on GENIE.AI</description><generator>Hugo</generator><language>en</language><atom:link href="https://genie-ai-7e342b.opensource.unicc.org/docs/observe/index.xml" rel="self" type="application/rss+xml"/><item><title>Stack Overview</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/overview/</guid><description>&lt;p&gt;The observability stack has four layers: &lt;strong&gt;instrumentation&lt;/strong&gt; (in the apps),
&lt;strong&gt;collection&lt;/strong&gt; (the OpenTelemetry Collector), &lt;strong&gt;storage&lt;/strong&gt; (the Victoria trio),
and &lt;strong&gt;presentation&lt;/strong&gt; (Grafana).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; enable the stack first — see
&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/observe/configuration/"&gt;Configuration&lt;/a&gt; for the environment variables
and the &lt;code&gt;ENABLE_OBSERVABILITY=1&lt;/code&gt; toggle. Everything below assumes observability
is already running.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Glossary.&lt;/strong&gt; OTLP = OpenTelemetry wire protocol (HTTP/protobuf). BFF =
Backend-for-Frontend, the Node.js API layer. Prometheus metrics = the standard
scrape-and-store metric format Grafana and VictoriaMetrics both speak.
fluentd = a Docker log-forwarding driver that ships container stdout/stderr to
a TCP collector.&lt;/p&gt;</description></item><item><title>Dashboards</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/dashboards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/dashboards/</guid><description>&lt;p&gt;Grafana dashboards are &lt;strong&gt;auto-provisioned&lt;/strong&gt; from
&lt;code&gt;configs/grafana/provisioning/dashboards/&lt;/code&gt;, so a deployment gets a working set
the moment the stack starts — no manual import. The Grafana file provider has
&lt;code&gt;foldersFromFilesStructure: true&lt;/code&gt;, so dashboards placed in a subdirectory land
in a folder named after that subdirectory.&lt;/p&gt;
&lt;p&gt;The 9 dashboards are grouped into &lt;strong&gt;two folders&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;General folder&lt;/strong&gt; — 5 service dashboards at the root of &lt;code&gt;dashboards/&lt;/code&gt;. (The
file provider creates no &lt;code&gt;application/&lt;/code&gt; subdirectory, so these land in the
default &lt;code&gt;General&lt;/code&gt; folder.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability folder&lt;/strong&gt; — 4 stack-health dashboards in &lt;code&gt;dashboards/observability/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="first-time-opening-grafana"&gt;First time opening Grafana&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You do this once after deploy.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Alerting</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/alerting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/alerting/</guid><description>&lt;p&gt;Alerting is auto-provisioned alongside the dashboards, so a fresh deployment
already watches the failures that matter most: &lt;strong&gt;the stack going silent, storage
filling up, the log pipeline breaking, and trace export failing&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="how-grafana-alerting-is-organised"&gt;How Grafana alerting is organised&lt;/h2&gt;
&lt;p&gt;Three layers, one job each:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alert rules&lt;/strong&gt; (&lt;code&gt;alert-rules.yml&lt;/code&gt;) — &lt;em&gt;what&lt;/em&gt; triggers an alert: a query, a
threshold, and a &lt;code&gt;for:&lt;/code&gt; window (the alert must hold true for that long
before firing — short blips don&amp;rsquo;t wake anyone up).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notification policies&lt;/strong&gt; (&lt;code&gt;notification-policies.yml&lt;/code&gt;) — &lt;em&gt;how&lt;/em&gt; alerts are
grouped, escalated, and routed between contact points. The shipped default
groups by &lt;code&gt;alertname&lt;/code&gt; + &lt;code&gt;component&lt;/code&gt; and routes everything to a single
contact point.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contact points&lt;/strong&gt; (&lt;code&gt;contact-points.yml&lt;/code&gt;) — &lt;em&gt;where&lt;/em&gt; notifications are sent
(a webhook URL, Slack, SMTP, PagerDuty). The shipped default is a single
webhook pointing at &lt;code&gt;http://localhost:9999/alerts&lt;/code&gt; — replace per environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="built-in-alert-rules"&gt;Built-in alert rules&lt;/h2&gt;
&lt;p&gt;The rules target the failure modes that would otherwise make the observability
stack &lt;em&gt;itself&lt;/em&gt; lie to you. All rules query the VictoriaMetrics datasource and
live in the &lt;code&gt;Observability&lt;/code&gt; folder.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/observe/configuration/</guid><description>&lt;p&gt;The observability stack has &lt;strong&gt;two layers&lt;/strong&gt; with different defaults. VictoriaLogs
and the OTel Collector are &lt;strong&gt;always-on&lt;/strong&gt; (no environment opt-out) — the admin
logs UI queries VictoriaLogs directly and every container ships logs via the
fluentd driver, so VL is not gated. The in-app OTel SDK is &lt;strong&gt;opt-in&lt;/strong&gt; via
&lt;code&gt;ENABLE_OBSERVABILITY=0|1&lt;/code&gt; (default &lt;code&gt;0&lt;/code&gt;). Profile-gated services (Grafana,
VictoriaMetrics, VictoriaTraces, tempo-proxy) come up with the &lt;code&gt;observability&lt;/code&gt;
profile in Compose, or &lt;code&gt;ENABLE_OBSERVABILITY=1&lt;/code&gt; in Swarm.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; an existing GENIE.AI deploy with an editable &lt;code&gt;.env&lt;/code&gt; file.
See the deployment guides for setup —
&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/deploy/docker-swarm-setup/"&gt;Docker Swarm Setup&lt;/a&gt; or
&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/deploy/docker-compose-setup/"&gt;Docker Compose Setup&lt;/a&gt;.
Also: ensure enough disk for the retention windows below (defaults are 30
days of metrics, logs, and traces).&lt;/p&gt;</description></item></channel></rss>