Google App Engine のモニタリング

Google App Engine (GAE) は、フルマネージド・サーバーレス・プラットフォーム上の極めてスケーラブルなアプリケーション・システムです。

Instana エージェントは、メインアプリケーションが実行されているのと同じコンテナ内で実行する必要があります。

その他のサポート対象の Google Cloud プラットフォームおよびサービスに関する詳細については、 『 GCP 』のドキュメントを参照してください。

GAE カスタム・ランタイム

カスタム・ランタイムにより、言語インタープリター、アプリケーション・サーバー、追加のアプリケーションなどの追加のコンポーネントを環境に組み込むことができます。

コンテナーのビルド

Instana エージェントのDockerfileは、 GitHub で公開されており、GAE上のアプリケーションを監視するための優れた出発点となります。

Java をサポートするための変更

Java ベースのアプリケーションの実行をサポートするには、Docker ファイルを変更して、以下を含める必要があります。

  • Instana エージェントに必要なすべての変数( エージェントキーエージェントのホストエンドポイントなど)。
  • Instana エージェントのリポジトリー構成
  • Java インストール済み環境
  • Instana エージェントの構成ファイル
  • java_app_name.jar をアプリケーションに置き換えます
  • Java アプリケーションを実行するために main-process スクリプトを更新します
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.shinstana-agent に名前変更します。

main-process という新規ファイルを作成して、以下の内容を追加します。

java -jar /root/java_app_name.jar &
 

ファイル wrapper.sh を作成:

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

サマリー

  • ホストエージェントをインストールするには、 Instana エージェントキー をDockerfileに記述する必要があります
  • main-process は、Java プロセスを開始するために使用されます
  • instana-agent は、Instana エージェント・プロセスを開始するために使用されます (run.sh から名前変更されています)
  • ラッパーは、両方のプロセスを開始するために使用されます

GAE マニフェスト・ファイル

上記のステップで、必要なすべてのファイルを追加して変更した後、GAE インスタンスを記述する 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/.*$

 

NodeJS,、 Python、および Go ベースのアプリでは、追加の環境変数を設定してトレースを有効にする必要があります:

INSTANA_AGENT_HTTP_LISTEN: "*"
 
注: ソースコードには、監視対象の言語用のセンサーを含める必要があります( Java を除く)。

デプロイメント

最後に、次のコマンドを実行して、このファイルをデプロイすることができます。

gcloud app deploy gae-java-app.yaml
 

確認した後、次のコマンドを実行して、プロセス全体またはストリーム・ログの出力をコマンド・ラインから確認できます。

gcloud app logs tail -s gae-java-app
 

Instana エージェントは、Google App Engine Flex 上のデプロイ済みアプリケーション/インスタンスごとに、マップ上の新規インスタンスをディスカバーします。 Java

NodeJS