Elasticsearch: comprensión de los errores de registro de TLS mediante ESRE e IA generativa

Por DAVID ESPERANZA

Este blog presenta una aplicación novedosa de Elasticsearch Relation Engine (ESRE) y sus capacidades de Elastic Learned Sparse Encoder, particularmente en el análisis de registros.

El Elasticsearch Relevance Engine™ (ESRE™) lanzado recientemente incluye un conjunto de funciones clave que mejoran las capacidades de búsqueda y permiten consultar Elasticsearch® utilizando el mismo lenguaje natural que se utiliza para formular preguntas de IA generativa.

Esto me hace preguntarme cómo podemos usar esto para iniciar sesión. Es bastante fácil comenzar con los modelos Elastic Learned Sparse Encoder , una característica importante de ESRE que admite la búsqueda semántica; mostraremos cómo usarla para iniciar sesión en este blog. Esta característica es muy diferente de lo que hace actualmente Elasticsearch® porque comprende el significado de las palabras y busca ampliamente palabras que tengan un significado similar o que sean sinónimos de la palabra que busqué.

Elastic Learned Sparse Encoder también es una solución de clasificación de búsqueda eficiente, que produce mejores resultados que las búsquedas tradicionales BM25 y KNN basadas en vectores en espacios fuera del dominio (es decir, cuando el modelo no se entrena estrictamente con los datos del usuario). Los modelos de interacción tardía mejoran la precisión de la búsqueda al codificar el texto sin formato para proporcionar más información contextual cuando se realiza la consulta.

¿Cómo funcionan los codificadores dispersos de Elastic Learned?

Cuando se aplica un codificador disperso aprendido elástico a texto sin formato, como un mensaje de registro, produce una estructura de datos. Las claves de esta estructura representan los términos y sus sinónimos que se encuentran en el texto original. En un proceso llamado expansión de términos (expansión de texto), el modelo agrega y elimina términos y sinónimos de los datos de un vocabulario estático de 30.000 términos fijos según su relevancia para el texto original . Esto es similar a las incrustaciones de vectores, creando una estructura (o estructuras) de datos auxiliares y almacenándolas en un campo, que luego se puede usar para una coincidencia semántica instantánea en consultas.

Cada término también tiene una puntuación asociada, que captura su importancia contextual en el texto original. Nos referimos a esta estructura de datos como bolsa de palabras (puntuada), o BOW.

Ejemplo de ARCO

Observe cómo se capturan, derivan, añaden sinónimos y finalmente califican las palabras del texto ingresado. Tenga en cuenta también que la estructura "Bolsa de palabras puntuadas" es sólo un mapa de [palabra => Puntuación]. Más adelante verás cómo se genera esto para nuestro syslog.

En el momento de la consulta, la cadena de consulta de entrada pasa por el mismo proceso de razonamiento detrás de escena que realizamos en el texto del registro sin procesar en el momento de la ingesta para generar el BOW. Luego, este BOW se compara con el BOW del texto de registro original en el índice, similar a una búsqueda de k vecinos más cercanos con vectores integrados . La puntuación de clasificación final para los resultados de búsqueda es el resultado de una fórmula que tiene en cuenta las puntuaciones de las palabras coincidentes en la consulta BOW y el texto del registro original.

Tomemos un ejemplo de lo útil que es esto si estoy buscando "¿Hay alguna advertencia de TLS?". En mi syslog, la siguiente línea de registro " 2023/05/24 17:10:33: Error al obtener el estado de configuración, es posible que los certificados de carga de trabajo no estén configurados: HTTP 404 " coincide, aunque no hay una coincidencia exacta en esa línea de registro en particular. ESRE entiende TLS en relación con los certificados.

Una advertencia: esta búsqueda es "difusa" y es posible que no obtenga los resultados que busca. Incluso puedes utilizar un modelo mejor para este propósito, como uno entrenado con tus propios datos. Es importante recordar que esta es sólo otra herramienta que nos ayudará a orientarnos en la dirección correcta cuando necesitemos resolver ambigüedades. Poder hablar del problema en general durante la búsqueda sin tener que ser muy específico sobre los errores que estamos viendo nos ayuda con el análisis de la causa raíz.

Puede ponerlo en funcionamiento y comenzar a usarlo para buscar registros con solo unos pocos clics.

Esto puede cambiar la forma en que aborda la detección y reparación de problemas, ya que ESRE puede devolver registros que quizás no haya pensado en analizar antes pero que son relevantes para el problema que está tratando de resolver. Esta es una victoria por reducir el indicador MTTx. Luego puede usar los documentos devueltos por Elastic y los mismos términos de búsqueda para hacer preguntas a un motor de IA generativa como ChatGPT, que exploramos al final y en otros casos de uso en este blog .

Al final de este blog, tendrá un flujo de alto nivel similar a este:

pasos de configuración

En los próximos pasos, analizaré:

  • Obtenga una cuenta en Elastic Cloud (debe ser la versión 8.8 y superior) e instale Elastic Agent
  • Configure ESRE en este entorno y conecte los registros a ESRE
  • Buscar registros a través de ESRE usando Kibana®
  • Utilice ChatGPT para crear rápidamente aplicaciones que funcionen con Elasticsearch y ESRE

Paso 0: Crea una cuenta en Elastic Cloud

Algunas notas antes de continuar:

1) Asegúrese de hacer clic en " Opciones avanzadas " (que se muestra a continuación) al crear su instancia de Elastic Cloud y agregue un nodo de aprendizaje automático con al menos 4 GB de RAM para este blog.

2) Cuando siga las instrucciones a continuación, asegúrese de seguir los pasos de integración "Agregar sistema".

Teniendo en cuenta estas consideraciones, siga las instrucciones para comenzar con Elastic Cloud.

Teniendo en cuenta estas consideraciones, sigue las instrucciones para comenzar con Elastic Cloud .

Paso 1: Instalar el modelo de Elastic Learned Sparse Encoder

Estos pasos implementarán Elastic Learned Sparse Encoder para usarlo con syslog. La página de documentación está aquí. Las guías chinas están disponibles aquí.

Elastic Learned Sparse Encoder es un modelo de recuperación entrenado por Elastic que le permite realizar búsquedas semánticas para recuperar resultados de búsqueda más relevantes. Este tipo de búsqueda le brinda resultados de búsqueda basados ​​en el significado contextual y la intención del usuario, en lugar de coincidencias exactas de palabras clave.

Vaya a Análisis -> Aprendizaje automático:

Haga clic en Gestión de modelos -> Modelos entrenados:

Seleccione Elastic Learned Sparse EncodeR v1 y haga clic en el botón de descarga en el extremo derecho.

Una vez descargado, debemos ejecutarlo.

Para los propósitos de este blog, la configuración predeterminada está bien.

Paso 2: modificar la plantilla de índice

A continuación, debemos agregar algunos campos al documento entrante para que Elastic Learned Sparse Encoder los use para tokens y búsquedas. Podemos hacer esto actualizando la plantilla de índice para el tipo de registro que queremos usar para el modelo.

En esta sección, agregaremos un campo token y un campo de texto, los cuales son necesarios para usar con el modelo Elastic Learned Sparse Encoder. Al ejecutar la inferencia, el modelo buscará mensajes de registro en el campo text_field. Luego, el paso de inferencia convierte el texto del mensaje de registro en una lista de pares de token-peso, que se almacena en el campo tokens; es por eso que necesitamos estas asignaciones.

Las plantillas de índice nos permiten definir el formato y el mapeo de documentos en un índice, en este caso un índice syslog.

Vaya a "Administración de pila".

A continuación, vaya a Gestión de índices -> Plantillas de índice. Modificaremos el índice "syslog" de la siguiente manera:

Haga clic en el nombre del índice, elija Administrar en la esquina inferior derecha y luego elija Editar.

Vaya al paso 4: "Asignaciones".

Y agregue las siguientes asignaciones: ml.tokens y text_field.

Haga clic en Siguiente y guarde.

Paso 3: agregar una canalización de ingesta personalizada

A continuación, agregaremos una canalización de ingesta personalizada para que Elastic Learned Sparse Encoder pueda agregar tokens a los documentos enviados a Elastic. Esto es necesario para la búsqueda semántica; profundice en esto . Lo bueno es que podemos ver el token en la documentación, lo que te da una idea de cómo funciona.

El paso de canalización primero copia el mensaje de registro en el campo text_field, ya que aquí es donde el modelo busca los datos que necesita. A través de un paso de inferencia, convierte el texto del mensaje de registro en una lista de pares de peso de token, que se almacena en el campo ml.tokens.

Tenga en cuenta que si la ingesta de registros en este índice está muy ocupada, la inferencia agregará un poco de tiempo de procesamiento; puede que esto no sea una buena idea si tiene una carga muy pesada, pero para nuestro pequeño caso de uso aquí, esto debería funcionar bien. .

Primero, vaya al canal de ingesta:

Cree una nueva canalización de ingesta denominada "logs-system.syslog@custom". Este es un nombre especial llamado desde la canalización principal de ingesta de syslog y existe en todas las canalizaciones "administradas" para que pueda agregar pasos de ingesta personalizados .

Ahora agreguemos dos procesadores a esta canalización de ingesta:

1) El primer procesador configurará el campo de texto con el campo de mensaje de registro que contiene los datos de registro que queremos buscar usando la operación Establecer procesador y Copiar desde como se muestra a continuación.

2) El segundo procesador agregado es el procesador de "inferencia", que generará los tokens necesarios para la búsqueda semántica. Configúrelo de la siguiente manera.

Mapeo de campo:

{
 "text": "text_field"
}

Configuración de inferencia:

{
 "text_expansion": {
   "results_field": "tokens"
 }
}

Una vez hecho esto, haga clic en " Crear canalización ".

Paso 4: índice de desplazamiento

Para forzar una renovación del índice y usar la nueva plantilla de índice que creamos, vaya a Herramientas de desarrollo y realice la siguiente POST:

POST /logs-system.syslog-default/_rollover/

Paso 5: Bienvenido a la búsqueda semántica con registros

Ahora, vaya a descubrimiento y cree una nueva vista de datos que solo muestre syslog:

Es posible que tengas que esperar un poco para que se completen algunos datos aquí. Una vez que haya datos, debería ver el campo Tokens ML completado de la siguiente manera:

Ésta es la magia de Elastic Sparse Learned Encoder. El token que puede ver aquí mejora la forma en que puede comprender la semántica de una línea de registro y le permite encontrar registros con un significado similar al parámetro de búsqueda.

Ahora podemos ejecutar una búsqueda semántica. Cambie el cuadro de idioma a continuación de KQL a Lucene.

Ingrese lo siguiente en el cuadro de búsqueda. Aquí, las consultas de aumento de texto utilizan un modelo de procesamiento de lenguaje natural para convertir el texto de la consulta en una lista de pares de pesos de token, que luego se usan en consultas contra el campo de características de clasificación que definimos anteriormente.

{"text_expansion":{"ml.tokens":{"model_id":".elser_model_1","model_text":"Are there any TLS warnings?"}}}

¡Felicidades! Acabas de realizar una búsqueda semántica con Elastic.

Ahora hay una cosa más por hacer: necesitamos ordenar los resultados para que veamos los resultados de búsqueda principales. Agregue el campo _score como se muestra a continuación.

También hay un campo de "mensaje".

Ahora podemos ordenarlos de mayor a menor, lo que nos indica cuál es una coincidencia fuerte (similar a cómo se clasifican los resultados de búsqueda en Google):

¡Ahora veamos si podemos conectarlo a ChatGPT!

Paso 6: conéctalo a ChatGPT

Ahora deja que ChatGPT escriba algo de código para nosotros. Le preguntamos a ChatGPT:

“¿ Puedes escribir algún código para consultar Elasticsearch y luego enviar los documentos que se devuelven a ChatGPT? "

Escribe el siguiente código:

from elasticsearch import Elasticsearch
from openai import OpenAI, ChatCompletion

# Initialize Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# Search for documents in Elasticsearch
body = {
    "query": {
        "match_all": {}
    }
}

res = es.search(index='your_index_name', body=body)

# Initialize OpenAI
openai = OpenAI(api_key='your_openai_api_key')

# Send documents to ChatGPT
for hit in res['hits']['hits']:
    message = {
        "role": "system",
        "content": f"Document : {hit['_source']}"
    }

    # Generate response from ChatGPT
    response = openai.ChatCompletion.create(
      model="gpt-4.0-turbo",
      messages=[message]
    )

    # Print the model's response
    print(response['choices'][0]['message']['content'])

Ahora esto se modifica fácilmente para que podamos usar la nueva "consulta semántica" de Elasticsearch como se muestra a continuación.

Cambie las siguientes líneas:

# Search for documents in Elasticsearch
body = {
    "query": {
        "match_all": {}
    }
}

Eso es todo por ahora. Tenga en cuenta que esto garantizará que solo obtengamos los tres resultados principales y, por lo tanto, los resultados más relevantes:

body = {
  "query": {
    "text_expansion": {
      "ml.tokens": {
        "model_id": ".elser_model_1",
        "model_text": "Are there any TLS warnings?"
      }
    }
  },
  "size": 3,
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

y cambia esta línea:

"content": f"Document : {hit['_source']}"

queda así:

 "content": f”Are there any TLS warnings? Log line : {hit['_source']}"

Esto nos permite incluir resultados de Elasticsearch en consultas de ChatGPT, lo que hace que las alucinaciones sean mucho menos probables y más probable que nos den un diagnóstico relevante. Consulta aquí el resultado final.

ChatGPT responde:

El mensaje de error que estás viendo parece sugerir que podría haber un problema relacionado con los certificados de Seguridad de la capa de transporte (TLS). El error HTTP 404 indica que no se puede encontrar el recurso solicitado.

  • Configuración incorrecta o incompleta:  el error sugiere que es posible que los certificados de carga de trabajo no estén configurados. Si su servicio requiere certificados TLS para comunicarse de forma segura, pero no se han configurado correctamente, esto podría causar el problema. Debe revisar su configuración para asegurarse de que TLS esté configurado correctamente
  • Ruta incorrecta:  es posible que el sistema no pueda encontrar los certificados porque no están ubicados en la ruta especificada en su configuración. Debe asegurarse de que la ruta a los archivos del certificado sea correcta.
  • Problemas de permisos:  podría haber problemas con los permisos de archivos o directorios que impiden que su sistema acceda a los archivos de certificados. Debe asegurarse de que el usuario o servicio relevante tenga los permisos necesarios para acceder a estos archivos.
  • El servidor o servicio no está disponible:  el error HTTP 404 podría indicar que el servidor o servicio al que intenta comunicarse no está disponible actualmente o no existe. Debe verificar si el servidor se está ejecutando y si el punto final es correcto. Ahora, si no desea hacerlo usted mismo, he creado una aplicación que hace todo esto aquí,  en este repositorio de GitHub . Cuando lo ejecutas, obtienes esta agradable interfaz gráfica de usuario:

Entonces, con todo conectado, la arquitectura de nuestra solución termina luciendo así:

Ahora que comprende cómo configurar un modelo de Elastic Learned Sparse Encoder, desafío a los lectores a descubrir para qué otros usos pueden usar el modelo y qué casos de uso de registro se les ocurren. También puede ampliar este ejemplo para almacenar en caché y almacenar respuestas de ChatGPT en Elastic, como este blog , lo que le permitirá iniciar una base de conocimientos. Puedes aumentar esto con tu propio conocimiento con el tiempo.

Relevancia superior lista para usar para SRE

En este blog, lo guiamos a través del proceso de configuración de un codificador disperso aprendido elástico para el análisis de registros y desafiamos a nuestros lectores a explorar nuevos usos para el modelo. Un ejemplo sencillo podría implicar buscar cualquier problema relacionado con TLS, como se muestra en este blog.

Con el lanzamiento del motor de relevancia Elasticsearch, ponemos a sus manos el modelo exclusivo de recuperación de Elastic. Este modelo listo para usar se puede integrar fácilmente con nuestra gama completa de métodos de ingesta de datos, incluido el canal de ingesta que se muestra en este blog. Desde el primer momento, cualquiera puede usarlo en su corpus de búsqueda y es lo suficientemente compacto como para caber dentro de los límites de la memoria de una computadora portátil.

Los codificadores dispersos aprendidos de Elastic brindan búsqueda semántica entre dominios para casos de uso de búsqueda (incluidos registros), como se demuestra en este blog, y brindan resultados de búsqueda altamente relevantes sin ajustes ni capacitación personalizados.

Las pruebas de campo muestran consistentemente que las técnicas de clasificación híbrida producen los conjuntos de resultados de búsqueda más relevantes. Sin embargo, un factor clave, el FRR, ha estado ausente. Ahora estamos integrando RRF para las necesidades de búsqueda de su aplicación, permitiéndole combinar capacidades de búsqueda de texto y vectores.

Obtenga más información sobre Elasticsearch y las posibilidades de la IA generativa .

En esta publicación de blog, es posible que hayamos utilizado herramientas de inteligencia artificial generativa de terceros que pertenecen a sus respectivos dueños y están operadas por ellos. Elastic no tiene control sobre las herramientas de terceros y no somos responsables de su contenido, operación o uso, ni seremos responsables de ninguna pérdida o daño que pueda surgir del uso de dichas herramientas. Tenga cuidado al utilizar herramientas de inteligencia artificial con información personal, sensible o confidencial. Cualquier dato que envíe podrá utilizarse para entrenamiento en inteligencia artificial u otros fines. No hay garantía de que la información que usted proporcione sea segura o confidencial. Debe familiarizarse con las prácticas de privacidad y los términos de uso de cualquier herramienta de inteligencia artificial generativa antes de utilizarla.

Elastic, Elasticsearch y marcas relacionadas son marcas comerciales, logotipos o marcas comerciales registradas de Elasticsearch NV. en Estados Unidos y otros países. Todos los demás nombres de empresas y productos son marcas comerciales, logotipos o marcas comerciales registradas de sus respectivos propietarios.

Supongo que te gusta

Origin blog.csdn.net/UbuntuTouch/article/details/132697222
Recomendado
Clasificación