Monitoring Google App Engine

Google App Engine (GAE), tamamen yönetilen sunucusuz bir platformdaki yüksek düzeyde ölçeklenebilir bir uygulama sistemidir.

Ana uygulamanın çalıştığı aynı taşıyıcıda Instana aracısını çalıştırmamız gerekir.

GAE Özel yürütme ortamı

Custom Runtime, dil yorumlayıcıları, uygulama sunucuları ya da ek uygulamalar gibi ek bileşenleri ortamınıza eklemenize olanak sağlar.

Taşıyıcı oluşturma

Instana Agent Dockerfile, GitHub ' da bulunur ve APE içinde uygulamalarınızı izlemek için mükemmel bir başlangıç noktasıdır.

Havuza Clone

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

Modification to support Java

Java tabanlı uygulamaların çalıştırılıp çalıştırılamaması için Dockerfile değiştirilmeli ve aşağıdakileri içermesi gerekir:

  • All variables needed by the Instana agent, like your aracı anahtarı or the anasistem aracısı uç noktası.
  • Instana aracı havuzu yapılandırması
  • Java kuruluşu
  • Instana aracı yapılandırma dosyaları
  • java_app_name.jar yerine uygulamanızı koyun
  • Java uygulamasını çalıştırmak için main-process komut dosyasını güncelle
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"]

run.sh dosyasını instana-agentolarak yeniden adlandırın.

main-process adlı yeni bir dosya oluşturun ve bu içeriği buna ekleyin:

java -jar /root/java_app_name.jar &

wrapper.sh dosyası oluşturun:

#!/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

Modification to support NodeJS

Süreç, Java uygulamalarına benzer. Java yerine NodeJS ve npm paketini kurun @instana/collector:

ADD package.json /root
ADD app.js /root/
# Install NodeJS
RUN apk update && \
    apk --update add nodejs nodejs-npm
RUN npm install --save @instana/collector

main-process dosyası, NodeJS uygulamanızın nasıl çalıştırılacağını yönerge gerektirir:

node app.js &

Your application also needs to require and initialize the @instana/collector package, for details on that refer to our Node.jsüzerindeki belgeler.

Özeti

  • Anasistem aracısını kurmak için Instant aracı anahtarı Dockerfile içine yerleştirilmelidir.
  • main-process , Java işlemini başlatmak için kullanılır
  • instana-agent , Instana aracısını başlatmak için kullanılır ( run.sholarak yeniden adlandırılır).
  • Sarıcı her iki işlemi de başlatmak için kullanılır.

GAE bildirge dosyası

Önceki adımlarda gereken tüm dosyaları ekledikten ve değiştirdikten sonra, GAE eşgörünümünü açıklayan bir GAE bildirge dosyası ekleyebiliriz.

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/.*$

NodeJS, Python ve Go tabanlı uygulamalara ilişkin ek bir ortam değişkenine gerek vardır:

INSTANA_AGENT_HTTP_LISTEN: "*"

İzlemeyi etkinleştirmek için. İzlemekte olduğunuz dil için kaynak kodunuzun algılayıcı içermesini gerektiğini (Java dışında) unutmayın.

Devreye Alma

Son olarak, aşağıdaki komutu çalıştırıp bu dosyayı konuşlandırabiliriz:

gcloud app deploy gae-java-app.yaml

Doğrulama işleminden sonra, komut satırından tüm süreç ya da akış günlüklerinin çıkışını görebilirsiniz:

gcloud app logs tail -s gae-java-app

Instana aracısı, Google App Engine Flex üzerinde konuşlandırılan her uygulama/eşgörünüm eşleminde yeni eşgörünümler keşfeder. Java

NodeJS