Les données de séries temporelles constituent un atout précieux que vous pouvez exploiter pour différentes applications, en particulier dans les domaines de la surveillance, de l'analyse des tendances et du machine learning. Vous pouvez générer des données de séries temporelles à partir de l'infrastructure de serveurs, du code d'application ou d'autres sources. OpenTSDB est capable de collecter et de conserver de grandes quantités de données de séries temporelles avec un degré élevé de précision.
Ce guide montre aux ingénieurs et architectes logiciels comment créer une couche de collecte évolutive pour des données de séries temporelles à l'aide de GKE. Il montre également comment utiliser les données collectées à l'aide de Bigtable. Dans ce guide, nous partons du principe que vous maîtrisez Kubernetes et Bigtable.
Le diagramme suivant illustre l'architecture générale de ce guide :
Le schéma précédent montre plusieurs sources de données de séries temporelles, telles que les événements IoT et les métriques système, stockées dans Bigtable à l'aide d'OpenTSDB déployé sur GKE.
Objectifs
- Créez des images de conteneurs utilisées dans ce guide à l'aide de Cloud Build.
- Gérez ces images de conteneurs avec Artifact Registry.
- Créer une instance Bigtable
- Créer un cluster GKE
- Déployer OpenTSDB sur votre cluster GKE
- Envoyer des métriques de séries temporelles à OpenTSDB
- Visualiser ces métriques à l'aide d'OpenTSDB et de Grafana
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Bigtable, Bigtable Admin, GKE, Compute Engine, Cloud Build, and Artifact Registry.
Dans la console Google Cloud, accédez à la page d'accueil.
Notez l'ID du projet, car il sera utilisé dans une étape ultérieure.
-
Dans la console Google Cloud, activez Cloud Shell.
Créer une instance Bigtable
Ce guide utilise Bigtable pour stocker les données de séries temporelles que vous collectez. Vous devez donc créer une instance Bigtable.
Bigtable est un magasin de type clé/colonne large qui fonctionne parfaitement pour les données de séries temporelles. Bigtable est compatible avec l'API HBase. Vous pouvez donc utiliser un logiciel conçu pour fonctionner avec Apache HBase, tel qu'OpenTSDB. Pour plus d'informations sur le schéma HBase utilisé par OpenTSDB, consultez la page Schéma HBase.
Un composant clé d'OpenTSDB est le client AsyncHBase, qui lui permet d'effectuer des écritures groupées sur HBase d'une manière totalement asynchrone, non bloquante et sécurisée. Lorsque vous utilisez OpenTSDB avec Bigtable, AsyncHBase est mis en œuvre en tant que client AsyncBigtable.
Ce guide utilise une instance Bigtable avec un cluster à nœud unique. Lorsque vous passez à un environnement de production, pensez à utiliser des instances Bigtable avec des clusters plus importants. Pour en savoir plus sur le choix de la taille d'un cluster, consultez la page Comprendre les performances de Bigtable.
Dans Cloud Shell, définissez les variables d'environnement de votre zone Google Cloud dans lesquelles vous allez créer votre cluster Bigtable et votre cluster GKE, ainsi que l'identifiant d'instance de votre cluster Bigtable :
export BIGTABLE_INSTANCE_ID=BIGTABLE_INSTANCE_ID export ZONE=ZONE
Remplacez les éléments suivants :
BIGTABLE_INSTANCE_ID
: identifiant de votre instance Bigtable.ZONE
: zone dans laquelle votre cluster Bigtable et votre cluster GKE seront créés.
La commande doit ressembler à l'exemple suivant :
export BIGTABLE_INSTANCE_ID=bt-opentsdb export ZONE=us-central1-f
Créez l'instance Bigtable :
gcloud bigtable instances create ${BIGTABLE_INSTANCE_ID} \ --cluster-config=id=${BIGTABLE_INSTANCE_ID}-${ZONE},zone=${ZONE},nodes=1 \ --display-name=OpenTSDB
Créer les images utilisées pour déployer et tester OpenTSDB
Pour déployer et illustrer OpenTSDB avec un backend de stockage Bigtable, ce guide utilise une série d'images de conteneurs Docker déployées sur GKE. Vous pouvez créer plusieurs de ces images à l'aide du code d'un dépôt GitHub associé à Cloud Build. Lors du déploiement de l'infrastructure sur GKE, un dépôt de conteneurs est utilisé. Dans ce guide, vous gérez les images de conteneurs avec Artifact Registry.
Dans Cloud Shell, définissez les variables d'environnement de votre zone Google Cloud dans laquelle vous allez créer votre dépôt Artifact Registry :
export PROJECT_ID=PROJECT_ID export REGION=REGION export AR_REPO=AR_REPO
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projetREGION
: région dans laquelle votre dépôt Artifact Registry sera crééAR_REPO
: nom de votre dépôt Artifact Registry
La commande doit ressembler à l'exemple suivant :
export PROJECT_ID=bt-opentsdb-project-id export REGION=us-central1 export AR_REPO=opentsdb-bt-repo
Créer un dépôt Artifact Registry :
gcloud artifacts repositories create ${AR_REPO} \ --repository-format=docker \ --location=${REGION} \ --description="OpenTSDB on bigtable container images"
Créer et gérer les images utilisées pour déployer et illustrer OpenTSDB
Deux images de conteneur Docker sont utilisées dans ce guide. La première image est utilisée à deux fins : pour effectuer la configuration unique de la base de données Bigtable pour OpenTSDB, et pour déployer les conteneurs de service de lecture et d'écriture pour le déploiement OpenTSDB. La deuxième image permet de générer des exemples de données de métriques afin de démontrer votre déploiement OpenTSDB.
Lorsque vous envoyez la tâche de compilation d'images de conteneurs à Cloud Build, vous ajoutez un tag aux images afin qu'elles soient stockées dans Artifact Registry après leur création.
Dans Cloud Shell, clonez le dépôt GitHub contenant le code associé :
git clone https://github.com/GoogleCloudPlatform/opentsdb-bigtable.git
Accédez au répertoire de l'exemple de code :
cd opentsdb-bigtable
Définissez les variables d'environnement pour l'image de serveur OpenTSDB qui utilise Bigtable comme backend de stockage :
export SERVER_IMAGE_NAME=opentsdb-server-bigtable export SERVER_IMAGE_TAG=2.4.1
Générez l'image à l'aide de Cloud Build :
gcloud builds submit \ --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO}/${SERVER_IMAGE_NAME}:${SERVER_IMAGE_TAG} \ build
Étant donné que vous avez ajouté des tags à l'image de manière appropriée, une fois la compilation terminée, l'image sera gérée par votre dépôt Artifact Registry.
Définissez les variables d'environnement pour l'image de génération de données de série temporelle de démonstration :
export GEN_IMAGE_NAME=opentsdb-timeseries-generate export GEN_IMAGE_TAG=0.1
Générez l'image à l'aide de Cloud Build :
cd generate-ts ./build-cloud.sh cd ..
Créer un cluster GKE
GKE fournit un environnement Kubernetes géré. Après avoir créé un cluster GKE, vous pouvez y déployer des pods Kubernetes. Dans ce guide, nous allons exécuter OpenTSDB en utilisant des pods GKE et Kubernetes.
OpenTSDB sépare sa couche de stockage de sa couche d'application, ce qui lui permet d'être déployé simultanément sur plusieurs instances. Grâce à ce mode d'exécution parallèle, OpenTSDB peut gérer une grande quantité de données de séries temporelles.
Dans Cloud Shell, définissez les variables d'environnement pour la zone Google Cloud dans laquelle vous allez créer votre cluster Bigtable et votre cluster GKE, ainsi que le nom, le type de nœud et la version de votre cluster GKE :
export GKE_CLUSTER_NAME=GKE_CLUSTER_NAME export GKE_VERSION=1.20 export GKE_NODE_TYPE=n1-standard-4
Remplacez
GKE_CLUSTER_NAME
par le nom de votre cluster GKE.La commande doit ressembler à l'exemple suivant :
export GKE_CLUSTER_NAME=gke-opentsdb export GKE_VERSION=1.20 export GKE_NODE_TYPE=n1-standard-4
Créez un cluster GKE :
gcloud container clusters create ${GKE_CLUSTER_NAME} \ --zone=${ZONE} \ --cluster-version=${GKE_VERSION} \ --machine-type ${GKE_NODE_TYPE} \ --scopes "https://www.googleapis.com/auth/cloud-platform"
Cette opération peut durer quelques minutes. L'ajout des champs d'application à votre cluster GKE permet à votre conteneur OpenTSDB d'interagir avec Bigtable et Container Registry.
Le reste de ce guide utilise les conteneurs que vous venez de créer et qui sont gérés par Artifact Registry. Les scripts Dockerfile et
entrypoint
permettant de créer le conteneur se trouvent dans le dossierbuild
du dépôt du guide.Obtenez les identifiants afin de pouvoir vous connecter à votre cluster GKE :
gcloud container clusters get-credentials ${GKE_CLUSTER_NAME} --zone ${ZONE}
Créer un ConfigMap avec les détails de configuration
Kubernetes se sert de ConfigMap pour dissocier les détails de la configuration de l'image de conteneur afin de rendre les applications plus portables. La configuration d'OpenTSDB est spécifiée dans le fichier opentsdb.conf
. Un fichier ConfigMap contenant le fichier opentsdb.conf
est fourni avec l'exemple de code.
Dans cette étape et les suivantes, vous allez utiliser l'utilitaire GNU envsubst
pour remplacer les espaces réservés des variables d'environnement dans les fichiers de modèle YAML par les valeurs respectives de votre déploiement.
Créez un ConfigMap à partir du fichier
opentsdb-config.yaml
mis à jour :envsubst < configmaps/opentsdb-config.yaml.tpl | kubectl create -f -
Créer des tables OpenTSDB dans Bigtable
Avant de pouvoir lire ou écrire des données avec OpenTSDB, vous devez créer des tables dans Bigtable pour stocker ces données. Pour créer les tables, vous devez créer une tâche Kubernetes.
Dans Cloud Shell, lancez la tâche :
envsubst < jobs/opentsdb-init.yaml.tpl | kubectl create -f -
Cette tâche peut durer une minute ou plus. Vérifiez que la tâche a bien été exécutée :
kubectl describe jobs
Le résultat montre que l'exécution d'une tâche a réussi lorsque
Pods Statuses
affiche1 Succeeded
.Examinez les journaux de la tâche de création de table :
OPENTSDB_INIT_POD=$(kubectl get pods --selector=job-name=opentsdb-init \ --output=jsonpath={.items..metadata.name}) kubectl logs $OPENTSDB_INIT_POD
Le résultat ressemble à ce qui suit :
create 'tsdb-uid', {NAME => 'id', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}, {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 3.2730 seconds create 'tsdb', {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 1.8440 seconds create 'tsdb-tree', {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 1.5420 seconds create 'tsdb-meta', {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 1.9910 seconds
Le résultat répertorie chaque table créée. Cette tâche exécute plusieurs commandes de création de table, chacune au format
create TABLE_NAME
. Les tables sont créées correctement lorsque vous obtenez une sortie au format0 row(s) in TIME seconds
.TABLE_NAME
: nom de la table créée par la tâche.TIME
: délai nécessaire à la création de la table
Modèle de données
Les tables que vous avez créées stockent des points de données à partir d'OpenTSDB. Lors d'une prochaine étape, vous écrirez des données de séries temporelles dans ces tables. Les points de données de séries temporelles sont organisés et stockés comme suit :
Champ | Obligatoire | Description | Exemple |
---|---|---|---|
metric
|
Requis | Élément mesuré : la clé par défaut |
sys.cpu.user
|
timestamp
|
Requis | Date de l'epoch Unix de la mesure | 1497561091 |
tags
|
Veuillez indiquer au moins un tag. | Qualifie la mesure à des fins de requêtes |
hostname=www
cpu=0
env=prod
|
value
|
Requis | Valeur de mesure | 89,3 |
La métrique, l'horodatage et les tags (clé et valeur du tag) forment la clé de ligne. L'horodatage est normalisé à une heure, pour garantir qu'une ligne ne contient pas trop de points de données. Pour en savoir plus, consultez la page Schéma HBase.
Déployer OpenTSDB
Le schéma suivant illustre l'architecture de déploiement d'OpenTSTB avec ses services exécutés sur GKE et avec Bigtable comme backend de stockage :
Dans ce guide, nous utilisons deux déploiements Kubernetes OpenTSDB : l'un d'entre eux envoie des métriques à Bigtable et l'autre effectue des lectures de Bigtable. L'utilisation de deux déploiements vise à éviter que les lectures et les écritures de longue durée ne se bloquent mutuellement. Les pods de chaque déploiement utilisent le même conteneur.
OpenTSDB fournit un daemon nommé tsd
qui s'exécute dans chaque conteneur. Un processus tsd
peut gérer à lui seul un débit élevé d'événements par seconde. Afin de répartir la charge, chaque déploiement de ce guide crée trois instances dupliquées des pods de lecture et d'écriture.
Dans Cloud Shell, créez un déploiement pour écrire des métriques :
envsubst < deployments/opentsdb-write.yaml.tpl | kubectl create -f -
Les informations de configuration associées au déploiement en écriture se trouvent dans le fichier
opentsdb-write.yaml.tpl
du dossierdeployments
du dépôt du guide.Créer un déploiement pour lire les métriques
envsubst < deployments/opentsdb-read.yaml.tpl | kubectl create -f -
Les informations de configuration associées au déploiement en lecture se trouvent dans le fichier
opentsdb-read.yaml.tpl
du dossierdeployments
du dépôt du guide.
Pour augmenter le nombre de pods tsd
en cours d'exécution dans un déploiement de production, vous pouvez procéder manuellement ou à l'aide de la fonctionnalité d'autoscaling de Kubernetes. De même, l'augmentation du nombre d'instances présentes dans votre cluster GKE peut s'effectuer manuellement ou via l'autoscaler de cluster.
Créer les services OpenTSDB
Afin de fournir une connectivité réseau cohérente aux déploiements, vous créez deux services Kubernetes : l'un d'entre eux écrit des métriques dans OpenTSDB et l'autre les lit.
Dans Cloud Shell, créez le service permettant d'écrire des métriques :
kubectl create -f services/opentsdb-write.yaml
Les informations de configuration associées au service d'écriture de métriques sont contenues dans le fichier
opentsdb-write.yaml
situé dans le dossierservices
du dépôt du guide. Ce service est créé dans votre cluster Kubernetes, et il est accessible par d'autres services exécutés dans votre cluster.Créez le service de lecture de métriques :
kubectl create -f services/opentsdb-read.yaml
Les informations de configuration associées au service de lecture de métriques sont contenues dans le fichier
opentsdb-read.yaml
situé dans le dossierservices
du dépôt du guide.
Écrire des données de séries temporelles dans OpenTSDB
Il existe plusieurs mécanismes pour écrire des données dans OpenTSDB. Après avoir défini les points de terminaison de service, vous pouvez demander aux processus de commencer à écrire des données sur ceux-ci. Ce guide déploie un service Python qui émet des données de série temporelle illustrant deux métriques : Utilisation de la mémoire du cluster (memory_usage_gauge
) et Utilisation du processeur du cluster (cpu_node_utilization_gauge
).
Dans Cloud Shell, déployez le générateur de métriques de séries temporelles sur votre cluster :
envsubst < deployments/generate.yaml.tpl | kubectl create -f -
Examiner les exemples de données de séries temporelles avec OpenTSDB
Vous pouvez interroger des métriques de séries temporelles à l'aide du point de terminaison du service opentsdb-read
déployé précédemment dans ce guide. Vous pouvez utiliser les données de différentes manières.
Une option courante consiste à les visualiser. OpenTSDB intègre une interface de base permettant de visualiser les métriques qu'il collecte. Ce guide fait appel à Grafana, une solution alternative très utilisée pour visualiser des métriques, qui présente l'avantage d'offrir des fonctionnalités supplémentaires.
L'exécution de Grafana dans votre cluster nécessite un processus semblable à celui que vous avez utilisé pour configurer OpenTSDB. Outre la création d'un ConfigMap et d'un déploiement, vous devez configurer le transfert de port de manière à pouvoir accéder à Grafana pendant son exécution dans votre cluster Kubernetes.
Dans Cloud Shell, créez le fichier ConfigMap de Grafana à l'aide des informations de configuration contenues dans le fichier
grafana.yaml
situé dans le dossierconfigmaps
du dépôt du guide :kubectl create -f configmaps/grafana.yaml
Créez le déploiement de Grafana à l'aide des informations de configuration contenues dans le fichier
grafana.yaml
situé dans le dossierdeployments
du dépôt du guide :kubectl create -f deployments/grafana.yaml
Obtenez le nom du pod de Grafana dans le cluster, puis utilisez-le pour configurer le transfert de port :
GRAFANA_PODS=$(kubectl get pods --selector=app=grafana \ --output=jsonpath={.items..metadata.name}) kubectl port-forward $GRAFANA_PODS 8080:3000
Vérifiez que le transfert a abouti. Le résultat ressemble à ce qui suit :
Forwarding from 127.0.0.1:8080 -> 3000
Pour vous connecter à l'interface Web de Grafana, dans Cloud Shell, cliquez sur Aperçu sur le Web, puis sélectionnez Prévisualiser sur le port 8080.
Pour en savoir plus, consultez la page Utiliser l'aperçu sur le Web.
Le navigateur ouvre un nouvel onglet, qui se connecte à l'interface Web de Grafana. Après quelques instants, le navigateur affiche des graphiques comme celui-ci :
Ce déploiement de Grafana a été personnalisé pour le présent guide. Les fichiers
configmaps/grafana.yaml
etdeployments/grafana.yaml
configurent Grafana pour se connecter au serviceopentsdb-read
, afin d'autoriser l'authentification anonyme et d'afficher certaines métriques de base du cluster. Pour un déploiement de Grafana dans un environnement de production, nous vous recommandons de mettre en œuvre les mécanismes d'authentification appropriés et d'utiliser des graphiques de séries temporelles plus riches.
Nettoyer
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer les ressources individuelles
Supprimez le cluster Kubernetes pour supprimer tous les artefacts que vous avez créés :
gcloud container clusters delete GKE_CLUSTER_NAME
Pour supprimer le cluster Kubernetes, confirmez l'opération en saisissant
Y
.Pour supprimer l'instance Bigtable, procédez comme suit :
Dans la console Google Cloud, accédez à Bigtable.
Sélectionnez l'instance que vous avez créée précédemment, puis cliquez sur Supprimer l'instance.
Supprimer le projet
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Étape suivante
- Pour découvrir comment améliorer les performances de votre utilisation d'OpenTSDB, consultez la page Conception de schémas Cloud Bigtable pour les données de séries temporelles.
- Pour apprendre à migrer de HBase vers Bigtable, consultez la page Migrer des données de HBase vers Bigtable.
- Regardez la vidéo Bigtable in Action (Démonstration de Bigtable) de la conférence Google Cloud Next 17. Cette vidéo est consacrée à la promotion de champ qui constitue une amélioration importante des performances.
- Pour en savoir plus sur les champs d'application par défaut pour les clusters GKE, consultez la section Champs d'application des clusters.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.