Usa la interfaz de supervisión de Cloud Dataflow

Cuando ejecutas tu canalización con el servicio administrado de Cloud Dataflow, puedes ver ese trabajo y cualquier otro mediante la interfaz de usuario de supervisión basada en web de Cloud Dataflow. La interfaz de supervisión te permite interactuar y ver tus trabajos de Cloud Dataflow.

Puedes acceder a la interfaz de supervisión de Cloud Dataflow mediante Google Cloud Platform Console. La interfaz de supervisión te puede mostrar la información siguiente:

  • Una lista de todos los trabajos que están en ejecución por el momento en Cloud Dataflow y los trabajos que se ejecutaron en los últimos 30 días
  • Una representación gráfica de cada canalización
  • Detalles sobre el estado de tu trabajo, ejecución y versión del SDK
  • Vínculos a la información sobre los servicios de Google Cloud Platform en ejecución en tu canalización, como Compute Engine y Cloud Storage.
  • Cualquier error o advertencia que suceda durante un trabajo

Accede a la interfaz de supervisión de Cloud Dataflow

Para acceder a la interfaz de supervisión de Cloud Dataflow, sigue estos pasos:

  1. Accede a GCP Console.
  2. Selecciona tu proyecto de GCP.
  3. Haz clic en el menú en la esquina superior izquierda.
  4. Ve a la sección Macrodatos y haz clic en Dataflow.

Aparecerá una lista de trabajos de Cloud Dataflow junto a su estado. Si no ves ningún trabajo, debes ejecutar un trabajo nuevo. Para saber cómo ejecutar un trabajo, consulta las guías de inicio rápido de Cloud Dataflow.

Una lista de trabajos de Cloud Dataflow con trabajos en los estados en ejecución, con errores y finalizado de manera correcta.
Figura 1: Una lista de trabajos de Cloud Dataflow en GCP Console con trabajos en los estados de En ejecución, Con errores y Finalizado de manera correcta.

Un trabajo puede tener los siguientes estados:

  • : la IU de supervisión aún no ha recibido un estado del servicio Cloud Dataflow.
  • En ejecución: el trabajo se está ejecutando actualmente.
  • No iniciado: el trabajo se crea, pero el sistema necesita algo de tiempo para prepararse antes de iniciarlo.
  • En cola: un trabajo de FlexRS está en cola.
  • Cancelando…: el trabajo se está cancelando.
  • Cancelado: el trabajo cancelado por el usuario.
  • Desviando…: el trabajo se está desviando.
  • Desviado: el usuario desvió el trabajo.
  • Actualizando…: el trabajo se está actualizando.
  • Actualizado: el usuario actualizó el trabajo.
  • Finalizado de manera correcta: el trabajo finalizó correctamente.
  • Con errores: No se pudo completar el trabajo.

Para obtener más información sobre una canalización, selecciona ese trabajo.

Visualiza una canalización

Cuando seleccionas un trabajo de Cloud Dataflow específico, la interfaz de supervisión muestra información detallada sobre la canalización en ese trabajo. Esta información incluye una representación gráfica de tu canalización a medida que se ejecuta en el servicio de Cloud Dataflow, así como un resumen del trabajo, el registro de trabajo y la información detallada en cada paso en la canalización.

Un trabajo de canalización individual en la interfaz de supervisión de Cloud Dataflow.
Figura 2: Trabajo de canalización individual que se muestra en la interfaz de supervisión de Cloud Dataflow.

La interfaz de supervisión de Cloud Dataflow proporciona una representación gráfica de tu canalización: el grafo de ejecución. El grafo de ejecución de una canalización representa cada una de sus transformaciones en la canalización como un cuadro. Cada cuadro contiene el nombre de la transformación y la información sobre el estado del trabajo, que incluye lo siguiente:

  • En ejecución: el paso se está ejecutando actualmente.
  • En cola: el paso en un trabajo de FlexRS está en cola.
  • Finalizado de manera correcta: el paso finalizó con éxito.
  • Detenido: el paso se detuvo porque el trabajo se detuvo.
  • Desconocido: el paso no se pudo completar.
  • Con errores: el paso no se pudo completar.

Grafo de ejecución básico

Código de canalización:

Java: SDK 2.x


  // Read the lines of the input text.
  p.apply("ReadLines", TextIO.read().from(options.getInputFile()))
     // Count the words.
     .apply(new CountWords())
     // Write the formatted word counts to output.
     .apply("WriteCounts", TextIO.write().to(options.getOutput()))
         .to(options.getOutput()));

Python


(p
 # Read the lines of the input text.
 | 'ReadLines' >> beam.io.ReadFromText(options.input)
 # Count the words.
 | CountWords()
 # Write the formatted word counts to output.
 | 'WriteCounts' >> beam.io.WriteToText(options.output))

Java: SDK 1.x


  // Read the lines of the input text.
  p.apply(TextIO.Read.named("ReadLines").from(options.getInput()))
     // Count the words.
     .apply(new CountWords())
     // Write the formatted word counts to output.
     .apply(TextIO.Write.named("WriteCounts")
         .to(options.getOutput())
         .withNumShards(options.getNumShards()));
Grafo de ejecución:

El grafo de ejecución para una canalización de WordCount como se muestra en la interfaz de supervisión de Cloud Dataflow.

Figura 3: Código de canalización para una canalización de WordCount que se muestra en paralelo con el grafo de ejecución resultante en la interfaz de supervisión de Cloud Dataflow.

Transformaciones compuestas

En el grafo de ejecución, las transformaciones compuestas contienen varias subtransformaciones anidadas y son expandibles. Las transformaciones compuestas expandibles se marcan con una flecha en el grafo. Haz clic en la fecha para expandir la transformación y visualizar las subtransformaciones en su interior.

Código de canalización:

Java: SDK 2.x


  // The CountWords Composite Transform
  // inside the WordCount pipeline.

  public static class CountWords
    extends PTransform<PCollection<String>, PCollection<String>> {

    @Override
    public PCollection<String> apply(PCollection<String> lines) {

      // Convert lines of text into individual words.
      PCollection<String> words = lines.apply(
        ParDo.of(new ExtractWordsFn()));

      // Count the number of times each word occurs.
      PCollection<KV<String, Long>> wordCounts =
        words.apply(Count.<String>perElement());

      return wordCounts;
    }
  }

Nota: FormatCounts en la imagen de la derecha no es relevante para este SDK.

Python


# The CountWords Composite Transform inside the WordCount pipeline.
class CountWords(beam.PTransform):

  def expand(self, pcoll):
    return (pcoll
            # Convert lines of text into individual words.
            | 'ExtractWords' >> beam.ParDo(ExtractWordsFn())
            # Count the number of times each word occurs.
            | beam.combiners.Count.PerElement()
            # Format each word and count into a printable string.
            | 'FormatCounts' >> beam.ParDo(FormatCountsFn()))

Java: SDK 1.x


  // The CountWords Composite Transform
  // inside the WordCount pipeline.

  public static class CountWords
    extends PTransform<PCollection<String>, PCollection<String>> {

    @Override
    public PCollection<String> apply(PCollection<String> lines) {

      // Convert lines of text into individual words.
      PCollection<String> words = lines.apply(
        ParDo.of(new ExtractWordsFn()));

      // Count the number of times each word occurs.
      PCollection<KV<String, Long>> wordCounts =
        words.apply(Count.<String>perElement());

      // Format each word and count into a printable string.
      PCollection<String> results = wordCounts.apply(
        ParDo.of(new FormatCountsFn()));

      return results;
    }
  }
Grafo de ejecución:

El grafo de ejecución para una canalización de WordCount con la transformación CountWords expandida a fin de mostrar sus transformaciones de componentes.

Figura 4: El código de canalización para los pasos secundarios de la transformación CountWords se muestra en paralelo con el grafo de ejecución expandido para toda la canalización.

Transforma nombres

Cloud Dataflow tiene diversas maneras de obtener el nombre de transformación que se muestra en el grafo de ejecución de supervisión:

Java: SDK 2.x

  • Cloud Dataflow puede usar un nombre que asignas cuando aplicas tu transformación. El primer argumento que proporcionas al método apply será el nombre de tu transformación.
  • Cloud Dataflow puede deducir el nombre de la transformación, ya sea desde el nombre de clase (si compilaste una transformación personalizada) o el nombre del objeto de tu función DoFn (si usas una transformación básica como ParDo).

Python

  • Cloud Dataflow puede usar un nombre que asignas cuando aplicas tu transformación. Puedes establecer el nombre de transformación si especificas el argumento label de la transformación.
  • Cloud Dataflow puede deducir el nombre de la transformación, ya sea desde el nombre de clase (si compilaste una transformación personalizada) o el nombre del objeto de tu función DoFn (si usas una transformación básica como ParDo).

Java: SDK 1.x

  • Cloud Dataflow puede usar un nombre que asignas cuando aplicas tu transformación. El primer argumento que proporcionas al método apply será el nombre de tu transformación.
  • Cloud Dataflow puede deducir el nombre de la transformación, ya sea desde el nombre de clase (si compilaste una transformación personalizada) o el nombre del objeto de tu función DoFn (si usas una transformación básica como ParDo).

Tiempo de real transcurrido

Cuando haces clic en un paso, aparece la métrica Tiempo. El tiempo proporciona el tiempo aproximado total empleado en todos los subprocesos en todos los trabajadores en las siguientes acciones:

  • Inicializando el paso
  • Procesando datos
  • Redistribuyendo datos
  • Finalizando el paso

En el caso de los pasos compuestos, el tiempo indica la suma de tiempo empleado en los pasos que los integran. Esta estimación puede ayudarte a identificar pasos lentos y a diagnosticar a qué parte de tu canalización le lleva más tiempo del que debería.

Puedes ver el tiempo que le toma a un paso en tu canalización ejecutarse.
Figura 5: La métrica Tiempo puede ayudarte a garantizar que tu canalización se ejecute de manera eficaz.

Consulta Explicación del tiempo en las canalizaciones de Cloud Dataflow para ver un ejemplo que usa la métrica Tiempo (anteriormente denominada Tiempo total de ejecución) para investigar cuál es la causa de que una canalización tarde más en ejecutarse de lo esperado.

Métricas de entradas complementarias

Las Métricas de entradas complementarias te muestran la forma en que tus patrones y algoritmos de acceso de entradas complementarias afectan el rendimiento de tu canalización. Cuando tu canalización usa una entrada complementaria, Cloud Dataflow escribe la colección en una capa persistente, como un disco, y tus transformaciones leen desde esta colección persistente. Estas operaciones de lectura y escritura afectan el tiempo de ejecución de tu trabajo.

La interfaz de supervisión de Cloud Dataflow muestra las métricas de entradas complementarias cuando seleccionas una transformación que crea o consume una colección de entrada complementaria. Puedes ver las métricas en la sección Métricas de entradas complementarias de la pestaña Paso.

Transformaciones que crean una entrada complementaria

Si la transformación seleccionada crea una colección de entrada complementaria, la sección Métricas de entradas complementarias muestra el nombre de la colección, junto con las métricas siguientes:

  • Time spent writing: el tiempo de ejecución empleado para escribir la colección de entradas complementarias.
  • Bytes written: (Bytes escritos) la cantidad total de bytes escritos en la colección de entradas complementarias.
  • Tiempo y bytes leídos de entradas complementarias: una tabla que contiene métricas adicionales para todas las transformaciones que consumen la colección de entradas complementarias llamada consumidores de entradas complementarias.

La tabla de tiempo y bytes leídos de las entradas complementarias contiene la información siguiente para cada consumidor de entrada complementaria:

  • Consumidor de entradas complementarias: nombre de la transformación del consumidor de entradas complementarias
  • Tiempo dedicado a la escritura: tiempo que este consumidor emplea en leer la colección de entradas complementarias.
  • Bytes leídos: cantidad de bytes que este consumidor lee de la colección de entradas complementarias.

Si tu canalización tiene una transformación compuesta que crea una entrada complementaria, expande la transformación compuesta hasta que veas la subtransformación específica que crea la entrada complementaria. Luego, selecciona esa subtransformación para ver la sección Métricas de entradas complementarias.

En la figura 6, se muestran las métricas de entradas complementarias para una transformación que crea una colección de entrada complementaria.

Puedes seleccionar que la subtransformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 6: El grafo de ejecución tiene una transformación compuesta expandida (MakeMapView). Se selecciona la subtransformación que crea la entrada complementaria (CreateDataflowView) y las métricas de entradas complementarias son visibles en la pestaña Paso .

Transformaciones que consumen una o más entradas complementarias

Si la transformación seleccionada consume una o más entradas complementarias, la sección de las Métricas de entradas complementarias muestra la tabla Tiempo y bytes leídos de las entradas complementarias. Esta tabla contiene la información siguiente para cada colección de entrada complementaria:

  • Colección de entrada complementaria: nombre de la colección de la entrada complementaria.
  • Tiempo dedicado a la escritura: tiempo que la transformación emplea en leer la colección de entradas complementarias.
  • Bytes leídos: cantidad de bytes que la transformación lee de la colección de entradas complementarias.

Si tu canalización tiene una transformación compuesta que lee una entrada complementaria, expande la transformación compuesta hasta que veas la subtransformación específica lee la entrada complementaria. Luego, selecciona esa subtransformación para ver la sección Métricas de entradas complementarias.

En la figura 7, se muestran las métricas de entradas complementarias para una transformación que lee desde una colección de entrada complementaria.

Puedes seleccionar que la transformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 7: La transformación JoinBothCollections lee desde la colección de entrada complementaria. JoinBothCollections se selecciona en el grafo de ejecución y las métricas de entradas complementarias son visibles en la pestaña Paso .

Identifica los problemas de rendimiento de la entrada complementaria

Reiteración es un problema de rendimiento de entrada complementaria común. Si tu entrada complementaria PCollection es demasiado grande, los trabajadores no pueden almacenar en caché toda la colección en la memoria. En consecuencia, los trabajadores deben leer repetidas veces desde la colección de entrada complementaria persistente.

En la figura 8, las métricas de entradas complementarias muestran que el total de bytes leídos desde la colección de entrada complementaria son mucho más grandes que el tamaño de la colección, el total de bytes escritos.

Puedes seleccionar que la transformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 8: Un ejemplo de reiteración. La colección de entrada complementaria es de 563 MB y la suma de bytes leídos cuando se consumen las transformaciones es de casi 12 GB.

Si deseas mejorar el rendimiento de esta canalización, vuelve a diseñar tu algoritmo para evitar la iteración o la recuperación de los datos de la entrada complementaria. En el ejemplo siguiente, la canalización crea el producto cartesiano de dos colecciones. El algoritmo itera a través de toda la colección de entrada complementaria para cada elemento de la colección principal. Puedes mejorar el patrón de acceso de la canalización si agrupas en lotes varios elementos de la colección principal. Este cambio reduce la cantidad de veces que los trabajadores deben volver a leer la colección de entrada complementaria.

Se puede generar otro problema de rendimiento común si tu canalización realiza una unión mediante la aplicación de un ParDo con una o más entradas complementarias grandes. En este caso, los trabajadores emplearon un alto porcentaje del tiempo de ejecución de la unión en leer las colecciones de entradas complementarias.

En la figura 9, se muestra un ejemplo de las métricas de entradas complementarias para este problema:

Puedes seleccionar que la transformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 9: La transformación JoinBothCollections tiene un tiempo de ejecución total de 18 min 31 s. Los trabajadores emplean la mayoría del tiempo de ejecución (10 min 3 s) en leer desde la colección de entrada complementaria de 10 GB.

Si deseas mejorar el rendimiento de esta canalización, usa CoGroupByKey, en lugar de las entradas complementarias.

Latencia del sistema y actualidad de los datos

En el panel Resumen del trabajo, puedes ver los grafos que proporcionan las métricas de latencia del sistema y actualidad de los datos durante las últimas 6 horas. Se realizan muestreo de datos cada 60 segundos. Luego del muestreo, los datos no son visibles durante un máximo de 180 segundos.

La latencia del sistema es la duración máxima actual que un dato ha esperado el procesamiento. Esta métrica indica cuánto tiempo espera un elemento dentro de cualquier fuente en la canalización, en segundos. La duración máxima se ajusta después del procesamiento. Los siguientes casos son consideraciones adicionales:

  • Si hay varias fuentes y receptores, la latencia del sistema es la mayor cantidad de tiempo que un elemento espera dentro de una fuente antes de que se escriba en todos los receptores.
  • Si una fuente no proporciona un valor de cuánto tiempo espera un elemento dentro de una fuente y el elemento no tiene metadatos para definir su hora del evento, entonces la latencia del sistema se calcula a partir del momento en que la canalización recibe el elemento por primera vez.

La actualización de datos es la cantidad de tiempo desde la marca de tiempo del evento del elemento más reciente de datos procesados por completo. Si hay varias ramas y receptores en la canalización con datos que fluyen a través de diferentes rutas, la actualidad de los datos es la marca de tiempo de evento máxima de todos los elementos.

Cada paso de tu canalización tiene una marca de agua de los datos de salida. Una marca de agua de los datos de salida de T indica que se han procesado todos los elementos con una hora del evento anterior a T. La marca de agua de los datos de salida dependerá de la marca de agua de los datos de entrada más antigua de todos los procesamientos ascendentes. Si aún no se han procesado algunos datos de entrada, la marca de agua de salida no se incluye, lo que afecta la actualidad de los datos.

Si haces clic en el vínculo Crear alerta debajo de los grafos, se abre la página Crear nueva política de alertas del panel de Stackdriver Monitoring.

Ver grafos con métricas de latencia del sistema y de actualidad de datos.
Figura 10: Ve los grafos con métricas de latencia del sistema y actualidad de datos.

Ajuste de escala automático

En el panel Resumen del trabajo, puedes ver la información de tu trabajo de ajuste de escala automático. El servicio de Cloud Dataflow selecciona automáticamente el número de instancias de trabajador necesario para ejecutar tu trabajo de ajuste de escala automático. El número de instancias de trabajador puede cambiar con el tiempo de acuerdo con las necesidades de tu trabajo.

Puedes ver el número de instancias de trabajador que usó tu canalización de ajuste de escala automático, así como otra información en la pestaña “Resumen”.

Para ver el historial de los cambios del ajuste de escala automático, haz clic en el vínculo Ver más historial. Se mostrará una ventana emergente con la información sobre el historial de trabajadores de tu canalización.

Para ver el historial de los cambios del ajuste de escala automático, haz clic en el vínculo “Ver más historial”.

Nota: Puedes ver los detalles del ajuste de escala automático sobre canalizaciones de transmisión que se ejecutaron o actualizaron a partir del 12 de diciembre de 2016. Si tu canalización se ejecutó o se actualizó por última vez antes del 12 de diciembre, solo podrás ver los detalles del ajuste de escala automático después de que actualices tu canalización.

Informe de errores

La interfaz de Stackdriver Error Reporting agrega y muestra los errores que se producen en tus canalizaciones.

El informe de error incluye la información siguiente:

  • Una lista de errores con los mensajes de error
  • La cantidad de veces que sucedió cada error.
  • Un histograma que indica cuándo sucedió cada error.
  • La hora en que sucedió el error más reciente.

Para ver el informe del error de tu canalización, haz clic en el menú Registros (Logs) sobre el grafo de la canalización y, a continuación, en la pestaña Seguimientos de pila (Stack Traces) debajo del grafo de la canalización. En la interfaz de supervisión de Cloud Dataflow, verás un resumen de cada error registrado y la cantidad de veces que sucedió.

Un un resumen de cada error registrado y la cantidad de veces que sucedió.

Para ver más información sobre los errores, haz clic en un resumen de errores. Se te redireccionará a la interfaz de Stackdriver Error Reporting.

Obtén más información sobre los errores en la interfaz de Stackdriver Error Reporting.

La interfaz de Stackdriver Error Reporting ofrece funcionalidades adicionales. Consulta Visualiza errores para obtener más información sobre los errores que generan tus canalizaciones.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.