Java-buildpack: Unterstützung für das neue Elastic-Apm-Agent-Framework

Erstellt am 6. Dez. 2018  ·  28Kommentare  ·  Quelle: cloudfoundry/java-buildpack

Elastic hat ein neues APM-Modul für ELK mit einem Java-Instrumentierungsagenten.
Hier sind die Schnellstartnotizen:
https://www.elastic.co/blog/elastic-apm-java-agent-beta-released

Ich habe versucht, einen Branch mit einem Start bei einem Agenten zu erstellen.
https://github.com/kmacpher67/java-buildpack/tree/elastic-apm-agent

Ist es einfacher für mich, das zusammen zu hacken und eine Pull-Anfrage für Sie zum Zusammenführen zu senden?
oder für Sie nur, um es zu tun?
Lassen Sie mich wissen, was für Sie am besten funktioniert.

Begrüßen Sie jede Kritik an meiner bestehenden Codebasis.

framework

Alle 28 Kommentare

Danke für Ihre Geduld. Ich bin gerade dazu gekommen, mir das anzuschauen, aber wenn ich Ihre Verzweigung überprüfe, scheint es nicht so zu sein, dass Sie in Ihrem Zweig Änderungen vorgenommen haben.

image

Im Allgemeinen sieht es jedoch so aus, als ob die Integration wirklich einfach ist. Ich würde es vorziehen, dass Sie dafür eine PR einreichen, und wenn Sie diese auf etwas wie dem Azure Application Insights-Agent basieren, sollten Sie einen guten Vorsprung haben.

Ich habe die lokalen git-Änderungen verschoben.
Hinzugefügt:

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

Im Wesentlichen folgte das Muster für New Relic.
Vielen Dank und Entschuldigung für das Versagen bei grundlegendem Git-Commit/Push. :(

Dies sieht nahe genug aus, um es als formelle PR zur Überprüfung einzureichen. Es gibt einige Änderungen, die wir vornehmen müssen, aber nichts Wesentliches.

Was muss ich tun, damit dies zusammengeführt wird?
Muss ich etwas tun?
Ich werde dies mit meinem benutzerdefinierten Branch testen?

Ich habe meinen Remote-Zweig mit dem Master zusammengeführt, die Dokumentation aktualisiert und einige andere Elemente, die erforderlich zu sein scheinen, um den neuen ElasticApmAgent Code und die yml-Konfiguration zum Laufen zu bringen.
Jetzt erhalte ich einen Fehler im Release-Bereich.
Außerdem habe ich das Debugging gemäß diesem Dokument aktiviert:
https://github.com/cloudfoundry/java-buildpack/blob/master/docs/debugging-the-buildpack.md
Jetzt bekomme ich eine verrückte Menge an Protokollierung.
Es sieht nicht so aus
ENDE DES detaillierten Protokolls: Der Hauptfehler scheint so zu sein;
Droplet-Release konnte nicht erstellt werden: Release-Ausgabe des Buildpacks ungültig: yaml: Zeile 1: Zuordnungswerte sind in diesem Kontext nicht zulässig
Ausgangsstatus 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

Ich habe dem Code Debugging-Print-Anweisungen hinzugefügt, damit ich sehen konnte, was passiert:
CONFIG schafft es dort:
[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
unterstützt? - ElasticApmAgent < JavaBuildpack::Component::VersionedDependencyComponent
wird im Protokoll angezeigt, die Debug-Druckanweisungen für Kompilieren und Freigeben jedoch nicht.
Siehe Code hier:
https://github.com/kmacpher67/java-buildpack/blob/master/lib/java_buildpack/framework/elastic_apm_agent.rb#L29

ahhh Release-Schritt ruft Konfiguration auf.
ahha Teil 2: Bei Schlüsseln muss die Groß-/Kleinschreibung beachtet werden.

cf update-user-provided-service elasticapm -p 'server_urls,application_packages'
Ich hatte den Dienst zuvor mit den ALL-Großbuchstaben-Schlüsselnamen aktualisiert, wo die Variablennamen im .rb-Code waren. :( sind nicht cool: SERVER_URLSSERVER_URLS, APPLICATION_PACKAGES' schlechte Fehlerbehandlung in dieser Codebasis.
HINWEIS FÜR DIE ZUKUNFT:

Ok, ich bekomme jetzt dieses Problem:

[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

Es wird versucht, eine /maven2/co/elastic/apm/elastic-apm-agent/index.yml-Datei zu finden, die nicht existiert.
Mist, das Maven-Repository unterstützt keine index.yml
http://central.maven.org/maven2/co/elastic/apm/elastic-apm-agent/
Was sind die nächsten Schritte, um dies zu umgehen?

Nach umfangreichem Hacking (ungültige Uris, schlechte Def-Erkennung von Blöcken usw.) und Überarbeitungen:
schließlich mit download_jar(<strong i="6">@version</strong>, <strong i="7">@uri</strong>, <strong i="8">@jar_name</strong> )
Ich erhalte diesen Fehler, wahrscheinlich aufgrund von umfangreichem Hacking, bei dem ich es nicht hätte tun sollen.

   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

Ist es eine Voraussetzung, dass index.yml im Maven-Repo unter
https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent?

Was ist die beste Vorgehensweise für den Speicherort der index.yml ? Gibt es andere gemeinsame Speicherorte (github usw.)

Im Allgemeinen hosten die Leute einfach Binärdateien, wo immer sie wollen. Wenn Sie sich also config/add_dynamics_agent.yml ansehen, hosten sie nur irgendwo auf ihrer eigenen Domain.

Dies ist unsere bevorzugte Option (erlauben Sie den Projekten, das Repository zu verwalten und nach Bedarf zu aktualisieren), aber wenn das zu viel Aufwand ist, haben wir das Projekt java-buildpack-dependency-builder , bei dem wir Abhängigkeiten in einen Cache replizieren, der von Cloud Foundry gehostet wird Stiftung. Es gibt einige Einschränkungen in Bezug auf die Lizenzierung und Download-Verfügbarkeit, aber wir können sie bei Bedarf untersuchen.

Danke....

Entschuldigung für die Dichte / Um es klar zu sagen:

a) Wir können die Binärdateien hosten, wo wir wollen, für uns Maven Repo

b) Wir können die index.yml hosten, die auf diese Binärdateien zeigt bei

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

c) Und dazu würden wir einen Pull-Request eröffnen. wir würden CF-Mitwirkende werden, indem wir den GAV unterzeichnen

Richtig?

Gibt es eine Reihenfolge, in der das Buildpack + index.yml hinzugefügt wird, muss dies alles als Teil desselben PR erfolgen?

Überhaupt kein Problem.

  1. Binärdateien können überall gehostet werden.
  2. Das index.yml wird für die Umleitung zu diesen Binärdateien verwendet. Es muss also einen URI U , sodass U/index.yml existiert und einen YAML-Hash von Versionen zum Herunterladen von URIs enthält. Sie könnten zum Beispiel https://raw.githubusercontent.com/elastic/apm-agent-java/master/index.yml mit Links zu Maven Central hosten und Ihr config/elastic_apm_agent.yml würde repository_root: https://raw.githubusercontent.com/elastic/apm-agent-java/master .

Zu Testzwecken habe ich das "rekursiv" mit demselben Code-Repo gemacht, das die JAR-Dateien hostet, damit das Repo erstellt wird, aber ich erhalte immer noch Release-Fehler.

@bvader
https://github.com/kmacpher67/java-buildpack/tree/master/elastic-repo
Wenn Sie dieses Unterverzeichnis in ein elastic Repository kopieren, wie Ben vorschlägt, können Sie Ihre Binärdateien dort ablegen, ich könnte dieses Repository aktualisieren, um auf diese Rohdateien zu verweisen.

@nebhale Ich
``` [ConfigurationUtils] DEBUG-Konfiguration aus /tmp/buildpackdownloads/a457f9495309d44a788ea9f361d85ebf/config/java_main.yml: {"java_main_class"=>nil, "arguments"=>nil}
[Buildpack] DEBUG-Release-Nutzlast:


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 JVM-Speicherkonfiguration: $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'
Aufgabe: '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 JVM-Speicherkonfiguration: $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'
Droplet-Release konnte nicht erstellt werden: Release-Ausgabe des Buildpacks ungültig: yaml: unmarshal error:
Zeile 1: kann !!str Downloa... in buildpackrunner.Release auslagern
Ausgangsstatus 224```

Ben, sollte ich einfach das, was ich habe, erneut einreichen, brauche ich, um diese verschiedenen Release-Fehler zu beheben.
Ich muss auch spezifizieren. Das habe ich noch nicht gemacht.
Ich verwende jetzt den Master-Branch, ich konnte nicht herausfinden, wie der Branch über das Manifest geladen werden kann.
Also habe ich gerade wieder mit meinem Repos-Master zusammengeführt.
https://github.com/kmacpher67/java-buildpack
Lassen Sie mich wissen, was zu tun ist.

Dies liegt mit ziemlicher Sicherheit daran, dass Sie während der Veröffentlichungsphase etwas an die Konsole ausgeben. stdout ist während dieser Phase reserviert, um die Nutzlast der Prozesskonfiguration zu übermitteln.

Sobald Sie den Code vereinfachen, um unser gesamtes Download-Verhalten zu nutzen und den anderen APM-Integrationsdesigns zu entsprechen, wird dieses Problem meiner Meinung nach verschwinden.

@kmacpher67 @nebhale

@bvader
https://github.com/kmacpher67/java-buildpack/tree/master/elastic-repo
Wenn Sie dieses Unterverzeichnis in ein elastic Repository kopieren, wie Ben vorschlägt, können Sie Ihre Binärdateien dort ablegen, ich könnte dieses Repository aktualisieren, um auf diese Rohdateien zu verweisen.

Ich arbeite mit unserem Tech Lead für den Elastic Java APM-Agenten zusammen. Wir arbeiten an den Konfigurationsmöglichkeiten / Entscheidungen. Ich vermute, dass wir die Binärdateien im Maven-Repository belassen werden, da alle unsere anderen Dokumentationen / Abhängigkeiten darauf beruhen.

Sie können diese Diskussion hier sehen.
https://github.com/elastic/apm-agent-java/issues/523#issuecomment -472604463

@kmacpher67 Schätzen Sie Ihre Bemühungen!

Ich denke, wir möchten die Dokumentation für den Elastic APM-Agenten aktualisieren, vielleicht sollten sie nicht JRebel-spezifisch sein. Vielleicht übersehe ich etwas, aber sollten dies nicht nur allgemeine Buildpack-Dokumente für Elastic APM sein?

Ich beziehe mich auf:
https://github.com/kmacpher67/java-buildpack/blob/master/docs/framework-elastic_apm_agent.md

Es sieht auch so aus, als ob es vielleicht eine Reihe zusätzlicher Parameter gibt, die unterstützt werden können / sollten. Vielleicht kann das Elastic-Team, nachdem wir diese erste PR erhalten haben, einen Blick darauf werfen und aktualisieren.

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

Beispiel secret_token ist eine sehr wichtige Konfiguration.
https://www.elastic.co/guide/en/apm/agent/java/current/config-reporter.html#config -secret-token

Das Elastic Team freut sich darauf, einen Beitrag zu leisten.

@nebhale arbeitet an CLA, glauben Sie und ich haben uns gekreuzt, ich war der VP Eng. bei CoreLogic, wo wir PCF / Labs verwendet haben, helfen Sie beim Aufbau von Labs in SaMo jetzt bei Elastic

@nebhale Haben Sie Pläne, Maven-Repositorys direkt zu unterstützen? https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/maven-metadata.xml sollte alle erforderlichen Informationen zur Verfügung haben, nur das Format ist etwas anders.

Beispielsweise

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

@bvader
Ich habe die Dokumentation für den Agenten aktualisiert.
Dienstüberschreibung für secret_token hinzugefügt
ttps://github.com/kmacpher67/java-buildpack

Es gibt eine optionale Eigenschaftsdatei, die wir hinzufügen. Haben Sie eine Beispieldatei, die ich dem Repository hinzufügen kann:
Das Build Pack hat dafür einen Speicherort:
https://github.com/kmacpher67/java-buildpack/tree/master/resources

+1 Stimme für Maven XML-Unterstützung, ich hätte es geschrieben, aber ich bin kein Ruby-Programmierer und ich bezweifle, dass die cf-Leute die gleiche Situation haben werden, wenn andere Agenten die gleiche Situation haben. Es wäre ideal, wenn Sie index.yml hinzufügen könnten. Wenn nicht, lassen Sie es mich wissen, ich werde mir das oben genannte Projekt ansehen, um die entscheidenden Leute für die Bereitstellung dieser Elemente zu finden.

Ich bezweifle, dass die cf-Leute die gleiche Situation haben, wenn andere Agenten die gleiche Situation haben

Ich denke, dies ist ein Argument dafür, Maven-Unterstützung hinzuzufügen - das würde es nicht nur für Elastic APM, sondern auch für andere einfacher machen 🙂

In der Zwischenzeit habe ich index.yml zum Github-Repo hinzugefügt: https://github.com/elastic/apm-agent-java/pull/524

@kmacpher67

Die index.yml ist jetzt zu finden unter:
https://raw.githubusercontent.com/elastic/apm-agent-java/master/cloudfoundry/index.yml

1) Danke für das Update zu secret_token

2) In Bezug auf die Dokumentation bin ich immer noch ziemlich verwirrt über all die JRebel-Referenzen und die JRebel-Erkennung usw. Der Elastic APM-Agent / das Buildpack sollte keine Abhängigkeiten / Referenzen von Drittanbietern und Hyperlinks zu JRebel haben. Wir können in Kürze Anweisungen in den Elastic Java APM-Dokumenten bereitstellen.

Ich würde erwarten, dass diese Seite eher der New Relic Page ähnelt. Oder vielleicht fehlt mir etwas komplett und das ist irgendwie eng mit JRebel verbunden.

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

Ich steige gerne ein und helfe durch Ihre Gabelung oder sobald wir fusionieren. Vielleicht nehmen Sie einfach alle JRebel-Referenzen heraus, um zu beginnen.

Beispiel

Elastic APM Agent-Framework

Das Elastic APM Agent Framework bewirkt, dass eine Anwendung automatisch so konfiguriert wird, dass sie mit einem gebundenen Elastic APM Service arbeitet.

Erkennungskriterium | Existenz eines einzelnen gebundenen New-Relic-Dienstes. Die Existenz eines New-Relic-Dienstes ist definiert als die VCAP_SERVICES Nutzlast, die einen Dienst enthält, dessen Name, Label oder Tag elastic-apm als Teilzeichenfolge enthält.
-- | --
Schlagwörter | elastic-agent=<version>

3) Wir haben eine inoffizielle Eigenschaftsdatei, aber alle Eigenschaften haben vernünftige Standardwerte, lassen Sie uns zusammenführen, ohne dass ich das Engineering-Team einbeziehen muss usw. und wir können das später hinzufügen, es sei denn, dies ist zuerst unbedingt erforderlich.

@nebhale Gibt es eine Möglichkeit, dies zunächst als "Beta oder Experimental" zu markieren? Oder geht es einfach rein und wir iterieren, ich bin etwas unklar über den Prozess. Elastic möchte diese großartige Arbeit wiederholen , die bereitgestellt hat.

korrigieren Sie die Dokumentation kopieren und einfügen. jrebel null refs entfernt.

Ich erhalte immer noch eine Art Konsolenprotokoll von Downloa... in der Release-Nutzlast

   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

es sieht so aus, als ob es aus dem folgenden Golang-Wrapper stammt.
https://github.com/cloudfoundry/buildpackapplifecycle/blob/master/buildpackrunner/runner.go#L484
Soll ich einfach nach dem Pull Request aus meinem Master-Repository fragen?
Das neueste Update funktioniert mit dem Zeigen auf die index.yml, die sich bei Elastic befindet.

@nebhale Gibt es eine Möglichkeit, dies zunächst als "Beta oder Experimental" zu markieren? Oder geht es einfach rein und wir iterieren, ich bin etwas unklar über den Prozess. Elastic wird diese großartige Arbeit wiederholen wollen, die

Ich habe die Spezifikationstests dafür geschrieben, ich bezweifle ernsthaft die Qualität der Tests, da Ruby nicht lokal ausgeführt wird.
Ich habe die Build-Pack-Änderungen gehackt und in einen cf-App-Bereich verschoben.

Testcode:
https://github.com/kmacpher67/java-buildpack/blob/368dc9cc1a08670b49cdbf9d226eaae220ab4b77/spec/java_buildpack/framework/elastic_apm_agent_spec.rb#L80

Im Idealfall gehe ich zurück zu unserer Elastic 6.4-Instanz und aktiviere die apm-Funktionen, sobald diese funktionierende Bereitstellung in einen CF-App-Bereich geht. Sehen Sie, was da drüben anfängt zu streamen.

ohh. `Glücklich gelernt zu putten!!“ tatsächlich konnte ich mir ein Diff ansehen und stellte fest, dass es noch Debugging in der downloadcache.rb gab, die ich vergessen hatte zu entfernen. 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  

Es stürzt jetzt nicht ab! Lassen Sie mich den Ziel-Pull-Zweig aktualisieren.
Dann werde ich meine lokale cf ELK6.4-Installation reparieren, damit APM installiert werden kann.
Sehen Sie, was/wenn etwas zurückkommt.

@nebhale Soll ich die Commits quetschen/squanchy? Da sind meine +600 Hacking-Iterationen als Commits.

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

@bvader
es versucht, den nicht vorhandenen port8200 für die apm zu erreichen. Das muss ich jetzt einrichten.
Haben Sie eine schnelle Readme-Datei für den Faulpelz auf einer Schnellstart-Anleitung für die Einrichtung von Elastic APM?
```
2019-03-14T13:39:43.03-0400 [APP/PROC/WEB/0] OUT 2019-03-14 17:39:43.037 [apm-reporter] FEHLER co.elastic.apm.agent.report.IntakeV2ReportingEventHandler - Failed um ein Ereignis vom Typ METRICS mit diesem Fehler zu behandeln: Zeitüberschreitung der Verbindung
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 - Backing 1 Sekunden aus (±10%)````

@kmacpher67

Sie können dies verwenden, wenn Sie mit Docker vertraut sind. Dies wird ein wenig Elastic, Kibana, Apm-Server-Umgebung aufstehen

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

Dann
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=()

Hier ist eine Beispiel-Java-App mit Anweisungen für lokales Java... und alles zum Testen.
https://gist.github.com/bvader/cc9fea7e6f8f709dfa2ad14776eed7fe

Wenn Sie nur den apm-Server möchten, würde ich einfach herunterladen / installieren und eine minimale Konfiguration durchführen. Ich würde einfach die tar.gz und die minimale Konfiguration herunterladen.

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

Sie müssen nur die Ausgabe für Ihre Elasticsearch-Instanz und den apm-Server-Host konfigurieren

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"

Dann renne

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

./apm-server -e

Befolgen Sie auch die Anweisungen, so laden / konfigurieren Sie die Kibana / Elasticsearch-Seiten-Dashboards usw.

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

@kmacpher67 Lassen Sie es mich wissen, wenn Sie ein wenig Hilfe / Zusammenarbeit auf dem APM-Server wünschen, vielleicht können wir auf einen Zoom springen. Sie erreichen mich direkt unter meiner E-Mail...

Oh, entschuldigung, wenn ich anfangs bei "Beta oder Experimental" verwirrt war? "Kommentar Ich lerne gerade den CF-Prozess und das Erstellen des Buildpack-Prozesses, ich / wir / Elastic / The OSS Community schätze deine Bemühungen und deinen Gemeinschaftsgeist total.

Nächste Woche werde ich versuchen, Ihr Repo herunterzuziehen, wenn es nicht zusammengeführt ist, und versuchen, auf meinem Ende zu installieren / auszuführen.

@nebhale

Ich denke, wir sind bereit, dass Sie sich die PR ansehen, wenn Sie bereit sind.

Ich warte auf den Merge Request PULL, aber es gibt einen Konflikt.
Überprüfung angefordert
Bei diesem Pull-Request wurde eine Überprüfung angefordert. Eine Zusammenführung ist nicht erforderlich.
@nebhale
nebhale wurde zur Überprüfung angefordert
Dieser Zweig hat Konflikte, die gelöst werden müssen
Nur diejenigen mit Schreibzugriff auf dieses Repository können Pull-Requests zusammenführen.
In Konflikt stehende Dateien

rakelib/versions_task.rb

Ich denke, ich muss die Änderungen herauspicken und sie auf die neueste Version übertragen, vielleicht eine neue FORK basierend auf der neuesten Version.
Ich habe in diesem MR-Thread gefragt, ob ich zusammenbrechen oder erneut einreichen soll.

Dies sollte per Pull-Request geschlossen werden
https://github.com/cloudfoundry/java-buildpack/pull/696

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen