Cómo analizar las estadísticas de una base de datos Redis administrada mediante Elastic Stack en Ubuntu 18.04

El autor seleccionó el Fondo de Código Libre y Abierto para recibir una donación como parte del programa Write for DOnations .
Introducción
La monitorización de bases de datos es el proceso continuo de seguimiento sistemático de diversas métricas que muestran el rendimiento de la base de datos. Al observar los datos de rendimiento, puede obtener información valiosa e identificar posibles cuellos de botella, así como encontrar formas adicionales de mejorar el rendimiento de la base de datos. Estos sistemas suelen implementar alertas que notifican a los administradores cuando algo sale mal. Las estadísticas recopiladas se pueden utilizar no solo para mejorar la configuración y el flujo de trabajo de la base de datos, sino también los de las aplicaciones cliente.
La ventaja de utilizar Elastic Stack (pila ELK) para supervisar su base de datos administrada es su excelente compatibilidad con búsquedas y la capacidad de ingerir nuevos datos muy rápidamente. No se destaca por actualizar los datos, pero esta compensación es aceptable para fines de supervisión y registro, donde los datos anteriores casi nunca se modifican. Elasticsearch ofrece un medio poderoso para consultar los datos, que puede utilizar a través de Kibana para comprender mejor cómo se comporta la base de datos en diferentes períodos de tiempo. Esto le permitirá correlacionar la carga de la base de datos con eventos de la vida real para obtener información sobre cómo se utiliza la base de datos.
En este tutorial, importará métricas de base de datos, generadas por el comando INFO de Redis , en Elasticsearch a través de Logstash . Esto implica configurar Logstash para ejecutar periódicamente el comando, analizar su resultado y enviarlo a Elasticsearch para indexarlo inmediatamente después. Los datos importados se pueden analizar y visualizar posteriormente en Kibana. Al final del tutorial, tendrá un sistema automatizado que extrae estadísticas de Redis para su posterior análisis.
Prerrequisitos
- Un servidor Ubuntu 18.04 con al menos 8 GB de RAM, privilegios de root y una cuenta secundaria que no sea root. Puedes configurarlo siguiendo esta guía de configuración inicial del servidor . Para este tutorial, el usuario que no es root es
sammy
. - Java 8 instalado en su servidor. Para obtener instrucciones de instalación, visite Cómo instalar Java
apt
en Ubuntu 18.04 y siga los comandos que se describen en el primer paso. No necesita instalar el kit de desarrollo de Java (JDK). - Nginx instalado en su servidor. Para obtener una guía sobre cómo hacerlo, consulte el tutorial Cómo instalar Nginx en Ubuntu 18.04 .
- Elasticsearch y Kibana instalados en su servidor. Complete los dos primeros pasos del tutorial Cómo instalar Elasticsearch, Logstash y Kibana (Elastic Stack) en Ubuntu 18.04 .
- Una base de datos administrada por Redis proporcionada desde DigitalOcean con información de conexión disponible. Asegúrese de que la dirección IP de su servidor esté en la lista blanca. Para obtener una guía sobre cómo crear una base de datos Redis con el Panel de control de DigitalOcean, visite la Guía de inicio rápido de Redis .
- Redli instalado en su servidor de acuerdo con el tutorial Cómo conectarse a una base de datos administrada en Ubuntu 18.04 .
Paso 1: Instalación y configuración de Logstash
En esta sección, instalará Logstash y lo configurará para extraer estadísticas de su clúster de base de datos Redis y luego analizarlas para enviarlas a Elasticsearch para su indexación.
Comience instalando Logstash con el siguiente comando:
- sudo apt install logstash -y
Una vez instalado Logstash, habilite el servicio para que se inicie automáticamente al arrancar:
- sudo systemctl enable logstash
Antes de configurar Logstash para extraer las estadísticas, veamos cómo se ven los datos en sí. Para conectarse a su base de datos Redis, diríjase al Panel de control de base de datos administrada y, en el panel Detalles de conexión , seleccione Indicadores en el menú desplegable:
Se le mostrará un comando preconfigurado para el cliente Redli , que utilizará para conectarse a su base de datos. Haga clic en Copiar y ejecute el siguiente comando en su servidor, reemplazándolo redli_flags_command
por el comando que acaba de copiar:
- redli_flags_command info
Dado que la salida de este comando es larga, lo explicaremos desglosado en sus diferentes secciones.
En la salida del info
comando Redis, las secciones están marcadas con #
, lo que significa un comentario. Los valores se completan en formato key:value
, lo que hace que sea relativamente fácil analizarlos.
La Server
sección contiene información técnica sobre la compilación de Redis, como su versión y la confirmación de Git en la que se basa, mientras que la Clients
sección proporciona la cantidad de conexiones abiertas actualmente.
Output# Serverredis_version:6.2.6redis_git_sha1:4f4e829aredis_git_dirty:1redis_build_id:5861572cb79aebf3redis_mode:standaloneos:Linux 5.11.12-300.fc34.x86_64 x86_64arch_bits:64multiplexing_api:epollatomicvar_api:atomic-builtingcc_version:11.2.1process_id:79process_supervised:systemdrun_id:b8a0aa25d8f49a879112a04a817ac2acd92e0c75tcp_port:25060server_time_usec:1640878632737564uptime_in_seconds:1679uptime_in_days:0hz:10configured_hz:10lru_clock:13488680executable:/usr/bin/redis-serverconfig_file:/etc/redis.confio_threads_active:0# Clientsconnected_clients:4cluster_connections:0maxclients:10032client_recent_max_input_buffer:24client_recent_max_output_buffer:0...
Memory
Confirma cuánta RAM tiene asignada Redis, así como la cantidad máxima de memoria que puede utilizar. Si comienza a quedarse sin memoria, liberará claves utilizando la estrategia que especificó en el Panel de control (que se muestra en el maxmemory_policy
campo de este resultado).
Output...# Memoryused_memory:977696used_memory_human:954.78Kused_memory_rss:9977856used_memory_rss_human:9.52Mused_memory_peak:977696used_memory_peak_human:954.78Kused_memory_peak_perc:100.00%used_memory_overhead:871632used_memory_startup:810128used_memory_dataset:106064used_memory_dataset_perc:63.30%allocator_allocated:947216allocator_active:1273856allocator_resident:3510272total_system_memory:1017667584total_system_memory_human:970.52Mused_memory_lua:37888used_memory_lua_human:37.00Kused_memory_scripts:0used_memory_scripts_human:0Bnumber_of_cached_scripts:0maxmemory:455081984maxmemory_human:434.00Mmaxmemory_policy:noevictionallocator_frag_ratio:1.34allocator_frag_bytes:326640allocator_rss_ratio:2.76allocator_rss_bytes:2236416rss_overhead_ratio:2.84rss_overhead_bytes:6467584mem_fragmentation_ratio:11.43mem_fragmentation_bytes:9104832mem_not_counted_for_evict:0mem_replication_backlog:0mem_clients_slaves:0mem_clients_normal:61504mem_aof_buffer:0mem_allocator:jemalloc-5.1.0active_defrag_running:0lazyfree_pending_objects:0...
En esta Persistence
sección, puede ver la última vez que Redis guardó las claves que almacena en el disco y si se realizó correctamente. La Stats
sección proporciona números relacionados con las conexiones de cliente y dentro del clúster, la cantidad de veces que se encontró (o no) la clave solicitada, etc.
Output...# Persistenceloading:0current_cow_size:0current_cow_size_age:0current_fork_perc:0.00current_save_keys_processed:0current_save_keys_total:0rdb_changes_since_last_save:0rdb_bgsave_in_progress:0rdb_last_save_time:1640876954rdb_last_bgsave_status:okrdb_last_bgsave_time_sec:1rdb_current_bgsave_time_sec:-1rdb_last_cow_size:217088aof_enabled:0aof_rewrite_in_progress:0aof_rewrite_scheduled:0aof_last_rewrite_time_sec:-1aof_current_rewrite_time_sec:-1aof_last_bgrewrite_status:okaof_last_write_status:okaof_last_cow_size:0module_fork_in_progress:0module_fork_last_cow_size:0# Statstotal_connections_received:202total_commands_processed:2290instantaneous_ops_per_sec:0total_net_input_bytes:38034total_net_output_bytes:1103968instantaneous_input_kbps:0.01instantaneous_output_kbps:0.00rejected_connections:0sync_full:0sync_partial_ok:0sync_partial_err:0expired_keys:0expired_stale_perc:0.00expired_time_cap_reached_count:0expire_cycle_cpu_milliseconds:29evicted_keys:0keyspace_hits:0keyspace_misses:0pubsub_channels:0pubsub_patterns:0latest_fork_usec:452total_forks:1migrate_cached_sockets:0slave_expires_tracked_keys:0active_defrag_hits:0active_defrag_misses:0active_defrag_key_hits:0active_defrag_key_misses:0tracking_total_keys:0tracking_total_items:0tracking_total_prefixes:0unexpected_error_replies:0total_error_replies:0dump_payload_sanitizations:0total_reads_processed:2489total_writes_processed:2290io_threaded_reads_processed:0io_threaded_writes_processed:0...
Si observa la role
sección que se encuentra debajo Replication
, sabrá si está conectado a un nodo principal o de réplica. El resto de la sección proporciona la cantidad de réplicas conectadas actualmente y la cantidad de datos que le faltan a la réplica con respecto al nodo principal. Puede haber campos adicionales si la instancia a la que está conectado es una réplica.
Nota: El proyecto Redis utiliza los términos “maestro” y “esclavo” en su documentación y en varios comandos. DigitalOcean generalmente prefiere los términos alternativos “primario” y “réplica”. Esta guía utilizará los términos “primario” y “réplica” de manera predeterminada siempre que sea posible, pero tenga en cuenta que hay algunas instancias en las que los términos “maestro” y “esclavo” aparecen inevitablemente.
Output...# Replicationrole:masterconnected_slaves:0master_failover_state:no-failovermaster_replid:f727fad3691f2a8d8e593b087c468bbb83703af3master_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:0repl_backlog_size:45088768repl_backlog_first_byte_offset:0repl_backlog_histlen:0...
En CPU
, verá la cantidad de potencia de CPU del sistema ( used_cpu_sys
) y del usuario ( used_cpu_user
) que Redis está consumiendo en este momento. La Cluster
sección contiene solo un campo único, cluster_enabled
, que sirve para indicar que el clúster de Redis está en ejecución.
Output...# CPUused_cpu_sys:1.617986used_cpu_user:1.248422used_cpu_sys_children:0.000000used_cpu_user_children:0.001459used_cpu_sys_main_thread:1.567638used_cpu_user_main_thread:1.218768# Modules# Errorstats# Clustercluster_enabled:0# Keyspace
Logstash tendrá la tarea de ejecutar periódicamente el info
comando en tu base de datos Redis (de forma similar a como lo hiciste tú), analizar los resultados y enviarlos a Elasticsearch. Luego podrás acceder a ellos más tarde desde Kibana.
Almacenarás la configuración para indexar las estadísticas de Redis en Elasticsearch en un archivo cuyo nombre se encuentra redis.conf
en el /etc/logstash/conf.d
directorio donde Logstash almacena los archivos de configuración. Cuando se inicia como servicio, los ejecutará automáticamente en segundo plano.
Crea redis.conf
usando tu editor favorito (por ejemplo, nano):
- sudo nano /etc/logstash/conf.d/redis.conf
Añade las siguientes líneas:
/etc/logstash/conf.d/redis.conf
input {exec {command = "redis_flags_command info"interval = 10type = "redis_info"}}filter {kv {value_split = ":"field_split = "rn"remove_field = [ "command", "message" ]}ruby {code ="event.to_hash.keys.each { |k|if event.get(k).to_i.to_s == event.get(k) # is integer?event.set(k, event.get(k).to_i) # convert to integerendif event.get(k).to_f.to_s == event.get(k) # is float?event.set(k, event.get(k).to_f) # convert to floatend}puts 'Ruby filter finished'"}}output { elasticsearch { hosts = "http://localhost:9200" index = "%{type}" }}
Recuerde reemplazar redis_flags_command
con el comando que se muestra en el panel de control que utilizó anteriormente en el paso.
Se define un input
, que es un conjunto de filtros que se ejecutarán en los datos recopilados, y una salida que enviará los datos filtrados a Elasticsearch. La entrada consta del exec
comando, que ejecutará un command
en el servidor periódicamente, después de un tiempo establecido interval
(expresado en segundos). También especifica un type
parámetro que define el tipo de documento cuando se indexa en Elasticsearch. El exec
bloque pasa un objeto que contiene dos campos command
y message
una cadena. El command
campo contendrá el comando que se ejecutó y el message
contendrá su salida.
Hay dos filtros que se ejecutarán secuencialmente en los datos recopilados de la entrada. El kv
filtro significa filtro clave-valor y está integrado en Logstash. Se utiliza para analizar datos en la forma general de y proporciona parámetros para especificar qué se consideran separadores de valor y de campo. El separador de campo pertenece a las cadenas que separan los datos formateados en la forma general entre sí. En el caso de la salida del comando INFO de Redis, el separador de campo ( ) es una nueva línea y el separador de valor ( ) es . Las líneas que no sigan la forma definida se descartarán, incluidos los comentarios.keyvalue_separatorvalue
field_split
value_split
:
Para configurar el kv
filtro, se pasa :
al value_split
parámetro y rn
(que significa una nueva línea) al field_split
parámetro. También se le ordena que elimine los campos command
y message
del objeto de datos actual pasándolos a remove_field
como elementos de una matriz, porque contienen datos que ahora son inútiles.
El kv
filtro representa el valor que analizó como un tipo de cadena (texto) por diseño. Esto plantea un problema porque Kibana no puede procesar fácilmente los tipos de cadena, incluso si en realidad es un número. Para resolver esto, utilizará código Ruby personalizado para convertir las cadenas que solo contienen números en números, siempre que sea posible. El segundo filtro es un ruby
bloque que proporciona un code
parámetro que acepta una cadena que contiene el código que se ejecutará.
event
es una variable que Logstash proporciona a su código y contiene los datos actuales en la secuencia de filtros. Como se señaló anteriormente, los filtros se ejecutan uno tras otro, lo que significa que el filtro Ruby recibirá los datos analizados del kv
filtro. El código Ruby en sí convierte el event
en un hash y recorre las claves, luego verifica si el valor asociado con la clave se puede representar como un entero o como un flotante (un número con decimales). Si se puede, el valor de la cadena se reemplaza con el número analizado. Cuando el bucle termina, imprime un mensaje ( Ruby filter finished
) para informar el progreso.
La salida envía los datos procesados a Elasticsearch para su indexación. El documento resultante se almacenará en el redis_info
índice, se definirá en la entrada y se pasará como parámetro al bloque de salida.
Guarde y cierre el archivo.
Ha instalado Logstash apt
y lo ha configurado para solicitar periódicamente estadísticas de Redis, procesarlas y enviarlas a su instancia de Elasticsearch.
Paso 2: Prueba de la configuración de Logstash
Ahora probará la configuración ejecutando Logstash para verificar que extraerá los datos correctamente.
Logstash permite ejecutar una configuración específica al pasar su ruta de archivo al -f
parámetro. Ejecute el siguiente comando para probar su nueva configuración del último paso:
- sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
Puede que tarde un poco en mostrarse el resultado, pero pronto verás algo similar a lo siguiente:
OutputUsing bundled JDK: /usr/share/logstash/jdkOpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaultsCould not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console[INFO ] 2021-12-30 15:42:08.887 [main] runner - Starting Logstash {"logstash.version"="7.16.2", "jruby.version"="jruby 9.2.20.1 (2.5.8) 2021-11-30 2a2962fbd1 OpenJDK 64-Bit Server VM 11.0.13+8 on 11.0.13+8 +indy +jit [linux-x86_64]"}[INFO ] 2021-12-30 15:42:08.932 [main] settings - Creating directory {:setting="path.queue", :path="/usr/share/logstash/data/queue"}[INFO ] 2021-12-30 15:42:08.939 [main] settings - Creating directory {:setting="path.dead_letter_queue", :path="/usr/share/logstash/data/dead_letter_queue"}[WARN ] 2021-12-30 15:42:09.406 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified[INFO ] 2021-12-30 15:42:09.449 [LogStash::Runner] agent - No persistent UUID file found. Generating new UUID {:uuid="acc4c891-936b-4271-95de-7d41f4a41166", :path="/usr/share/logstash/data/uuid"}[INFO ] 2021-12-30 15:42:10.985 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=9600, :ssl_enabled=false}[INFO ] 2021-12-30 15:42:11.601 [Converge PipelineAction::Createmain] Reflections - Reflections took 77 ms to scan 1 urls, producing 119 keys and 417 values[WARN ] 2021-12-30 15:42:12.215 [Converge PipelineAction::Createmain] plain - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.[WARN ] 2021-12-30 15:42:12.366 [Converge PipelineAction::Createmain] plain - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.[WARN ] 2021-12-30 15:42:12.431 [Converge PipelineAction::Createmain] elasticsearch - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.[INFO ] 2021-12-30 15:42:12.494 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class="LogStash::Outputs::ElasticSearch", :hosts=["http://localhost:9200"]}[INFO ] 2021-12-30 15:42:12.755 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes={:removed=[], :added=[http://localhost:9200/]}}[WARN ] 2021-12-30 15:42:12.955 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url="http://localhost:9200/"}[INFO ] 2021-12-30 15:42:12.967 [[main]-pipeline-manager] elasticsearch - Elasticsearch version determined (7.16.2) {:es_version=7}[WARN ] 2021-12-30 15:42:12.968 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=7}[WARN ] 2021-12-30 15:42:13.065 [[main]-pipeline-manager] kv - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.[INFO ] 2021-12-30 15:42:13.090 [Ruby-0-Thread-10: :1] elasticsearch - Using a default mapping template {:es_version=7, :ecs_compatibility=:disabled}[INFO ] 2021-12-30 15:42:13.147 [Ruby-0-Thread-10: :1] elasticsearch - Installing Elasticsearch template {:name="logstash"}[INFO ] 2021-12-30 15:42:13.192 [[main]-pipeline-manager] javapipeline - Starting pipeline {:pipeline_id="main", "pipeline.workers"=2, "pipeline.batch.size"=125, "pipeline.batch.delay"=50, "pipeline.max_inflight"=250, "pipeline.sources"=["/etc/logstash/conf.d/redis.conf"], :thread="#Thread:0x5104e975 run"}[INFO ] 2021-12-30 15:42:13.973 [[main]-pipeline-manager] javapipeline - Pipeline Java execution initialization time {"seconds"=0.78}[INFO ] 2021-12-30 15:42:13.983 [[main]-pipeline-manager] exec - Registering Exec Input {:type="redis_info", :command="redli --tls -h db-redis-fra1-68603-do-user-1446234-0.b.db.ondigitalocean.com -a hnpJxAgoH3Om3UwM -p 25061 info", :interval=10, :schedule=nil}[INFO ] 2021-12-30 15:42:13.994 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"="main"}[INFO ] 2021-12-30 15:42:14.034 [Agent thread] agent - Pipelines running {:count=1, :running_pipelines=[:main], :non_running_pipelines=[]}Ruby filter finishedRuby filter finishedRuby filter finished...
Verá que el Ruby filter finished
mensaje se imprime a intervalos regulares (establecidos en 10 segundos en el paso anterior), lo que significa que las estadísticas se están enviando a Elasticsearch.
Puedes salir de Logstash haciendo clic CTRL + C
en el teclado. Como se mencionó anteriormente, Logstash ejecutará automáticamente todos los archivos de configuración que se encuentren en /etc/logstash/conf.d
segundo plano cuando se inicie como servicio. Ejecuta el siguiente comando para iniciarlo:
- sudo systemctl start logstash
Ha ejecutado Logstash para comprobar si puede conectarse a su clúster de Redis y recopilar datos. A continuación, explorará algunos de los datos estadísticos en Kibana.
Paso 3: Exploración de datos importados en Kibana
En esta sección, explorará y visualizará los datos estadísticos que describen el rendimiento de su base de datos en Kibana.
En su navegador web, acceda al dominio en el que expuso Kibana como parte de los requisitos previos. Verá la página de bienvenida predeterminada:
Antes de explorar los datos que Logstash envía a Elasticsearch, primero deberá agregar el redis_info
índice a Kibana. Para ello, seleccione Explorar por mi cuenta en la página de bienvenida y luego abra el menú de hamburguesas en la esquina superior izquierda. En Analytics , haga clic en Descubrir .
Luego, Kibana le solicitará que cree un nuevo patrón de índice:
Haga clic en Crear patrón de índice . Verá un formulario para crear un nuevo Patrón de índice . Los patrones de índice en Kibana brindan una manera de extraer datos de varios índices de Elasticsearch a la vez y se pueden usar para explorar solo un índice.
A la derecha, Kibana muestra todos los índices disponibles, como redis_info
los que ha configurado para que utilice Logstash. Introdúzcalo en el campo de texto Nombre y seleccione @timestamp
en el menú desplegable el campo Marca de tiempo . Cuando haya terminado, presione el botón Crear patrón de índice que se encuentra debajo.
Para crear y ver visualizaciones existentes, abra el menú de hamburguesas. En Analytics , seleccione Dashboard . Cuando se cargue, presione en Create visualization (Crear visualización) para comenzar a crear una nueva:
El panel del lado izquierdo proporciona una lista de valores que Kibana puede utilizar para dibujar la visualización, que se mostrará en la parte central de la pantalla. En el lado superior derecho de la pantalla se encuentra el selector de rango de fechas. Si el @timestamp
campo se utiliza en la visualización, Kibana solo mostrará los datos que pertenecen al intervalo de tiempo especificado en el selector de rango.
En el menú desplegable de la parte principal de la página, seleccione Línea en la sección Línea y áreaused_memory
. A continuación, busque el campo en la lista de la izquierda y arrástrelo a la parte central. Pronto verá una visualización lineal de la cantidad media de memoria utilizada a lo largo del tiempo:
En el lado derecho, puedes configurar cómo se procesan los ejes horizontal y vertical. Allí, puedes configurar el eje vertical para que muestre los valores promedio en lugar de la mediana, presionando sobre el eje mostrado:
Puede seleccionar una función diferente o proporcionar la suya propia:
El gráfico se actualizará inmediatamente con los valores actualizados.
En este paso, ha visualizado el uso de memoria de su base de datos Redis administrada mediante Kibana. Esto le permitirá comprender mejor cómo se utiliza su base de datos, lo que le ayudará a optimizar las aplicaciones cliente, así como la base de datos en sí.
Conclusión
Ahora tiene la pila Elastic instalada en su servidor y configurada para extraer datos estadísticos de su base de datos Redis administrada de forma regular. Puede analizar y visualizar los datos utilizando Kibana o algún otro software adecuado, que lo ayudará a recopilar información valiosa y correlaciones reales sobre el rendimiento de su base de datos.
Para obtener más información sobre lo que puede hacer con su base de datos administrada de Redis, visite la documentación del producto . Si desea presentar las estadísticas de la base de datos mediante otro tipo de visualización, consulte la documentación de Kibana para obtener más instrucciones.
Deja una respuesta