Análisis de registros y consultas de KQL

Completado

A medida que comenzamos a prestar atención a la confiabilidad de nuestros servicios, necesitaremos formas de realizar un seguimiento de lo bien (o mal) lo están haciendo. A menudo, podemos encontrar esta información en los registros de un servicio, por lo que necesitaremos una herramienta para trabajar con esos registros. Log Analytics es la herramienta que usaremos en Azure para ello. Nos permite consultar estos datos y mostrarlos de forma que resulten útiles para nuestro trabajo de confiabilidad.

El proceso de consulta del análisis de registros consiste en escribir consultas en el lenguaje de consulta de Kusto (KQL). Si alguna vez ha trabajado con cualquier otro lenguaje de consulta (por ejemplo, el Lenguaje de consulta estructurado, que la mayoría de los usuarios conocen por su acrónimo, SQL), no tendrá ningún problema al elegir KQL. Aunque no lo haya hecho, una vez que vea cómo funciona, es probable que las consultas de KQL básicas le resulten fáciles.

Cómo funciona Log Analytics

Veamos cómo funciona todo. Este es un diagrama del funcionamiento de Log Analytics:

Diagram of Log Analytics overview showing data inputs, tables, and sample queries.

Los datos para Log Analytics proceden de una serie de orígenes, incluidos los siguientes:

  • Registros de eventos de Windows
  • syslog en equipos Linux
  • Agentes que se ejecutan en máquinas virtuales
  • Registros personalizados que los usuarios deciden enviar
  • Métricas de recursos de Azure
  • Información de telemetría desde Application Insights

Toda esta información se incluye en tablas, tal y como se denomina en Log Analytics. Cada tabla se puede considerar como una base de datos independiente. Escribirá consultas para extraer la información de las tablas. Para los ejemplos que se mostrarán más adelante en este módulo, se trabajará principalmente con una tabla denominada "solicitudes".

Diagram of Log Analytics overview with requests table highlighted.

Interfaz de Log Analytics

En el gráfico siguiente se muestran las distintas secciones de la interfaz de Log Analytics.

Screenshot of the Log Analytics workspace in the Azure portal.

A la izquierda hay una sección de la pantalla que garantiza que nunca se perderá cuando use Log Analytics. Muestra las tablas con las que está trabajando potencialmente y, si expande una sección, verá una lista de los campos de esa tabla que están disponibles para consultar. Si selecciona cualquiera de los campos o el nombre de la tabla, se copiará en el área de construcción de consultas.

El área de construcción de consultas está en la parte superior. Aquí es donde se especifica una consulta y se ejecuta. Puede proporcionar un período de tiempo para los datos si aún no se ha especificado como parte de la consulta. Es posible guardar las consultas o abrir pestañas adicionales si desea trabajar en varias consultas a la vez.

En la parte inferior de la página hay más información útil. Aquí, Log Analytics mostrará las consultas anteriores que haya ejecutado, lo que podría resultar útil si necesitase volver a algo que ya hubiera especificado anteriormente como, por ejemplo, si estaba trabajando en una consulta, probó algo y tuvo que volver atrás.

Escribir consultas de KQL

KQL es un lenguaje de consulta eficaz. Solo vamos dar unas pinceladas con algunas consultas básicas para que pueda ver lo fácil que es de usar. Más adelante, si quiere profundizar en el uso de algunas de las características más avanzadas (incluida alguna función de aprendizaje automático), puede consultar el tutorial sobre Log Analytics.

Comencemos por escribir una consulta de KQL sencilla. Prácticamente todas las consultas de KQL empiezan por el origen de datos: la tabla que se vaya a consultar. Por lo tanto, si tuviera que consultar datos de una tabla "solicitudes", empezaría con esto en el área de la consulta:

Requests

La siguiente parte de una consulta de KQL es conectar la tabla con la operación que quiere realizar. Use un carácter de barra vertical (la barra horizontal del teclado que suele encontrarse encima de la tecla de barra diagonal) entre el nombre de la tabla y el comando.

Esta es una consulta sencilla para ordenar lo que devuelve la tabla por los 10 principales registros encontrados:

Requests
|top 10

Estos son algunos ejemplos de otros comandos comunes que puede usar en lugar de "los 10 principales":

  • Si desea ver 10 registros aleatorios cualquiera en lugar de los 10 principales (por ejemplo, para ver la estructura de la tabla), puede usar el comando siguiente:

    requests
    |take 10
    
  • Para ver los registros que han llegado durante la última media hora, puede usar esta consulta:

    requests
    |where timestamp > ago(30m)
    
  • Otra tarea común consiste en especificar el orden en el que se devolverán los datos. Este es un ejemplo de una consulta que se ordena por un campo concreto (marca de tiempo) en orden descendente (por ejemplo, los datos más recientes primero):

    requests
    |sort by timestamp desc
    

Al igual que con SQL, puede establecer varias condiciones para especificar qué registros quiere que se devuelvan. Use cláusulas y caracteres de barra vertical adicionales para agregarlos. El carácter de barra vertical separa los comandos para que la salida del primero sea la entrada del comando siguiente. Una sola consulta puede tener cualquier número de comandos.

Este es un ejemplo de una consulta que devuelve todos los registros de código de respuesta 404 (por ejemplo, todos los registros de "página no encontrada" de un servicio web) de los últimos 30 minutos:

requests
|where timestamp > ago(30m)
|where toint(resultCode) == 404

Esta consulta se escribe para maximizar la eficacia. Al seleccionar primero solo los registros de los últimos 30 minutos, se reduce drásticamente la cantidad de registros que la segunda cláusula tiene que recorrer. Si escribió esta consulta en el orden opuesto, primero encontrará todos los códigos 404 desde el inicio del tiempo de los datos y, después, descartará la gran mayoría para dar solo los de la última media hora. Tenga en cuenta siempre el orden de procesamiento cuando escriba consultas con varias condiciones.

Veamos un último ejemplo de consulta antes de pasar más adelante a la eficacia de Log Analytics para mejorar la confiabilidad. Esta es una consulta que muestra un cálculo basado en los datos:

requests
|where timestamp > ago(30m)
|summarize count() by name, URL

La consulta devuelve un resumen de las solicitudes recibidas en la última media hora. Por lo tanto, en un servicio web, es posible que indique que se ha producido una solicitud GET index.html a la URL http://tailwindtraders.com 2875 veces. Hemos dejado aparcado KQL por un momento para ver esta consulta porque está relacionada con las consultas de KQL que usaremos en la siguiente unidad.