Surveillance de Google App Engine

Google App Engine (GAE) est un système d'applications hautement évolutif sur une plateforme sans serveur entièrement gérée.

Vous devez exécuter l'agent « Instana » dans le même conteneur que celui où s'exécute l'application principale.

Pour plus d'informations sur les autres plateformes et services pris en charge par l' Google Cloud, consultez la documentation d' GCP.

Environnement d'exécution GAE personnalisé

L'environnement d'exécution personnalisé vous permet d'inclure des composants supplémentaires, tels que des interpréteurs de langage, des serveurs d'applications ou d'autres applications dans votre environnement.

Génération d'un conteneur

Le fichier Dockerfile de l'agent « Instana » est disponible sur GitHub et constitue un excellent point de départ pour surveiller vos applications sur GAE.

Cloner le référentiel

git clone 'https://github.com/instana/instana-agent-docker.git'
 
cd instana-agent-docker
 

Modification pour la prise en charge de Java

Pour prendre en charge l'exécution d'applications Java, le fichier Dockerfile doit être modifié et contenir les éléments suivants :

  • Toutes les variables requises par l'agent d' Instana, telles que votre clé d'agent ou le point de terminaison de l'agent hôte.
  • Configuration du référentiel d'agent Instana
  • Installation de Java
  • Fichiers de configuration de l'agent Instana
  • remplacez java_app_name.jar par votre application
  • mettez à jour le script main-process pour exécuter l'application Java
FROM alpine:3.7

ENV LANG=C.UTF-8 \
    INSTANA_AGENT_KEY="" \
    INSTANA_AGENT_ENDPOINT="" \
    INSTANA_AGENT_ENDPOINT_PORT="" \
    INSTANA_AGENT_ZONE="" \
    INSTANA_AGENT_TAGS="" \
    INSTANA_AGENT_HTTP_LISTEN="" \
    INSTANA_AGENT_PROXY_HOST="" \
    INSTANA_AGENT_PROXY_PORT="" \
    INSTANA_AGENT_PROXY_PROTOCOL="" \
    INSTANA_AGENT_PROXY_USER="" \
    INSTANA_AGENT_PROXY_PASSWORD="" \
    INSTANA_AGENT_PROXY_USE_DNS=""

RUN echo "@edge http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
    apk update && \
    apk upgrade && \
    apk add --update-cache --update gomplate@edge bash ca-certificates curl docker@edge inotify-tools && \
    curl -sSL https://packages.instana.io/Instana.rsa -o /etc/apk/keys/instana.rsa.pub && \
    echo "https://_:YOUR_INSTANA_AGENT_HERE@packages.instana.io/agent/apk/generic" >> /etc/apk/repositories && \
    apk update && \
    apk add instana-agent-dynamic && \
    ( /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 C.UTF-8 || true ) && \
    echo "export LANG=C.UTF-8" > /etc/profile.d/locale.sh && \
    sed -i '$d' /etc/apk/repositories && \
    rm -rf /tmp/* /var/cache/apk/*

# Install OpenJDK-8
RUN apk update && \
    apk --update add openjdk8-jre

ADD org.ops4j.pax.logging.cfg /root/
ADD org.ops4j.pax.url.mvn.cfg /root/
ADD configuration.yaml /root/
ADD com.instana.agent.main.sender.Backend.cfg.tmpl /root/
ADD mvn-settings.xml.tmpl /root/

# This is the run.sh from the repository renamed to instana-agent
ADD instana-agent /root

# Add the jar file and main-process
ADD java_app_name.jar /root
ADD main-process /root

# The wrapper is used to run both processes in the same container
COPY wrapper.sh /root

WORKDIR /root

ENTRYPOINT ["./wrapper.sh"]
 

Renommez run.sh en instana-agent.

Créez un nouveau fichier appelé main-process et ajoutez-lui ce contenu :

java -jar /root/java_app_name.jar &
 

Créer wrapper.sh un fichier :

#!/bin/bash

# Start the first process

./main-process -D
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start main-process: $status"
  exit $status
fi

# Start the second process
./instana-agent -D
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start instana-agent: $status"
  exit $status
fi

while sleep 60; do
  ps aux |grep main-process |grep -q -v grep
  PROCESS_1_STATUS=$?
  ps aux |grep instana-agent |grep -q -v grep
  PROCESS_2_STATUS=$?
  # If the greps above find anything, they exit with 0 status
  # If they are not both 0, then something is wrong
  if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then
    echo "One of the processes has already exited."
    exit 1
  fi
done
 

Récapitulatif

  • La clé de l'agent « Instana » doit être ajoutée au fichier Dockerfile afin d'installer l'agent hôte
  • main-process est utilisé pour démarrer le processus Java
  • instana-agent est utilisé pour démarrer le processus de l'agent Instana (nouveau nom remplaçant run.sh)
  • L'encapsuleur est utilisé pour démarrer les deux processus

Fichier manifeste GAE

Après avoir ajouté et modifié tous les fichiers nécessaires dans les étapes précédentes, nous pouvons ajouter un fichier manifeste GAE qui décrit l'instance GAE.

runtime: custom
env: flex

service: gae-java-app

manual_scaling:
  instances: 1

env_variables:
  INSTANA_AGENT_KEY: 'YOUR_INSTANA_AGENT_KEY'
  INSTANA_AGENT_ENDPOINT: 'YOUR_INSTANA_HOST_AGENT_ENDPOINT'
  INSTANA_AGENT_ENDPOINT_PORT: '443'
  INSTANA_AGENT_ZONE: 'gae-java-app'

resources:
  cpu: 4
  memory_gb: 4

health_check:
  enable_health_check: False

skip_files:
- ^\.git/.*$

 

Pour les applications basées sur NodeJS,, Python et Go, vous devez activer le traçage en configurant une variable d'environnement supplémentaire :

INSTANA_AGENT_HTTP_LISTEN: "*"
 
Remarque : votre code source doit inclure le module « sensor » correspondant à la langue que vous surveillez (à l'exception de « Java »).

Déploiement

Enfin, nous pouvons déployer ce fichier à l'aide de la commande suivante :

gcloud app deploy gae-java-app.yaml
 

Après confirmation, vous pouvez voir le résultat de l'ensemble du processus ou les journaux de flux à partir de la ligne de commande en exécutant :

gcloud app logs tail -s gae-java-app
 

L'agent « Instana » détectera les nouvelles instances sur la carte pour chaque application ou instance déployée sur l'App Engine Flex d' Google. Java

NodeJS