RousselTMLEARNING

Observabilité

Alerts and pipelines in OpenObserve

Create a template, a destination and an alert, avoid the SSRF webhook block and process data with real-time or scheduled pipelines.

1. Alerts #

From stream to notification.

The chain #

The chain of an alert in OpenObserve
An alert needs a destination, which itself needs a template.

Creation order matters: the template, then the destination using it, then the alert. We tested this chain with a real webhook, which received: {"alerte":"erreurs_paiement","flux":"commandes","nb":"1"}.

A='root@example.com:Complexpass#123'
curl -u "$A" -H 'Content-Type: application/json' \
  http://localhost:5080/api/default/alerts/templates \
  -d '{"name":"tpl_simple","type":"http","title":"",
       "body":"{\"alerte\":\"{alert_name}\",\"flux\":\"{stream_name}\",\"nb\":\"{alert_count}\"}"}'

curl -u "$A" -H 'Content-Type: application/json' \
  http://localhost:5080/api/default/alerts/destinations \
  -d '{"name":"webhook_tp","url":"http://echo:8080/alerte","method":"post",
       "skip_tls_verify":false,"template":"tpl_simple","headers":{},"type":"http"}'
A='root@example.com:Complexpass#123'
curl -u "$A" -H 'Content-Type: application/json' \
  http://localhost:5080/api/v2/default/alerts \
  -d '{"name":"erreurs_paiement","stream_type":"logs","stream_name":"commandes",
       "is_real_time":false,"enabled":true,"owner":"root@example.com","folder_id":"default",
       "description":"Au moins une erreur en une minute","row_template":"","context_attributes":{},
       "query_condition":{"type":"sql","conditions":null,"promql":null,"promql_condition":null,
         "aggregation":null,"vrl_function":null,"multi_time_range":null,
         "sql":"SELECT count(*) AS nb FROM commandes WHERE level='"'"'error'"'"'"},
       "trigger_condition":{"period":1,"threshold":1,"frequency":1,"cron":"","operator":">=",
         "silence":0,"frequency_type":"minutes","timezone":null,"tolerance_in_seconds":null},
       "destinations":["webhook_tp"]}'

Scheduled or real-time #

TypeEvaluationUse
ScheduledA SQL or PromQL query run at a regular intervalThresholds and aggregates: error rate, percentile
Real-timeEvaluated at ingestion, event by eventA specific event to report immediately

The local webhook pitfall #

Destination URL blocked by SSRF guard message? For security, OpenObserve refuses webhooks to a private address: neighbouring container, internal network, 127.0.0.1. Allow your targets precisely with ZO_SSRF_ALLOWED_HOSTS or ZO_SSRF_ALLOWED_CIDRS. ZO_SKIP_SSRF_CHECKS=true disables the protection: keep it for a lab.

2. Pipelines #

Processing data before storing it.

Real-time and scheduled #

A pipeline chains a source, conditions, functions and one or more destinations. It is built graphically in the UI.

TypeSourceTypical use
Real-timeA stream, at ingestionMask a field, enrich, route to another stream
ScheduledA query run periodicallyProduce a stream of aggregates, like a recording rule
Best practice: filter and mask sensitive data in a real-time pipeline, before storage. A read-time filter removes nothing from disk.

Related articles

OpenObserve: architecture and concepts

Understanding OpenObserve: Parquet storage, deployment modes, roles (router, ingester, querier, compactor, sc…

Installing OpenObserve and ingesting your first data

Install OpenObserve with Docker Compose or the binary, configure it with its ZO_* variables, send JSON and qu…

Sending logs, metrics and traces to OpenObserve

OpenObserve receiving endpoints: JSON, bulk, OTLP with the OpenTelemetry Collector, Prometheus remote write, …

Keep learning

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!