Comandos útiles para OpenSearch
Estado de OpenSearch
www-data@c2-30-gra11:~/current$ curl -X GET "localhost:9200/_cluster/health?pretty"
{
"cluster_name" : "opensearch",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"discovered_master" : true,
"discovered_cluster_manager" : true,
"active_primary_shards" : 15,
"active_shards" : 15,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 14,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 51.724137931034484
}
Estado JVM
www-data@c2-30-gra11:~/current$ curl -s -X GET localhost:9200/_nodes/stats/jvm?pretty
{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name" : "opensearch",
"nodes" : {
"uaRudfgxRzy0mbDXdIHxQg" : {
"timestamp" : 1775630178380,
"name" : "c2-30-gra11",
"transport_address" : "57.128.44.241:9300",
"host" : "57.128.44.241",
"ip" : "57.128.44.241:9300",
"roles" : [
"cluster_manager",
"data",
"ingest",
"remote_cluster_client"
],
"attributes" : {
"shard_indexing_pressure_enabled" : "true"
},
"jvm" : {
"timestamp" : 1775630178380,
"uptime_in_millis" : 34608507,
"mem" : {
"heap_used_in_bytes" : 4788728368,
"heap_used_percent" : 74,
"heap_committed_in_bytes" : 6442450944,
"heap_max_in_bytes" : 6442450944,
"non_heap_used_in_bytes" : 201097608,
"non_heap_committed_in_bytes" : 231669760,
"pools" : {
"young" : {
"used_in_bytes" : 3435134976,
"max_in_bytes" : 0,
"peak_used_in_bytes" : 3858759680,
"peak_max_in_bytes" : 0,
"last_gc_stats" : {
"used_in_bytes" : 0,
"max_in_bytes" : 0,
"usage_percent" : -1
}
},
"old" : {
"used_in_bytes" : 1310720000,
"max_in_bytes" : 6442450944,
"peak_used_in_bytes" : 5377866352,
"peak_max_in_bytes" : 6442450944,
"last_gc_stats" : {
"used_in_bytes" : 1310720000,
"max_in_bytes" : 6442450944,
"usage_percent" : 20
}
},
"survivor" : {
"used_in_bytes" : 42873392,
"max_in_bytes" : 0,
"peak_used_in_bytes" : 255852544,
"peak_max_in_bytes" : 0,
"last_gc_stats" : {
"used_in_bytes" : 42873392,
"max_in_bytes" : 0,
"usage_percent" : -1
}
}
}
},
"threads" : {
"count" : 87,
"peak_count" : 92
},
"gc" : {
"collectors" : {
"young" : {
"collection_count" : 154,
"collection_time_in_millis" : 12574
},
"G1 Concurrent GC" : {
"collection_count" : 82,
"collection_time_in_millis" : 1233
},
"old" : {
"collection_count" : 0,
"collection_time_in_millis" : 0
}
}
},
"buffer_pools" : {
"mapped" : {
"count" : 251,
"used_in_bytes" : 55396681,
"total_capacity_in_bytes" : 55396681
},
"direct" : {
"count" : 56,
"used_in_bytes" : 9421385,
"total_capacity_in_bytes" : 9421384
},
"mapped - 'non-volatile memory'" : {
"count" : 0,
"used_in_bytes" : 0,
"total_capacity_in_bytes" : 0
}
},
"classes" : {
"current_loaded_count" : 25973,
"total_loaded_count" : 27209,
"total_unloaded_count" : 1236
}
}
}
}
}
Estado de los índices
debian@c2-30-gra11:~$ curl -X GET "localhost:9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open read_me KMZWXbRMTjqY7ADQHkO7FA 1 1 1 0 4.8kb 4.8kb
yellow open magento2_product_38_v3 MzKa_cS5SFy1Fdtx8y-Rtg 1 1 2368 0 8mb 8mb
yellow open magento2_product_39_v3 MSBVphQoQS6F1TX5854cbw 1 1 2362 0 7.9mb 7.9mb
yellow open magento2_product_8_v3 2b5LD9wLSvudlhZ8D7fVSQ 1 1 2367 0 8mb 8mb
yellow open magento2_product_14_v3 pc6oSPZSQt29yiuQ2Z_Jfg 1 1 2362 0 7.9mb 7.9mb
yellow open magento2_product_4_v3 txbaneuYTTCe8Kfc-zGYVA 1 1 2368 0 7.9mb 7.9mb
yellow open magento2_product_48_v3 Aot8vVRBQTGkCuthYoK4Wg 1 1 0 0 208b 208b
yellow open magento2_product_47_v3 JNRoHqG7QVCpBPoygPd7wA 1 1 2368 0 7.9mb 7.9mb
yellow open magento2_product_46_v3 DgyuVeUlTCauKn7EO1phYg 1 1 2368 0 7.9mb 7.9mb
yellow open magento2_product_25_v3 vryuO1OFSCqsVWuimhES_Q 1 1 2368 0 8mb 8mb
yellow open magento2_product_45_v3 rSwiGYxUSAGsQtXS2LsU4g 1 1 2367 0 7.9mb 7.9mb
yellow open magento2_product_48_v2 uo45CBqUS-COg98LFsJJRA 1 1 2362 0 7.7mb 7.7mb
yellow open magento2_product_44_v3 HhrfhhZXTdOql4ONFWuw5w 1 1 2368 0 8mb 8mb
yellow open magento2_product_43_v3 6WVlBrYzSOuoMfs1Y2ANkg 1 1 2362 0 7.9mb 7.9mb
yellow open magento2_product_40_v3 AO12rl14Txy-D1ySt9dzwg 1 1 2362 0 7.9mb 7.9mb
Monitorización de OpenSearch
Con este script se puede extraer la información del uso de memoria y el estado de los índices de OpenSearch.
#!/bin/bash
# ==============================================================================
# Script de Monitoreo de OpenSearch
# Registra: Uso de Heap JVM y Estado de Índices Magento (Docs > 2000)
# ==============================================================================
# Configuración de rutas y endpoints
LOG_FILE="/var/www/current/var/log/opensearch.log"
JVM_ENDPOINT="localhost:9200/_nodes/stats/jvm"
INDICES_ENDPOINT="localhost:9200/_cat/indices?h=index,docs.count"
# Asegurar que el directorio del log existe
mkdir -p "$(dirname "$LOG_FILE")"
# 1. Obtener el porcentaje de uso de Heap
# Extraemos el valor de heap_used_percent del JSON de estadísticas
HEAP_USED=$(curl -s -X GET "$JVM_ENDPOINT" | grep -oP '"heap_used_percent":\s*\K[0-9]+' | head -n 1)
[ -z "$HEAP_USED" ] && HEAP_USED="N/A"
# 2. Obtener la información de todos los índices una sola vez para procesarla
# El formato de salida es: "nombre_indice numero_documentos"
INDICES_DATA=$(curl -s -X GET "$INDICES_ENDPOINT")
# 3. Definición de los índices a comprobar y sus etiquetas
# Formato: "etiqueta:prefijo_indice"
CHECK_LIST=("ES:magento2_product_4" "IT:magento2_product_8" "EN:magento2_product_14" "FR:magento2_product_25" "DE:magento2_product_38")
# Variable para almacenar los resultados de los índices
INDEX_STATUS_RESULTS=""
for ITEM in "${CHECK_LIST[@]}"; do
LABEL="${ITEM%%:*}"
PREFIX="${ITEM#*:}"
# Buscamos el valor máximo de documentos entre todas las versiones encontradas.
# La regex asegura que coincida el nombre exacto o seguido de un sufijo de versión (_v1, _2, etc.)
# Esto evita que al buscar "product_4" se mezclen datos de "product_40".
MAX_DOCS=$(echo "$INDICES_DATA" | grep -E "^${PREFIX}((_v|_)?[0-9]+)?\s" | awk '{print $2}' | sort -nr | head -n 1)
# Validamos si el índice existe y si tiene al menos 2000 documentos
if [[ -n "$MAX_DOCS" && "$MAX_DOCS" -ge 2000 ]]; then
STATUS="OK"
else
STATUS="FAIL"
fi
# Concatenamos el resultado
if [ -z "$INDEX_STATUS_RESULTS" ]; then
INDEX_STATUS_RESULTS="${LABEL}: ${STATUS}"
else
INDEX_STATUS_RESULTS="${INDEX_STATUS_RESULTS}, ${LABEL}: ${STATUS}"
fi
done
# 4. Obtener la fecha y hora actual
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 5. Guardar en el archivo de log
# Formato: [Fecha] Heap Used: X%, ES: OK, IT: FAIL...
echo "[$TIMESTAMP] Heap Used: ${HEAP_USED}%, ${INDEX_STATUS_RESULTS}" >> "$LOG_FILE"
Generará un log como el siguiente:
[2026-04-08 06:18:01] Heap Used: 10%, ES: OK, IT: OK, EN: OK, FR: OK, DE: OK

Hey! Qué opinas sobre el artículo?