Una vez desplegado un clúster de Elasticsearch, es fundamental monitorear su estado operativo: nodos activos, nodo maestro, salud del clúster y distribución de réplicas. Esta guía explica cómo interactuar con el clúster usando comandos curl estándar y la API REST, cubriendo operaciones de diagnóstico, gestión de índices, manipulación de documentos y procesamiento masivo.
Estructura básica de las solicitudes REST
La interfaz de Elasticsearch sigue el patrón RESTful. Cada petición se construye con los siguientes componentes:
- Método HTTP:
GET(lectura),POST(creación o acción no idempotente),PUT(creación o reemplazo idempotente),DELETE(eliminación). - URL base:
http://<host>:<puerto>/<ruta>, donde<ruta>puede ser/_cat,/_cluster/health,/_search, etc. - Parámetros de consulta: como
?v(para mostrar encabezados),?pretty(formato legible),?s=docs.count:desc(ordenamiento), o?health=yellow(filtro por estado). - Cuerpo de la solicitud (-d): JSON válido, usado en operaciones de escritura como creación o actualización.
Diagnóstico del clúster
Las rutas bajo /_cat ofrecen vistas tabulares útiles para administración rápida:
# Estado general del clúster
curl -X GET "http://192.168.31.215:9201/_cat/health?v&pretty" -u elastic:26tBktGolYCyZD2pPISW
# Nodo maestro actual
curl -X GET "http://192.168.31.215:9201/_cat/master?v" -u elastic:26tBktGolYCyZD2pPISW
# Todos los nodos participantes
curl -X GET "http://192.168.31.215:9201/_cat/nodes?v" -u elastic:26tBktGolYCyZD2pPISW
# Índices ordenados por tamaño de almacenamiento (descendente)
curl -X GET "http://192.168.31.215:9201/_cat/indices?v&h=i,store.size&s=store.size:desc" -u elastic:26tBktGolYCyZD2pPISW
# Shards del índice 'products', con detalles de estado y ubicación
curl -X GET "http://192.168.31.215:9201/_cat/shards/products?v" -u elastic:26tBktGolYCyZD2pPISW
# Total de documentos en todos los índices
curl -X GET "http://192.168.31.215:9201/_all/_count?pretty" -u elastic:26tBktGolYCyZD2pPISW
Operaciones CRUD sobre documentos
El comportamiento varía según el endpoint y el método HTTP utilizado:
| Acción | Método | Endpoint | Comportamiento clave |
|---|---|---|---|
| Crear (ID geenrado) | POST | /logs/_doc |
Asigna un ID único automáticamente. Múltiples peticiones generan documentos distintos incluso con contenido idéntico. |
| Crear (ID explícito) | PUT o POST | /logs/_create/101 |
Falla si ya existe un documento con ese ID. Garantiza exclusividad. |
| Indexar / Reemplazar | PUT o POST | /logs/_doc/101 |
Si el ID existe, reemplaza el documento completo y aumenta la versión (_version). No conserva campos ausentes en el nuevo cuerpo. |
| Leer | GET | /logs/_doc/101 |
Recupera el documento completo, incluyendo metadatos como _version y _seq_no. |
| Actualizar parcial | POST | /logs/_update/101 |
Modifica solo los campos especificados dentro del objeto "doc". No elimina campos omitidos. Requiere que el documento exista. |
| Eliminar documento | DELETE | /logs/_doc/101 |
Marca el documento como eliminado lógicamente (soft delete). El espacio se reclama en fusiones posteriores. |
| Eliminar índice | DELETE | /logs |
Borra todo el índice y sus datos asociados. Irreversible. |
Ejemplos prácticos
Creación con ID generado
curl -X POST "http://192.168.31.215:9201/logs/_doc?pretty" \
-H "Content-Type: application/json" \
-u elastic:26tBktGolYCyZD2pPISW \
-d '{
"author": "Ana López",
"topic": "Elasticsearch avanzado",
"published": true,
"year": 2024
}'
Creación con ID fijo
curl -X PUT "http://192.168.31.215:9201/logs/_create/777?pretty" \
-H "Content-Type: application/json" \
-u elastic:26tBktGolYCyZD2pPISW \
-d '{
"author": "Carlos Méndez",
"topic": "Gestión de clústeres",
"published": false,
"year": 2024
}'
Actualización parcial
curl -X POST "http://192.168.31.215:9201/logs/_update/777?pretty" \
-H "Content-Type: application/json" \
-u elastic:26tBktGolYCyZD2pPISW \
-d '{
"doc": {
"published": true,
"reviewed_by": "Sofía Ruiz"
}
}'
Operaciones masivas
Bulk API
Permite agrupar múltiples operaciones (index, create, update, delete) en una sola llamada. Cada acción va seguida de su payload correspondiente, separados por saltos de línea (formato NDJSON):
curl -X POST "http://192.168.31.215:9201/_bulk?pretty" \
-H "Content-Type: application/x-ndjson" \
-u elastic:26tBktGolYCyZD2pPISW \
--data-binary @- <<EOF
{ "index" : { "_index" : "logs", "_id" : "1001" } }
{ "author": "María Gómez", "topic": "Monitorización", "year": 2024 }
{ "create" : { "_index" : "logs", "_id" : "1002" } }
{ "author": "Javier Torres", "topic": "Seguridad", "year": 2024 }
{ "delete" : { "_index" : "logs", "_id" : "1003" } }
EOF
MGET — Lectura múltiple eficiente
Recupera varios documentos en una única petición, reduciendo latencia de red:
curl -X GET "http://192.168.31.215:9201/_mget?pretty" \
-H "Content-Type: application/json" \
-u elastic:26tBktGolYCyZD2pPISW \
-d '{
"docs": [
{ "_index": "logs", "_id": "1001" },
{ "_index": "logs", "_id": "1002" },
{ "_index": "metrics", "_id": "2024-01-01" }
]
}'
MSEARCH — Búsqueda múltiple concurrente
Ejecuta varias consultas independientes en una sola llamada. Usa formato NDJSON: cada línea es un header (con índice y opciones) y la siguiente es el body de búsqueda:
curl -X GET "http://192.168.31.215:9201/logs/_msearch?pretty" \
-H "Content-Type: application/x-ndjson" \
-u elastic:26tBktGolYCyZD2pPISW \
--data-binary @- <<EOF
{"size": 5}
{"query": {"match": {"topic": "Elasticsearch"}}}
{"index": "metrics", "size": 3}
{"aggs": {"avg_year": {"avg": {"field": "year"}}}}
EOF