Java-buildpack: suporte para nova estrutura elastic-apm-agent

Criado em 6 dez. 2018  ·  28Comentários  ·  Fonte: cloudfoundry/java-buildpack

Elastic tem um novo módulo APM para ELK que tem um agente de instrumentação java.
Aqui estão as notas de início rápido:
https://www.elastic.co/blog/elastic-apm-java-agent-beta-released

Tentei criar um branch começando em um agente.
https://github.com/kmacpher67/java-buildpack/tree/elastic-apm-agent

É mais fácil para mim hackear isso juntos e fazer um Pull Request para você fazer Merge?
ou para você apenas fazer isso?
Deixe-me saber o que funciona melhor para você.

Bem-vindo qualquer crítica de comentários sobre minha base de código existente.

framework

Todos 28 comentários

Obrigado pela sua paciência. Acabei de examinar isso, mas quando reviso seu fork, não parece que você fez qualquer alteração em seu branch.

image

Em geral, porém, parece que a integração é realmente direta. Eu preferiria que você enviasse um PR para isso, e baseando-o em algo como o Agente do

Eu empurrei as mudanças locais do git.
Adicionado:

   new file:   config/elastic_apm_agent.yml
   new file:   lib/java_buildpack/framework/elastic_apm_agent.rb

Basicamente seguiu o padrão da New Relic.
Obrigado e desculpe por falhar no git commit / push básico. :(

Isso parece próximo o suficiente para ser enviado como um PR formal para revisão. Precisamos fazer algumas alterações, mas nada importante.

O que preciso fazer para que isso seja mesclado?
Eu preciso fazer alguma coisa?
Vou testar isso usando meu branch personalizado?

Eu fundi meu branch remoto no master, atualizei os documentos e alguns outros itens que parecem ser necessários para fazer com que o novo código ElasticApmAgent e a configuração yml funcionem.
Agora estou recebendo um erro na seção de lançamento.
Além disso, ativei a depuração por este documento:
https://github.com/cloudfoundry/java-buildpack/blob/master/docs/debugging-the-buildpack.md
Agora estou obtendo uma quantidade absurda de registros.
Não parece
FIM DO log detalhado: o erro principal parece;
Falha ao criar liberação de droplet: saída de liberação de buildpack inválida: yaml: linha 1: valores de mapeamento não são permitidos neste contexto
Status de saída 224

       Verify return code: 0 (ok)
   [DownloadCache]                  DEBUG Adding If-None-Match: 
   [DownloadCache]                  DEBUG Adding If-Modified-Since: 
   [DownloadCache]                  DEBUG Request: /openjdk/trusty/x86_64/index.yml, {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"], "accept"=>["*/*"], "user-agent"=>["Ruby"]}
   [DownloadCache]                  DEBUG Response headers: {"content-type"=>["text/x-yaml"], "content-length"=>["6227"], "connection"=>["keep-alive"], "date"=>["Tue, 22 Jan 2019 18:34:54 GMT"], "last-modified"=>["Tue, 22 Jan 2019 18:34:23 GMT"], "etag"=>["\"61babcae65885e33a81b9078176785d5\""], "x-amz-version-id"=>["oQHGk1CwR3mNyQMDuR6_DuJKNdm2PbIi"], "accept-ranges"=>["bytes"], "server"=>["AmazonS3"], "age"=>["3722369"], "x-cache"=>["Hit from cloudfront"], "via"=>["1.1 b27a02320ae6ae78c5c25db5c9ccb9dc.cloudfront.net (CloudFront)"], "x-amz-cf-id"=>["xRlMS_-Z0kqEG_zuTj2NRhtlrybv38Fl4u2ZL6DK2IpRdT4tYYOrFw=="]}
   [DownloadCache]                  DEBUG Response status: 200
   [DownloadCache]                  DEBUG Persisting Etag: "61babcae65885e33a81b9078176785d5"
   [DownloadCache]                  DEBUG Persisting Last-Modified: Tue, 22 Jan 2019 18:34:23 GMT
   [DownloadCache]                  DEBUG Persisting content to /tmp/06e39cddcbd90ad303ff803a925d6614266c3d55f875c5f1ca2c4180056d5b04.cached
   [DownloadCache]                  DEBUG Validated content size 6227 is 6227
   [RepositoryIndex]                DEBUG {"1.7.0_06"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_06.tar.gz", "1.7.0_07"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_07.tar.gz", "1.7.0_08"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_08.tar.gz", "1.7.0_09"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_09.tar.gz", "1.7.0_10"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_10.tar.gz", "1.7.0_11"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_11.tar.gz", "1.7.0_12"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_12.tar.gz", "1.7.0_13"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_13.tar.gz", "1.7.0_14"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_14.tar.gz", "1.7.0_15"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_15.tar.gz", "1.7.0_17"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_17.tar.gz", "1.7.0_21"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_21.tar.gz", "1.7.0_25"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_25.tar.gz", "1.7.0_40"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_40.tar.gz", "1.7.0_45"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_45.tar.gz", "1.7.0_51"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_51.tar.gz", "1.7.0_55"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_55.tar.gz", "1.7.0_60"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_60.tar.gz", "1.7.0_65"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_65.tar.gz", "1.7.0_71"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_71.tar.gz", "1.7.0_75"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_75.tar.gz", "1.7.0_79"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.7.0_79.tar.gz", "1.8.0_00"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0.tar.gz", "1.8.0_05"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_05.tar.gz", "1.8.0_101"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_101.tar.gz", "1.8.0_111"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_111.tar.gz", "1.8.0_11"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_11.tar.gz", "1.8.0_121"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_121.tar.gz", "1.8.0_131"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_131.tar.gz", "1.8.0_141"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_141.tar.gz", "1.8.0_144"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_144.tar.gz", "1.8.0_152"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_152.tar.gz", "1.8.0_161"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_161.tar.gz", "1.8.0_162"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_162.tar.gz", "1.8.0_172"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_172.tar.gz", "1.8.0_181"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_181.tar.gz", "1.8.0_191"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_191.tar.gz", "1.8.0_192"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_192.tar.gz", "1.8.0_201"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_201.tar.gz", "1.8.0_202"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_202.tar.gz", "1.8.0_20"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_20.tar.gz", "1.8.0_25"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_25.tar.gz", "1.8.0_31"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_31.tar.gz", "1.8.0_40"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_40.tar.gz", "1.8.0_45"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_45.tar.gz", "1.8.0_51"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_51.tar.gz", "1.8.0_60"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_60.tar.gz", "1.8.0_65"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_65.tar.gz", "1.8.0_71"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_71.tar.gz", "1.8.0_73"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_73.tar.gz", "1.8.0_77"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_77.tar.gz", "1.8.0_91-unlimited-crypto"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_91-unlimited-crypto.tar.gz", "1.8.0_91"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_91.tar.gz", "1.8.0_RC1"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_RC1.tar.gz", "10.0.0_46"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-10.0.0_46.tar.gz", "10.0.1_10"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-10.0.1_10.tar.gz", "10.0.2_13"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-10.0.2_13.tar.gz", "11.0.0_28"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-11.0.0_28.tar.gz", "11.0.1_13"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-11.0.1_13.tar.gz", "11.0.2_07"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-11.0.2_07.tar.gz", "11.0.2_09"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-11.0.2_09.tar.gz", "9.0.0_181"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-9.0.0_181.tar.gz", "9.0.1_11"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-9.0.1_11.tar.gz", "9.0.4_11"=>"https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-9.0.4_11.tar.gz"}
   [ConfigurationUtils]             DEBUG Configuration from /tmp/buildpackdownloads/a457f9495309d44a788ea9f361d85ebf/config/java_main.yml: {"java_main_class"=>nil, "arguments"=>nil}
   [Buildpack]                      DEBUG Release Payload:
   ---
   addons: []
   config_vars: {}
   default_process_types:
     web: 'JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1
       -XX:ActiveProcessorCount=$(nproc) -Djava.io.tmpdir=$TMPDIR -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext
       -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS"
       && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE
       -totMemory=$MEMORY_LIMIT -loadedClasses=23908 -poolType=metaspace -stackThreads=250
       -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY
       && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT
       eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
     task: 'JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1
       -XX:ActiveProcessorCount=$(nproc) -Djava.io.tmpdir=$TMPDIR -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext
       -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS"
       && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE
       -totMemory=$MEMORY_LIMIT -loadedClasses=23908 -poolType=metaspace -stackThreads=250
       -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY
       && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT
       eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
   Failed to build droplet release: buildpack's release output invalid: yaml: line 1: mapping values are not allowed in this context
   Exit status 224
   Cell 53d3700d-cd4d-46dd-9e38-67da5100086b stopping instance 8237ff17-026b-45c2-b21c-a62d5e95038d
   Cell 53d3700d-cd4d-46dd-9e38-67da5100086b destroying container for instance 8237ff17-026b-45c2-b21c-a62d5e95038d
   Cell 53d3700d-cd4d-46dd-9e38-67da5100086b successfully destroyed container for instance 8237ff17-026b-45c2-b21c-a62d5e95038d
FAILED

Eu adicionei instruções de depuração de impressão ao código para que eu pudesse ver o que estava acontecendo:
CONFIG chega lá:
[Droplet] DEBUG Sandbox root: /tmp/app/.java-buildpack/dynatrace_one_agent [Buildpack] DEBUG Instantiating JavaBuildpack::Framework::ElasticApmAgent [Buildpack] DEBUG Successfully required JavaBuildpack::Framework::ElasticApmAgent [ConfigurationUtils] DEBUG Configuration from /tmp/buildpackdownloads/a457f9495309d44a788ea9f361d85ebf/config/elastic_apm_agent.yml: {"version"=>"1.1.0", "repository_root"=>"https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/", "repository_download"=>"https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/1.1.0/elastic-apm-agent-1.1.0.jar"} [Droplet] DEBUG Droplet root: /tmp/app [Droplet] DEBUG Buildpack root: /tmp/app/.java-buildpack [Droplet] DEBUG Sandbox root: /tmp/app/.java-buildpack/elastic_apm_agent [Buildpack] DEBUG Instantiating JavaBuildpack::Framework::GoogleStackdriverDebugger
apoia? - ElasticApmAgent <JavaBuildpack :: Component :: VersionedDependencyComponent
aparece no log, mas as instruções de impressão de depuração para compilar e liberar não.
Veja o código aqui:
https://github.com/kmacpher67/java-buildpack/blob/master/lib/java_buildpack/framework/elastic_apm_agent.rb#L29

A etapa de liberação ahhh chama a configuração.
ahha parte 2: as chaves diferenciam maiúsculas de minúsculas.

cf update-user-provided-service elasticapm -p 'server_urls, application_packages'
Eu havia atualizado anteriormente o serviço usando os nomes de chave ALL em maiúsculas, onde estavam os nomes das variáveis ​​no código .rb. :( não são legais: SERVER_URLSSERVER_URLS, APPLICATION_PACKAGES 'tratamento de erros incorreto nessa base de código.
NOTA PARA O FUTURO:

Ok, estou tendo este problema agora:

[ConfigurationUtils]             DEBUG Configuration from /tmp/buildpackdownloads/a457f9495309d44a788ea9f361d85ebf/config/elastic_apm_agent.yml: {"version"=>"1.1.0", "repository_root"=>"https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/", "repository_download"=>"https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/1.1.0/elastic-apm-agent-1.1.0.jar"}

   [RepositoryIndex]                DEBUG https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/ expanded to https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent

   [DownloadCache]                  DEBUG Request: /maven2/co/elastic/apm/elastic-apm-agent/index.yml, {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"], "accept"=>["*/*"], "user-agent"=>["Ruby"]}
   [DownloadCache]                  DEBUG Response headers: {"last-modified"=>["Wed, 10 Aug 2016 15:08:35 GMT"], "etag"=>["\"1fb066da6a67c7c02962f59b4b8cd1ee\""], "x-amz-error-code"=>["NoSuchKey"], "x-amz-error-message"=>["The specified key does not exist."], "x-amz-error-detail-key"=>["maven2/co/elastic/apm/elastic-apm-agent/index.yml"], "content-type"=>["text/html"], "via"=>["1.1 varnish", "1.1 varnish"], "content-length"=>["554"], "accept-ranges"=>["bytes"], "date"=>["Thu, 07 Mar 2019 16:18:19 GMT"], "age"=>["0"], "connection"=>["keep-alive"], "x-served-by"=>["cache-iad2126-IAD, cache-bwi5024-BWI"], "x-cache"=>["MISS, MISS"], "x-cache-hits"=>["0, 0"], "x-timer"=>["S1551975499.474858,VS0,VE25"]}
   [DownloadCache]                  DEBUG Response status: 404
   [DownloadCache]                  WARN  Request failure 1, retrying after 5s.  Failure: 404 Not Found

Ele está tentando encontrar um arquivo /maven2/co/elastic/apm/elastic-apm-agent/index.yml que não existe.
Merda, o repositório maven não suporta index.yml
http://central.maven.org/maven2/co/elastic/apm/elastic-apm-agent/
Quais são as próximas etapas para contornar isso?

Depois de uma grande quantidade de hackers (uris inválidos, bloqueios de detecção obrigatórios de má definição, etc.) e revisões:
eventualmente indo com download_jar(<strong i="6">@version</strong>, <strong i="7">@uri</strong>, <strong i="8">@jar_name</strong> )
Eu recebo este erro, provavelmente devido a uma ampla invasão onde eu não deveria ter feito.

   addons: []
   config_vars: {}
   default_process_types:
     web: 'JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1
       -XX:ActiveProcessorCount=$(nproc) -Djava.io.tmpdir=$TMPDIR -Delastic.apm.log_file_name=STDOUT
       -Delastic.apm.server_urls=http://elk5-sts1-a.sapphirepri.com -Delastic.apm.application_packages=kenmac
       was here! -Delastic.apm.elastic.apm.service_name=sts1-TherapyReportTemplates-Server-kentest
       -javaagent:$PWD/.java-buildpack/elastic_apm_agent/elastic-apm-agent.jar -Delkapmagent.home=$PWD/.java-buildpack/elastic_apm_agent
       -Delastic.apm.application_packages.enable.java.8=true -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext
       -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS"
       && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE
       -totMemory=$MEMORY_LIMIT -loadedClasses=25019 -poolType=metaspace -stackThreads=250
       -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY
       && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT
       eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
     task: 'JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1
       -XX:ActiveProcessorCount=$(nproc) -Djava.io.tmpdir=$TMPDIR -Delastic.apm.log_file_name=STDOUT
       -Delastic.apm.server_urls=http://elk5-sts1-a.sapphirepri.com -Delastic.apm.application_packages=kenmac
       was here! -Delastic.apm.elastic.apm.service_name=sts1-TherapyReportTemplates-Server-kentest
       -javaagent:$PWD/.java-buildpack/elastic_apm_agent/elastic-apm-agent.jar -Delkapmagent.home=$PWD/.java-buildpack/elastic_apm_agent
       -Delastic.apm.application_packages.enable.java.8=true -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext
       -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS"
       && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE
       -totMemory=$MEMORY_LIMIT -loadedClasses=25019 -poolType=metaspace -stackThreads=250
       -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY
       && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT
       eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
   Failed to build droplet release: buildpack's release output invalid: yaml: line 1: mapping values are not allowed in this context
   Exit status 224

@nebhale

É um requisito que index.yml no maven repo sob
https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent?

Qual é a prática recomendada para a localização do index.yml? Existem outros locais comuns (github etc.)

Em geral, as pessoas simplesmente hospedam binários onde quiserem. Então, se você olhar para config/add_dynamics_agent.yml eles apenas hospedam em algum lugar em seu próprio domínio.

Esta é a nossa opção preferida (permitir que os projetos mantenham o repo e atualizem conforme necessário), mas se isso for muito pesado, temos o projeto java-buildpack-dependency-builder onde replicamos dependências em um cache hospedado pelo Cloud Foundry Fundação. Existem algumas limitações em relação ao licenciamento e à disponibilidade de download, mas podemos explorá-las se necessário.

Obrigado....

Desculpe ser denso / Então, para ser claro:

a) Podemos hospedar os binários onde quisermos, para nós maven repo

b) podemos hospedar o index.yml que aponta para esses binários em

https://github.com/cloudfoundry/java-buildpack/tree/master/config/add_elastic_agent.yml

c) E abriríamos uma solicitação pull para fazer isso. nos tornaríamos Contribuintes de CF assinando o CLA

Correto?

Existe uma ordem para adicionar o buildpack + index.yml? Isso tudo precisa acontecer como parte do mesmo PR

Não tem problema nenhum.

  1. Os binários podem ser hospedados em qualquer lugar que você desejar.
  2. O index.yml é usado para indireção a esses binários. Portanto, deve haver algum URI U , de modo que U/index.yml exista e contenha um hash YAML de versões para baixar URIs. Portanto, por exemplo, você poderia hospedar https://raw.githubusercontent.com/elastic/apm-agent-java/master/index.yml com links para o Maven Central e seu config/elastic_apm_agent.yml incluiria repository_root: https://raw.githubusercontent.com/elastic/apm-agent-java/master .

Para fins de teste, fiz isso "recursivamente" com o mesmo repositório de código que hospeda os arquivos jar para que o repositório seja compilado, mas ainda estou recebendo erros de lançamento.

@bvader
https://github.com/kmacpher67/java-buildpack/tree/master/elastic-repo
Se você copiar este subdiretório para um repo elastic como Ben sugere, então você pode colocar seus binários lá, eu poderia atualizar este repo para apontar para esses arquivos brutos.

@nebhale, ainda estou recebendo erros diversos terríveis:
`` `[ConfigurationUtils] DEBUG Configuration de /tmp/buildpackdownloads/a457f9495309d44a788ea9f361d85ebf/config/java_main.yml: {" java_main_class "=> nil," arguments "=> nil}
[Buildpack] DEBUG Release Payload:


addons: []
config_vars: {}
default_process_types:
web: 'JAVA_OPTS = "- agentpath: $ PWD / .java-buildpack / open_jdk_jre / bin / jvmkill-1.16.0_RELEASE = printHeapHistogram = 1
-XX: ActiveProcessorCount = $ (nproc) -Djava.io.tmpdir = $ TMPDIR -javaagent: $ PWD / .java-buildpack / elastic_apm_agent / elastic_apm_agent-1.4.0.jar
-Delkapmagent.home = $ PWD / .java-buildpack / elastic_apm_agent -Delastic.apm.application_packages.enable.java.8 = true
-Djava.ext.dirs = $ PWD / .java-buildpack / container_security_provider: $ PWD / .java-buildpack / open_jdk_jre / lib / ext
-Djava.security.properties = $ PWD / .java-buildpack / java_security / java.security $ JAVA_OPTS "
&& CALCULATED_MEMORY = $ ($ PWD / .java-buildpack / open_jdk_jre / bin / java-buildpack-memory-calculator-3.13.0_RELEASE
-totMemory = $ MEMORY_LIMIT -loadedClasses = 25019 -poolType = metaspace -stackThreads = 250
-vmOptions = "$ JAVA_OPTS") && echo Configuração de memória JVM: $ CALCULATED_MEMORY
&& JAVA_OPTS = "$ JAVA_OPTS $ CALCULATED_MEMORY" && MALLOC_ARENA_MAX = 2 SERVER_PORT = $ PORT
eval exec $ PWD / .java-buildpack / open_jdk_jre / bin / java $ JAVA_OPTS -cp $ PWD /. org.springframework.boot.loader.JarLauncher '
tarefa: 'JAVA_OPTS = "- agentpath: $ PWD / .java-buildpack / open_jdk_jre / bin / jvmkill-1.16.0_RELEASE = printHeapHistogram = 1
-XX: ActiveProcessorCount = $ (nproc) -Djava.io.tmpdir = $ TMPDIR -javaagent: $ PWD / .java-buildpack / elastic_apm_agent / elastic_apm_agent-1.4.0.jar
-Delkapmagent.home = $ PWD / .java-buildpack / elastic_apm_agent -Delastic.apm.application_packages.enable.java.8 = true
-Djava.ext.dirs = $ PWD / .java-buildpack / container_security_provider: $ PWD / .java-buildpack / open_jdk_jre / lib / ext
-Djava.security.properties = $ PWD / .java-buildpack / java_security / java.security $ JAVA_OPTS "
&& CALCULATED_MEMORY = $ ($ PWD / .java-buildpack / open_jdk_jre / bin / java-buildpack-memory-calculator-3.13.0_RELEASE
-totMemory = $ MEMORY_LIMIT -loadedClasses = 25019 -poolType = metaspace -stackThreads = 250
-vmOptions = "$ JAVA_OPTS") && echo Configuração de memória JVM: $ CALCULATED_MEMORY
&& JAVA_OPTS = "$ JAVA_OPTS $ CALCULATED_MEMORY" && MALLOC_ARENA_MAX = 2 SERVER_PORT = $ PORT
eval exec $ PWD / .java-buildpack / open_jdk_jre / bin / java $ JAVA_OPTS -cp $ PWD /. org.springframework.boot.loader.JarLauncher '
Falha ao criar liberação de droplet: saída de liberação do buildpack inválida: yaml: erros de desempacotamento:
linha 1: não é possível desempacotar !! str Downloa... em buildpackrunner.Release
Status de saída 224```

Ben, devo apenas reenviar o que tenho, você precisa de mim para resolver esses erros de versão diversos.
Eu preciso especificar também. Eu não fiz isso ainda.
Estou usando o branch master agora, não consigo descobrir como fazer o branch carregar por meio do manifesto.
Então, acabei de voltar ao meu mestre de repos.
https://github.com/kmacpher67/java-buildpack
Deixe-me saber o que fazer.

É quase certo que você está enviando algo para o console durante a fase de lançamento. stdout é reservado durante essa fase para comunicar a carga útil de configuração do processo.

Depois de simplificar o código para utilizar todo o nosso comportamento de download e corresponder aos outros designs de integração de APM, acho que você verá que esse problema desaparecerá.

@ kmacpher67 @nebhale

@bvader
https://github.com/kmacpher67/java-buildpack/tree/master/elastic-repo
Se você copiar este subdiretório para um repo elastic como Ben sugere, então você pode colocar seus binários lá, eu poderia atualizar este repo para apontar para esses arquivos brutos.

Estou trabalhando com nosso líder de tecnologia para o agente Elastic Java APM. Estamos trabalhando nas opções / decisões de configuração. Suspeito que deixaremos os binários no repositório maven, pois todas as nossas outras documentações / dependências dependem disso.

Você pode ver essa discussão aqui.
https://github.com/elastic/apm-agent-java/issues/523#issuecomment -472604463

@ kmacpher67 Agradecemos seu esforço nisso!

Acho que gostaríamos de atualizar os documentos do agente Elastic APM, talvez eles não devam ser específicos do JRebel. Talvez eu esteja faltando alguma coisa, mas não deveriam ser apenas documentos buildpack genéricos para o Elastic APM?

Estou me referindo a:
https://github.com/kmacpher67/java-buildpack/blob/master/docs/framework-elastic_apm_agent.md

Também parece que há vários parâmetros adicionais que podem / devem ser suportados. talvez depois de obtermos esse PR inicial, a equipe do Elastic pode dar uma olhada e atualizar.

https://github.com/kmacpher67/java-buildpack/blob/master/lib/java_buildpack/framework/elastic_apm_agent.rb

Exemplo secret_token é uma configuração muito importante.
https://www.elastic.co/guide/en/apm/agent/java/current/config-reporter.html#config -secret-token

A Elastic Team está ansiosa para contribuir.

@nebhale trabalhando no CLA, acredite que você e eu nos cruzamos, eu era o vice-presidente. na CoreLogic, onde usamos PCF / Labs, ajude a construir laboratórios em SaMo agora na Elastic

@nebhale , você tem planos de suportar repositórios maven diretamente? https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/maven-metadata.xml deve ter todas as informações necessárias disponíveis, apenas o formato é um pouco diferente.

Por exemplo

maven_repository_root: https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent
maven_artifact: elastic-apm-agent-$version.jar

@bvader
Eu atualizei a documentação do agente.
Adicionada a substituição de serviço para secret_token
ttps: //github.com/kmacpher67/java-buildpack

Há um arquivo de propriedade opcional que adicionamos, você tem uma amostra que eu possa + adicionar ao repo:
O pacote de construção tem um local para isso:
https://github.com/kmacpher67/java-buildpack/tree/master/resources

+1 voto para suporte a XML de maven, eu teria escrito, mas não sou um programador Ruby e duvido que o pessoal da cf dará a outros agentes a mesma situação. Seria ideal se você pudesse adicionar index.yml, caso contrário, deixe-me saber, vou verificar o projeto mencionado acima para obter as pessoas essenciais para preparar esses itens.

Duvido que o pessoal cf dê a outros agentes a mesma situação

Eu acho que este é um argumento para adicionar suporte de maven - que tornaria não apenas mais fácil para o Elastic APM, mas também para outros 🙂

Nesse ínterim, adicionei index.yml ao repositório github: https://github.com/elastic/apm-agent-java/pull/524

@ kmacpher67

O index.yml agora pode ser encontrado em:
https://raw.githubusercontent.com/elastic/apm-agent-java/master/cloudfoundry/index.yml

1) Obrigado pela atualização sobre secret_token

2) Com relação à documentação, ainda estou muito confuso sobre todas as referências de JRebel e detecção de JRebel, etc. O agente / buildpack do Elastic APM não deve ter dependências / referências de terceiros e hiperlinks de volta para JRebel. Podemos fornecer instruções na documentação do Elastic Java APM em breve.

Eu esperaria que esta página se parecesse mais com a Página da New Relic. Ou talvez eu esteja perdendo algo completamente e isso de alguma forma intimamente ligado a JRebel.

https://github.com/cloudfoundry/java-buildpack/blob/master/docs/framework-new_relic_agent.md

Fico feliz em entrar e ajudar com seu fork ou assim que nos fundirmos. Talvez apenas pegue toda a Referência JRebel para começar.

exemplo

Elastic APM Agent Framework

O Elastic APM Agent Framework faz com que um aplicativo seja configurado automaticamente para funcionar com um Elastic APM Service vinculado.

Critério de detecção | Existência de um serviço New Relic de limite único. A existência de um serviço New Relic é definida como a carga útil VCAP_SERVICES contendo um serviço cujo nome, rótulo ou tag tem elastic-apm como substring.
- | -
Tags | elastic-agent=<version>

3) Temos um arquivo de propriedades não oficial, mas todas as propriedades têm padrões razoáveis, vamos mesclar sem isso, vou precisar envolver a equipe de engenharia etc. e podemos adicionar isso mais tarde, a menos que seja absolutamente necessário no início.

@nebhale Existe uma maneira de marcar isso como "Beta ou Experimental" a princípio? Ou simplesmente entra e nós iteramos? Não estou certo sobre o processo. Elastic desejará iterar neste excelente trabalho que @ kmacpher67 forneceu como base.

corrija a documentação, copie e cole. removido jrebel zero refs.

Ainda estou obtendo algum tipo de registro de console de Downloa... na carga útil de lançamento

   Failed to build droplet release: buildpack's release output invalid: yaml: unmarshal errors:
     line 1: cannot unmarshal !!str `Downloa...` into buildpackrunner.Release
   Exit status 224

parece que vem do seguinte invólucro de golang.
https://github.com/cloudfoundry/buildpackapplifecycle/blob/master/buildpackrunner/runner.go#L484
Devo apenas solicitar o Pull Request do meu repositório master?
A última atualização funciona apontando para index.yml localizado em Elastic.

@nebhale Existe uma maneira de marcar isso como "Beta ou Experimental" a princípio? Ou simplesmente entra e nós iteramos? Não estou certo sobre o processo. Elastic vai querer iterar neste ótimo trabalho que

Eu escrevi os testes de especificação para isso, eu duvido seriamente da qualidade dos testes porque não tenho o Ruby rodando localmente.
Tenho hackeado e enviado as alterações do build pack em um espaço de aplicativo cf.

Código de teste:
https://github.com/kmacpher67/java-buildpack/blob/368dc9cc1a08670b49cdbf9d226eaae220ab4b77/spec/java_buildpack/framework/elastic_apm_agent_spec.rb#L80

O ideal é que, depois de colocar essa implantação de trabalho em um espaço de aplicativo CF, volto para nossa instância do Elastic 6.4 e habilito os recursos apm. Veja o que começa a fluir por lá.

ohh. "Feliz, aprendi a tacar !!" na verdade, consegui olhar um diff e percebi que ainda havia depuração no downloadcache.rb que esqueci de remover. Lol.

       eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
   Exit status 0
   Uploading droplet, build artifacts cache...
   Uploading droplet...
   Uploading build artifacts cache...
   Uploaded build artifacts cache (52M)
   Uploaded droplet (106.1M)
   Uploading complete
   Cell 3f2ea5c4-31a0-487d-86f9-3020c48e4235 stopping instance 2001f7e3-9fb3-4936-ac28-ef571e1b86e2
   Cell 3f2ea5c4-31a0-487d-86f9-3020c48e4235 destroying container for instance 2001f7e3-9fb3-4936-ac28-ef571e1b86e2
   Cell 3f2ea5c4-31a0-487d-86f9-3020c48e4235 successfully destroyed container for instance 2001f7e3-9fb3-4936-ac28-ef571e1b86e2

Waiting for app to start...
     state     since                  cpu      memory         disk           details
#0   running   2019-03-14T17:39:16Z   296.8%   597.4M of 1G   192.4M of 1G  

Não trava agora! Deixe-me atualizar o branch pull de destino.
Em seguida, corrigirei minha instalação cf ELK6.4 local para que o APM seja instalado.
Veja o que / se houver relatórios de volta.

@nebhale Você quer que eu esmague / squanchy os commits? Há minhas +600 iterações de hacking lá como commits.

https://github.com/cloudfoundry/java-buildpack/pull/696

@bvader
ele está tentando atingir o port8200 não existente para o apm. Eu preciso configurar isso agora.
Você tem um leia-me rápido para o cara preguiçoso em um guia de configuração de início rápido para apm elástico?
`` `
2019-03-14T13: 39: 43.03-0400 [APP / PROC / WEB / 0] OUT 2019-03-14 17: 39: 43.037 [apm-reporter] ERROR co.elastic.apm.agent.report.IntakeV2ReportingEventHandler - Falha para lidar com o evento do tipo METRICS com este erro: tempo limite de conexão esgotado
2019-03-14T13: 39: 43.03-0400 [APP / PROC / WEB / 0] OUT 2019-03-14 17: 39: 43.038 [apm-reporter] INFO co.elastic.apm.agent.report.IntakeV2ReportingEventHandler - Apoio desligado por 1 segundo (± 10%) `` ``

@ kmacpher67

Você pode usar isso se você se sentir confortável com a docker. Isso vai resistir um pouco ao ambiente Elastic, Kibana, Apm-Server

https://gist.github.com/bvader/9665fa7b3bd69457517e41a7c28b4725

Então
TAG=6.6.2 docker-compose -f elastic-apm-compose.yml up

# After the stack is full running please go to, this is how you install / configure the Kibana / Elasticsearch side dashboards etc. 
http://localhost:5601/app/kibana#/home/tutorial/apm?_g=()

Aqui está um exemplo de aplicativo java com instruções para Java local ... e tudo para testar.
https://gist.github.com/bvader/cc9fea7e6f8f709dfa2ad14776eed7fe

Se você quiser apenas o apm-server, eu simplesmente baixaria / instalaria e faria uma configuração mínima. Gostaria apenas de baixar o tar.gz e a configuração mínima.

https://www.elastic.co/downloads/apm

Você só precisa configurar a saída para a instância do elasticsearch e o host apm-server

apm-server:
  # Defines the host and port the server is listening on.  use "unix:/path/to.sock" to listen on a unix domain socket.
  host: "10.168.0.3:8200"

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  # Scheme and port can be left out and will be set to the default (http and 9200)
  # In case you specify and additional path, the scheme is required: http://localhost:9200/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200
  hosts: ["localhost:9200"]

  # Boolean flag to enable or disable the output module.
  #enabled: true

  # Set gzip compression level.
  #compression_level: 0

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

Então corra

https://www.elastic.co/guide/en/apm/server/current/setting-up-and-running.html

./apm-server -e

Siga também as instruções, é assim que você carrega / configura os painéis laterais Kibana / Elasticsearch etc.

# After the stack is full running please go to
http://<kibanahost>:5601/app/kibana#/home/tutorial/apm?_g=()

@ kmacpher67 Deixe-me saber se você quiser um pouco de ajuda / colaboração no servidor APM, talvez possamos aumentar o zoom. Você pode entrar em contato comigo diretamente pelo meu e-mail ...

Oh, desculpas se eu estava confuso no "Beta ou Experimental" no início? "comentário Estou apenas aprendendo o processo de CF e a construção do processo de buildpack, I / We / Elastic / The OSS Community aprecio totalmente seu esforço e espírito de comunidade.

Na próxima semana, tentarei baixar seu repositório se ele não estiver mesclado e tentarei instalar / executar do meu lado.

@nebhale

Acho que estamos prontos para você dar uma olhada no PR quando estiver pronto.

Estou esperando o Merge Request PULL, mas há um conflito.
Revisão solicitada
A revisão foi solicitada nesta solicitação pull. Não é necessário mesclar.
@nebhale
nebhale foi solicitada para revisão
Este ramo tem conflitos que devem ser resolvidos
Apenas aqueles com acesso de gravação a este repositório podem mesclar solicitações de pull.
Arquivos conflitantes

rakelib / versions_task.rb

Acho que preciso escolher as alterações e movê-las para a mais recente, talvez fazer um novo FORK com base na versão mais recente.
Eu perguntei neste tópico de MR, se eu deveria recolher ou reenviar.

Deve ser fechado por solicitação de pull
https://github.com/cloudfoundry/java-buildpack/pull/696

Esta página foi útil?
0 / 5 - 0 avaliações