La corrección está integrada en el TP (Ver los recuadros verdes)
Lo que vas a aprender en este TP
- Ajustar retención e índices
- Escribir una función VRL
- Recibir una alerta
Introducción #
Lo que vas a aprender en esta sección
- Ajustar retención e índices
- Escribir una función VRL
- Recibir una alerta
Contexto. Tu maqueta debe ser explotable: conservar los logs 30 días, optimizar las búsquedas y avisar al equipo en cuanto falle un pago.
Requisitos: la primera práctica · Duración estimada: 45 min
Una cadena de alerta completa.Puesta en marcha #
Pasos guiados, con su corrección.
1. Preparar la pila
¿Por qué? El receptor es un contenedor vecino, es decir, una dirección privada: sin esta opción, OpenObserve rechaza el destino. No lo reproduzcas en producción.
Añade un contenedorechoy la opciónZO_SKIP_SSRF_CHECKS, y vuelve a ingerir los eventos de la primera práctica.Ver la corrección
services: openobserve: image: public.ecr.aws/zinclabs/openobserve:latest ports: - "5080:5080" environment: ZO_DATA_DIR: /data ZO_ROOT_USER_EMAIL: root@example.com ZO_ROOT_USER_PASSWORD: Complexpass#123 ZO_SKIP_SSRF_CHECKS: "true" volumes: - o2-data:/data echo: image: mendhak/http-https-echo:latest volumes: o2-data:curl -u 'root@example.com:Complexpass#123' \ -H 'Content-Type: application/json' \ http://localhost:5080/api/default/commandes/_json \ -d '[ {"level":"error","service":"paiement","message":"timeout vers la banque","duree_ms":3100}, {"level":"info","service":"paiement","message":"ok","duree_ms":120}, {"level":"info","service":"panier","message":"ok","duree_ms":40} ]' # {"code":200,"status":[{"name":"commandes","successful":3,"failed":0}]}2. Ajustar el flujo
¿Por qué? Estos ajustes deciden el coste y la velocidad.
Fija 30 días de retención, texto completo enmessage, un índice enservicey una partición enlevel.Ver la corrección
curl -u 'root@example.com:Complexpass#123' -X PUT \ -H 'Content-Type: application/json' \ 'http://localhost:5080/api/default/streams/commandes/settings?type=logs' \ -d '{ "data_retention": 30, "full_text_search_keys": {"add": ["message"]}, "index_fields": {"add": ["service"]}, "partition_keys": {"add": [{"field": "level", "types": "value"}]} }'3. Escribir una función
¿Por qué? VRL transforma los eventos sin tocar la aplicación.
Crea la funciónmarque_grave, ábrela en el menú Functions y pruébala con un evento.Ver la corrección
curl -u 'root@example.com:Complexpass#123' \ -H 'Content-Type: application/json' \ http://localhost:5080/api/default/functions \ -d '{"name":"marque_grave","function":".grave = true\n.","params":"row","transType":0}' # {"code":200,"message":"Function saved successfully"}4. Crear la cadena de alerta
¿Por qué? La alerta necesita el destino, que necesita la plantilla: el orden importa.
Crea la plantilla, el destino y después la alerta.Ver la corrección
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"]}'5. Disparar la alerta
¿Por qué? Una alerta que nunca se ha disparado no está probada.
Envía errores y lee los registros del contenedorecho. Cuenta con uno o dos minutos.Ver la corrección
for i in 1 2 3; do curl -s -u 'root@example.com:Complexpass#123' -H 'Content-Type: application/json' \ http://localhost:5080/api/default/commandes/_json \ -d '[{"level":"error","service":"paiement","message":"erreur de test"}]' sleep 30 done docker compose logs echo | grep -i alerte
Nivel de dificultad : ●●●○○ (3/5)
Mi seguimiento
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión
Artículos recomendados
Explorer ses données dans OpenObserve : SQL, PromQL et VRL
Chercher en SQL, interroger les métriques en PromQL, optimiser un flux (index, partitions, rétent...
Alertes et pipelines dans OpenObserve
Créer un modèle, une destination et une alerte, éviter le blocage SSRF des webhooks et traiter le...
Transformer avec VRL et tester ses pipelines Vector
Le langage VRL (Vector Remap Language) : analyse de logs (JSON, regex, syslog), gestion des erreu...
Vector : les transforms en détail (remap et VRL, route, filter, réduction et métriques)
Transformer les événements dans Vector : remap et le langage VRL (analyse, enrichissement, gestio...
OpenObserve : architecture et concepts
Comprendre OpenObserve : stockage Parquet, modes de déploiement, rôles (router, ingester, querier...
Envoyer ses logs, métriques et traces vers OpenObserve
Les points de réception d'OpenObserve : JSON, bulk, OTLP avec le Collector OpenTelemetry, Prometh...
Alertes, connecteurs et SLO dans Kibana
Créer des règles d'alerte dans Kibana (requête Elasticsearch, ES|QL, seuil personnalisé, logs), c...
Vector : sources, transforms, sinks et topologie
Les concepts de Vector (sources, transforms, sinks), la configuration YAML, les composants couran...
Installer OpenObserve et ingérer ses premières données
Installer OpenObserve avec Docker Compose ou le binaire, le configurer par ses variables ZO_*, en...