¿Cómo se utilizan mis datos de almacenamiento en la nube?

Este tutorial lo guía para crear una visualización de sus registros de Google Cloud Storage en Data Studio, lo que le brinda información valiosa sobre el tráfico y los datos de almacenamiento de Google Cloud Storage. Crearemos un panel que muestra las regiones de sus depósitos en comparación con las regiones de sus instancias de Compute y resalta las que están divididas en zonas de manera ineficiente.

Este tutorial se basa en Google Cloud Next Showcase de 2020 para la visualización de datos .

Tabla de contenido

Habilitación de registros de acceso a la nube para su depósito

Para analizar el acceso a sus datos, debe recopilar los datos a través de los registros de Google Cloud Access . Habilite el registro de uso para los depósitos que le gustaría analizar con los siguientes comandos:

  1. Elija el nombre de su depósito, el nombre del depósito de registros y un prefijo para sus registros y establezca variables de entorno para ellos en su terminal:
 BUCKET = "nombre-de-su-cubo" 
LOGS_BUCKET = "su-cubo-de-registros"
LOGS_PREFIX = "su-prefijo-de-registros"

2. Cree un nuevo depósito de registros:

 gsutil mb "gs: // $ {LOGS_BUCKET}" 

3. Otorgue los permisos necesarios:

 gsutil iam ch group: cloud-storage-analytics@google.com: objectCreator "gs: // $ {LOGS_BUCKET}" 

4. Habilite el registro de acceso a la nube para el depósito gs: // your-bucket y almacene los registros en gs: // your-logs-bucket :

 Registro de gsutil configurado en -b "gs: // $ {LOGS_BUCKET}" -o "$ {LOGS_PREFIX}" "gs: // $ {BUCKET}" 

Si habilita el registro para varios depósitos, especifique el mismo $ {LOGS_PREFIX} para todos los depósitos. De lo contrario, el prefijo de registros es el nombre predeterminado del depósito asociado con los registros y será difícil buscarlos en el siguiente paso.

Carga de registros en BigQuery

Siga las instrucciones a continuación para cargar datos en BigQuery. Para obtener más ayuda con los registros de acceso, consulte la documentación de Google Cloud Storage .

  1. Descargue el esquema de uso de almacenamiento:
 wget http://storage.googleapis.com/pub/cloud_storage_usage_schema_v0.json 

2. Crea un conjunto de datos de Bigquery:

 bq mk almacenamientoanálisis 

3. Cargue los datos de uso en BigQuery:

 bq load --skip_leading_rows = 1 storageanalysis.usage "gs: // $ LOGS_BUCKET / $ {LOGS_PREFIX} _usage *" ./cloud_storage_usage_schema_v0.json 

Recuerde limpiar los registros cargados en BigQuery para no volver a cargarlos accidentalmente.

Consulte el apéndice al final de esta publicación para aprender cómo automatizar la carga de registros de acceso cuando se crean con los activadores de funciones de Google Cloud.

Asignación de ubicaciones de depósitos de almacenamiento en la nube

A continuación, cree una tabla de asignación de ubicaciones de depósito a códigos de país para consultar en qué país se encuentra cada depósito más adelante:

  1. Obtenga el nombre y la ubicación de cada depósito y guárdelos en un archivo CSV. Tenga en cuenta que esto solo obtiene los datos de un depósito. Si desea analizar varios depósitos, es posible que desee ejecutar una búsqueda de prefijo (por ejemplo, "gs: // bucket-prefix *") o ejecutar este comando varias veces y seguir agregando al archivo CSV:
 gsutil ls -L -b "gs: // $ {BUCKET}" | 
grep -e "gs: //" -e "Restricción de ubicación" |
awk -F ":" '{printf (NR% 2 == 0)? $ 2 "\ n": $ 2 ","} '|
sed 's / \ /// g; s / [[: blank:]] // g'> bucket_locations.csv

2. Cargue el archivo CSV en una tabla denominada análisis de almacenamiento . bucket_locations :

 bq load --replace --source_format = CSV storageanalysis.bucket_locations ./bucket_locations.csv bucket_name: STRING, bucket_location: STRING 

Estos comandos crean una nueva tabla de BigQuery que se puede usar para buscar la ubicación de cada depósito que encontramos a través de nuestros registros de uso. Para verificar que todo funcionó, ejecute el siguiente comando:

 bq ls almacenamientoanálisis 

Debería ver algo similar a lo siguiente:

 tableId Tipo Etiquetas Partición de tiempo Campos agrupados 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bucket_locations TABLE
TABLA de uso

Asignación de ubicaciones de instancias de Compute Engine

A continuación, queremos ver los registros de solicitudes de las instancias de Compute Engine.

  1. Obtenga un CSV de las IP externas de la instancia de Compute en uso, con una columna vacía adicional para el país , que completaremos en un momento:
 Lista de instancias de gcloud compute --format = "csv (id, name, creationTimestamp, end_time, EXTERNAL_IP, INTERNAL_IP, zone, country)" --filter = "status = RUNNING"> compute_instance_locations.csv 

Nota: Si está analizando un entorno de varios proyectos, es posible que deba ejecutar este comando para todos sus proyectos:

 Lista de instancias de cómputo de gcloud --format = "csv (id, name, creationTimestamp, end_time, EXTERNAL_IP, INTERNAL_IP, zone, country)" --filter = "status = RUNNING" --project = {your-project-id} >> compute_instance_locations.csv 

2. Cargue el CSV en una tabla de BigQuery llamada storageanalysis.compute_instance_locations:

 bq load --replace --source_format = CSV --skip_leading_rows = 1 storageanalysis.compute_instance_locations ./compute_instance_locations.csv resource_id: STRING, resource_name: STRING, start_time: TIMESTAMP, end_time: TIMESTAMP, external_ip: STRING, internal_ip: STRING, , país: STRING 

3. A continuación, asigne la zona de la instancia al código de país ISO de 2 dígitos de su ubicación de instancia de cálculo . Si desea ejecutar una consulta desde la línea de comando, puede usar:

 consulta bq --use_legacy_sql = false '{QUERY_BELOW_HERE}' 

O puede usar la consola de BigQuery . Con cualquiera de los métodos, ejecute la siguiente consulta:

 CREAR TABLA DE TEMPERATURA `mapeos` COMO 
SELECCIONE *
DESDE UNNEST (
[STRUCT ("US" AS abbr, "US%" AS long), ("TW", "ASIA-EAST1%"),
("JP", "ASIA-NORESTE1%"), ("HK", "ASIA-ESTE2%"),
("JP", "ASIA-NORESTE2%"), ("KR", "ASIA-NORESTE3%"),
("IN", "ASIA-SOUTH1%"), ("SG", "ASIA-SOUTHEAST1%"),
("AU", "AUSTRALIA%"), ("FI", "EUROPE-NORTH1%"),
("BE", "EUROPE-WEST1%"), ("GB", "EUROPE-WEST2%"),
("DE", "EUROPA-OESTE3%"), ("NL", "EUROPA-OESTE4%"),
("CH", "EUROPA-OESTE6%"), ("CA", "NORTEAMÉRICA%"),
("BR", "SOUTHAMERICA%")
]);
ACTUALIZAR storageanalysis.compute_instance_locations
SET país = abbr
FROM mapeos
DONDE SUPERIOR (zona) COMO largo;

Consulte el apéndice al final de esta publicación para obtener información sobre cómo hacer esto con las solicitudes de usuarios individuales y cómo automatizar el seguimiento de IP de instancias informáticas efímeras.

Crea una vista de BigQuery para la visualización de DataStudio

A continuación, cree una vista de BigQuery, que le permite actualizar las tablas subyacentes sin tener que volver a generar esta tabla. En otras palabras, reflejará los datos más actualizados de otras tablas.

Puede ejecutar esta consulta desde la consola de BigQuery y hacer clic en "Guardar vista" en los resultados para guardarla en una vista llamada "visualización_vista" o ejecutar lo siguiente en la terminal:

 bq mk --use_legacy_sql = false --description "Vista para visualización de Data Studio" --view '{QUERY_BELOW_HERE}' storageanalysis.visualization_view 

La consulta es la siguiente:

 SELECCIONE 
time_micros AS marca de tiempo,
SUBSTR (zona, 0, longitud (zona) -2) como ubicación_cliente,
compute_instances.country como client_country,
cs_bucket AS bucket_name,
LOWER (bucket_location) AS bucket_location,
IF (LOWER (SUBSTR (bucket_location, 0,2)) = LOWER (SUBSTR (zone, 0,2)), "Colocated", "Non Colocated") AS colocated,
cs_object AS object_name,
sc_bytes AS egress_bytes,
cs_method AS operación,
IF (LOWER (SUBSTR (bucket_location, 0,2)) = LOWER (SUBSTR (zone, 0,2)), sc_bytes / POWER (2,30) * 0.01, sc_bytes / POWER (2,30) * 0.10) AS calculado_cost
DESDE `storage-traffic-project.storageanalysis.usage`
LEFT JOIN `storage-traffic-project.storageanalysis.bucket_locations`
ON cs_bucket = bucket_name
LEFT JOIN `storage-traffic-project.storageanalysis.compute_instance_locations` AS compute_instances
ON compute_instances.external_ip = c_ip AND compute_instances.start_time <TIMESTAMP_MICROS (time_micros) AND (TIMESTAMP_MICROS (time_micros) <compute_instances.end_time OR compute_instances.end_time IS NULL)
DONDE cs_method COMO "GET" Y cs_object NO COMO "" Y cs_object NO ES NULL Y la zona NO ES NULL;

Conexión de datos a Data Studio

  1. Abra el panel de Data Studio , que contiene datos simulados.
  2. Haga clic en el icono "Hacer una copia de este informe" en la parte superior.

3. En "Nueva fuente de datos", haga clic en el menú desplegable y luego haga clic en "Crear nueva fuente de datos" (también puede dejarla sin cambios si desea utilizar los datos simulados en la plantilla).

4. Elija "BigQuery" como conector.

5. Navegue hasta la vista que acaba de crear, selecciónela y luego haga clic en "Conectar" en la parte superior derecha.

6. Haga clic en "Conectar", luego haga clic en "Agregar al informe", luego haga clic en "Copiar informe".

Conclusiones

Gracias por tomarse el tiempo para leer este instructivo y aprender cómo puede usar Cloud Storage, BigQuery y DataStudio para obtener información valiosa a través de visualizaciones de registros de solicitudes.

¿Listo para dar el siguiente paso?

Apéndice

A.1: Automatizar el seguimiento de IP para instancias de motor de cálculo

Las direcciones IP externas de la instancia de Compute Engine se asignan al inicio y se desasignan cuando se apaga. Una vez que se cierra o borra una instancia de Compute Engine, la IP externa asignada se desasigna y otra instancia puede reutilizarla. Los registros de acceso de Cloud Storage rastrean la IP externa utilizada, pero no la instancia específica de Compute Engine asociada a ella. Debes realizar un seguimiento de la asignación y desasignación de IP durante la vida útil de tus instancias de Compute Engine.

Para automatizar el seguimiento de IP para las instancias de Compute Engine, use la función Supervisar cambios de activos de la API de inventario de activos de Cloud, que rastrea la información histórica de los metadatos de recursos y puede informarnos cuando se producen cambios mediante Cloud Pub / Sub. Usaremos Cloud Functions para registrar las actualizaciones de IP provenientes del feed de Pub / Sub en BigQuery usando la misma tabla creada anteriormente ( storageanalysis.compute_instance_locations ).

  1. Habilite la API de Resource Manager para su proyecto siguiendo este enlace .
  2. Crea un tema de Pub / Sub para asociar un activador de Cloud Function:
 Los temas de gcloud pubsub crean compute_instance_updates 

3. Cree un feed de inventario de activos para enviar actualizaciones al tema de Pub / Sub compute_instance_updates :

 Los feeds de activos de gcloud crean feed-name --project = "{your-project-id}" - content-type = "resource" --asset-types = "compute.googleapis.com/Instance" --pubsub-topic = " proyectos / {id-de-tu-proyecto} / topics / compute_instance_updates " 

A continuación, crearemos una función de nube para procesar eventos del tema de Pub / Sub compute_instance_updates .

  1. Desde la consola de Cloud Functions , haga clic en "Crear función".
  2. Nombra la función "compute_instance_updates_function".
  3. En el menú desplegable "Activador", seleccione "Cloud Pub / Sub", luego seleccione el tema "compute_instance_updates" del menú desplegable que aparece.
  4. Haga clic en "Guardar" y luego haga clic en "Siguiente"
  5. Seleccione Python 3.7 como tiempo de ejecución.
  6. Seleccione el código fuente como "ZIP de Cloud Storage".
  7. Para "Ubicación de almacenamiento en la nube", ingrese "gs: //storage-traffic-project/compute_instance_updates_function.zip".
  8. Puede descargar el archivo zip para ver la fuente de la función de nube.
  9. Para "Función a ejecutar", ingrese "handle_asset_event".
  10. Haga clic en "Implementar" para implementar la función.

Cuando se crean, inician, apagan o eliminan instancias de Compute Engine, la Cloud Function implementada hará un seguimiento de cuándo se asignan y desasignan las IP externas desde las instancias de Compute. Con esta información, BigQuery puede asociarse con una instancia de Compute Engine en los registros de acceso de Cloud Storage en función de cuándo se asignó la IP a esa instancia.

Para obtener información adicional, consulte:

A.2: Automatizar la carga de registros de acceso en BigQuery

El tutorial describe cómo cargar manualmente los registros de solicitudes en la tabla storagenalysis.usage. Para automatizar este proceso, debes usar un activador de almacenamiento de funciones de la nube basado en eventos de objetos.

A continuación, crearemos una función de nube para procesar eventos para el depósito de registros de Cloud Storage cuando se creen nuevos objetos.

  1. Desde la consola de Cloud Functions , haga clic en "Crear función".
  2. Nombra la función "función_de_almacenamiento_logs_updates".
  3. En el menú desplegable "Activador", seleccione "Almacenamiento en la nube", luego seleccione el evento "Finalizar / Crear" del menú desplegable "Tipo de evento" que aparece y el depósito de registros en "Depósito" que almacena los registros de acceso.
  4. Haga clic en "Guardar" y luego haga clic en "Siguiente"
  5. Seleccione Node.js 10 como tiempo de ejecución.
  6. Seleccione el código fuente como "ZIP de Cloud Storage".
  7. Para "Ubicación de Cloud Storage", ingrese "gs: // storage-traffic-project / access_logs_loader.zip".
  8. Puede descargar el archivo zip para ver la fuente de la función de nube.
  9. Para "Función a ejecutar", ingrese "processUsageUpdate".
  10. Haga clic en "Implementar" para implementar la función.

A.3: Comprensión de las solicitudes de usuarios individuales

Otra forma de comprender las solicitudes de los clientes es determinar el país donde se accedió a sus datos públicos utilizando el conjunto de datos de IP MaxMind para geolocalización. Para ello, se registra para una cuenta de MaxMind aquí . Una vez que haya iniciado sesión, navegue hasta "Descargar archivos" en "GeoIP2 / GeoLite2" a la izquierda. Haga clic en los enlaces "Descargar ZIP" para "GeoLite2 City: Formato CSV" y extraiga el archivo ZIP.

Para obtener la ubicación del usuario que solicita sus datos, busque la ubicación de la dirección IP que accede a los datos. Puede hacer esto mediante una consulta de BigQuery en la base de datos MaxMind GeoIP que acabamos de descargar. Para obtener información más detallada, consulte Geolocalización con BigQuery .

 bq load -source_format = CSV - autodetect storageanalysis.ipv6_city_locations GeoLite2-City-Locations-en.csv 
bq load -source_format = CSV - autodetección análisis de almacenamiento.ipv6_city_blocks GeoLite2-City-Blocks-IPv6.csv
bq load -source_format = CSV - autodetect storageanalysis.city_locations

Finalmente, queremos agregar el acceso a los datos en grupos de tiempo con la misma ubicación de origen / destino. Nuestra consulta final de BigQuery se ve así:

 SELECT time_block * 600 AS hora, país, región, ingreso, egreso, solicitudes DESDE ( 
SELECCIONE
country_name como país,
CAST (FLOOR (time_micros / (1000000 * 600)) AS int64) AS time_block,
SUM (cs_bytes) como ingreso,
SUM (sc_bytes) como salida,
COUNT (cs_bucket) como solicitudes,
bucket_locations.location AS región
DE (
SELECT *, NET.SAFE_IP_FROM_STRING (c_ip) & NET.IP_NET_MASK (16, máscara)
network_bin
FROM storageanalysis.usage, UNNEST (GENERATE_ARRAY (9,128)) máscara
DONDE BYTE_LENGTH (NET.SAFE_IP_FROM_STRING (c_ip)) = 16
)
ÚNETE (SELECCIONAR *
, NET.IP_FROM_STRING (REGEXP_EXTRACT (red, r '(. *) /')) Network_bin
, CAST (REGEXP_EXTRACT (red, r '/(.*)') AS INT64) máscara
DESDE `storageanalysis.ipv6_city_blocks` AS city_blocks
ÚNETE a `storageanalysis.ipv6_city_locations` AS city_locations
USANDO (geoname_id)
)
USANDO (network_bin, mask)
IZQUIERDA COMBINACIÓN EXTERNA
storageanalysis.bucket_locations AS bucket_locations
EN
cs_bucket = bucket_locations.id
GROUP BY country_name, time_block, region
ORDER BY time_block ASC
)

Desde aquí, vuelva a Crear tabla de visualización y continúe.


¿Cómo se utilizan mis datos de almacenamiento en la nube? se publicó originalmente en Google Cloud - Community on Medium, donde las personas continúan la conversación destacando y respondiendo a esta historia.