Elastic์๋ Java ๊ณ์ธก ์์ด์ ํธ๊ฐ ์๋ ELK์ฉ ์ APM ๋ชจ๋์ด ์์ต๋๋ค.
๋น ๋ฅธ ์์ ์ฐธ๊ณ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://www.elastic.co/blog/elastic-apm-java-agent-beta-released
์์ด์ ํธ์์ ์์ํ์ฌ ์ง์ ์ ๋ง๋ค๋ ค๊ณ ํ์ต๋๋ค.
https://github.com/kmacpher67/java-buildpack/tree/elastic-apm-agent
๋ด๊ฐ ์ด๊ฒ์ ํจ๊ป ํดํนํ๊ณ ๋ณํฉ์ ์ํํ๊ธฐ ์ํด ํ ๋ฆฌํ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๊น?
์๋๋ฉด ๋น์ ์ด ๊ทธ๊ฒ์ํ๊ธฐ ์ํด?
๊ทํ์๊ฒ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ด ๋ฌด์์ธ์ง ์๋ ค์ฃผ์ญ์์ค.
๋ด ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ๋ํ ๋ชจ๋ ์๊ฒฌ์ ํ์ํฉ๋๋ค.
๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ฐฉ๊ธ ์ด ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์์ง๋ง ๊ทํ์ ๋ถ๊ธฐ๋ฅผ ๊ฒํ ํ ๋ ๋ถ๊ธฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํตํฉ์ด ์ ๋ง ๊ฐ๋จํด ๋ณด์ ๋๋ค. ์ด์ ๋ํ PR์ ์ ์ถํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ Azure Application Insights Agent ์ ๊ฐ์ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒ์ด ์ข์ ์ถ๋ฐ์ ์ด ๋ ๊ฒ์ ๋๋ค.
git ๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ์ ํธ์ํ์ต๋๋ค.
์ถ๊ฐ๋จ:
new file: config/elastic_apm_agent.yml new file: lib/java_buildpack/framework/elastic_apm_agent.rb
๊ธฐ๋ณธ์ ์ผ๋ก New Relic์ ํจํด์ ๋ฐ๋์ต๋๋ค.
๊ธฐ๋ณธ์ ์ธ git commit/push์ ์คํจํด์ ๊ฐ์ฌํ๊ณ ์ฃ์กํฉ๋๋ค. :(
์ด๊ฒ์ ๊ฒํ ๋ฅผ ์ํด ๊ณต์ PR๋ก ์ ์ถํ๊ธฐ์ ์ถฉ๋ถํ ์ ์ฌํด ๋ณด์ ๋๋ค. ๋ช ๊ฐ์ง ๋ณ๊ฒฝํด์ผ ํ ์ฌํญ์ด ์์ง๋ง ์ค์ํ ๊ฒ์ ์์ต๋๋ค.
๋ณํฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๋ด๊ฐ ํด์ผ ํ ์ผ์ด ์๋์?
๋ด ์ฌ์ฉ์ ์ง์ ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ํ
์คํธํ ๊ฒ์
๋๊น?
๋ด ์๊ฒฉ ๋ถ๊ธฐ๋ฅผ ๋ง์คํฐ์ ๋ณํฉํ๊ณ ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํ์ผ๋ฉฐ ์ ElasticApmAgent
์ฝ๋์ yml ๊ตฌ์ฑ์ด ์๋ํ๋๋ก ํ๋ ๋ฐ ํ์ํ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๊ธฐํ ํญ๋ชฉ์ ์
๋ฐ์ดํธํ์ต๋๋ค.
์ด์ ๋ฆด๋ฆฌ์ค ์น์
์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ํ ์ด ๋ฌธ์์ ๋ฐ๋ผ ๋๋ฒ๊น
์ ์ผฐ์ต๋๋ค.
https://github.com/cloudfoundry/java-buildpack/blob/master/docs/debugging-the-buildpack.md
์ด์ ๋๋ ์์ฒญ๋ ์์ ๋ก๊น
์ ์ป๊ณ ์์ต๋๋ค.
์ฒ๋ผ ๋ณด์ด์ง ์๋๋ค
END OF ์ธ๋ถ ๋ก๊ทธ: ์ฃผ์ ์ค๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ก์ ๋ฆด๋ฆฌ์ค ๋น๋ ์คํจ: ๋น๋ํฉ ๋ฆด๋ฆฌ์ค ์ถ๋ ฅ ์ ํจํ์ง ์์: yaml: ๋ผ์ธ 1: ์ด ์ปจํ
์คํธ์์ ๋งคํ ๊ฐ์ด ํ์ฉ๋์ง ์์ต๋๋ค.
์ข
๋ฃ ์ํ 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
๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ณผ ์ ์๋๋ก ๋๋ฒ๊น
์ธ์ ๋ฌธ์ ์ฝ๋์ ์ถ๊ฐํ์ต๋๋ค.
CONFIG๋ ๋ค์์ ์ํํฉ๋๋ค.
[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
์ง์? - ElasticApmAgent < JavaBuildpack::Component::VersionedDependencyComponent
๋ก๊ทธ์ ํ์๋์ง๋ง ์ปดํ์ผ ๋ฐ ๋ฆด๋ฆฌ์ค์ ๋ํ ๋๋ฒ๊ทธ ์ธ์ ๋ฌธ์ ํ์๋์ง ์์ต๋๋ค.
์ฌ๊ธฐ์์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ธ์.
https://github.com/kmacpher67/java-buildpack/blob/master/lib/java_buildpack/framework/elastic_apm_agent.rb#L29
ahhh ๋ฆด๋ฆฌ์ค ๋จ๊ณ๋ ๊ตฌ์ฑ์ ํธ์ถํฉ๋๋ค.
์ํ ํํธ 2: ํค๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
cf ์
๋ฐ์ดํธ ์ฌ์ฉ์ ์ ๊ณต ์๋น์ค elasticapm -p '์๋ฒ URL, ์์ฉ ํ๋ก๊ทธ๋จ ํจํค์ง'
์ด์ ์ .rb ์ฝ๋์ ๋ณ์ ์ด๋ฆ์ด ์๋ ๋ชจ๋ ๋๋ฌธ์ ํค ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์
๋ฐ์ดํธํ์ต๋๋ค. :( ๋ฉ์ง์ง ์์ต๋๋ค: SERVER_URLSSERVER_URLS,APPLICATION_PACKAGES' ํด๋น ์ฝ๋ ๊ธฐ๋ฐ์์ ์๋ชป๋ ์ค๋ฅ ์ฒ๋ฆฌ.
๋ฏธ๋์ ๋ํ ์ฐธ๊ณ ์ฌํญ:
์ด์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
[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
์กด์ฌํ์ง ์๋ /maven2/co/elastic/apm/elastic-apm-agent/index.yml ํ์ผ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
maven repo๋ index.yml์ ์ง์ํ์ง ์์ต๋๋ค.
http://central.maven.org/maven2/co/elastic/apm/elastic-apm-agent/
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค์ ๋จ๊ณ๋ ๋ฌด์์
๋๊น?
๊ด๋ฒ์ํ ํดํน(์ ํจํ์ง ์์ uris, ์๋ชป๋ ์ ์๊ฐ ํ์ํ ๋ธ๋ก ๊ฐ์ง ๋ฑ) ๋ฐ ์์ ํ:
๊ฒฐ๊ตญ download_jar(<strong i="6">@version</strong>, <strong i="7">@uri</strong>, <strong i="8">@jar_name</strong> )
์ ํจ๊ป
๋ด๊ฐ ํ์ง ๋ง์์ด์ผ ํ๋ ๊ด๋ฒ์ํ ํดํน์ผ๋ก ์ธํด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
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
maven repo์ index.yml์ด ์๋์ ์๊ตฌ ์ฌํญ์
๋๊น?
https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent?
index.yml ์์น์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ฌด์์ ๋๊น? ๋ค๋ฅธ ๊ณตํต ์์น(github ๋ฑ)๊ฐ ์์ต๋๊น?
์ผ๋ฐ์ ์ผ๋ก ์ฌ๋๋ค์ ์ํ๋ ๊ณณ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ํธ์คํ
ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ config/add_dynamics_agent.yml
๋ฅผ ๋ณด๋ฉด ํธ์คํธ๋ ์์ฒด ๋๋ฉ์ธ์ ์ด๋๊ฐ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ ํธํ๋ ์ต์
์
๋๋ค(ํ๋ก์ ํธ๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ณ ํ์์ ๋ฐ๋ผ ์
๋ฐ์ดํธํ๋๋ก ํ์ฉ). ํ์ง๋ง ๋๋ฌด ๋ถ๋ด์ด ๋๋ ๊ฒฝ์ฐ Cloud Foundry์์ ํธ์คํ
ํ๋ ์บ์์ ์ข
์์ฑ์ ๋ณต์ ํ๋ java-buildpack-dependency-builder
ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ๊ธฐ๋ฐ. ๋ผ์ด์ ์ค ๋ฐ ๋ค์ด๋ก๋ ๊ฐ์ฉ์ฑ๊ณผ ๊ด๋ จํ์ฌ ์ด์ ๋ํ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์์ง๋ง ํ์ํ ๊ฒฝ์ฐ ํ์ํ ์ ์์ต๋๋ค.
๊ฐ์ฌ ํด์....
์กฐ๋ฐํด์ ์ฃ์กํฉ๋๋ค / ๊ทธ๋์ ๋ช ํํ๊ฒ :
a) ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ณณ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ํธ์คํ ํ ์ ์์ต๋๋ค. for us maven repo
b) ํด๋น ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ index.yml์ ํธ์คํ ํ ์ ์์ต๋๋ค.
https://github.com/cloudfoundry/java-buildpack/tree/master/config/add_elastic_agent.yml
c) ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ํ๊ธฐ ์ํด ํ ๋ฆฌํ์คํธ๋ฅผ ์ด ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ CLA์ ์๋ช ํจ์ผ๋ก์จ CF ๊ธฐ์ฌ์๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ณ์?
buildpack + index.yml์ ์ถ๊ฐํ๋ ์์๊ฐ ์์ต๋๊น? ๋ชจ๋ ๋์ผํ PR์ ์ผ๋ถ๋ก ๋ฐ์ํด์ผ ํฉ๋๋ค.
์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
index.yml
๋ ํด๋น ๋ฐ์ด๋๋ฆฌ์ ๋ํ ๊ฐ์ ์ฐธ์กฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ U/index.yml
๊ฐ ์กด์ฌํ๊ณ URI๋ฅผ ๋ค์ด๋ก๋ํ๊ธฐ ์ํ ๋ฒ์ ์ YAML ํด์๊ฐ ํฌํจ๋๋๋ก ์ผ๋ถ URI U
๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Maven Central์ ๋ํ ๋งํฌ๋ก https://raw.githubusercontent.com/elastic/apm-agent-java/master/index.yml
๋ฅผ ํธ์คํ
ํ ์ ์๊ณ config/elastic_apm_agent.yml
์๋ repository_root: https://raw.githubusercontent.com/elastic/apm-agent-java/master
๋ฉ๋๋ค.ํ ์คํธ ๋ชฉ์ ์ผ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋น๋ํ๊ธฐ ์ํด jar ํ์ผ์ ํธ์คํ ํ๋ ๋์ผํ ์ฝ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก "์ฌ๊ท์ ์ผ๋ก" ์ํํ์ง๋ง ์ฌ์ ํ ๋ฆด๋ฆฌ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
@bvader
https://github.com/kmacpher67/java-buildpack/tree/master/elastic-repo
Ben์ด ์ ์ํ ๋๋ก ์ด ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ elastic
์ ์ฅ์์ ๋ณต์ฌํ๋ฉด ๊ฑฐ๊ธฐ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค. ์ด ์ ์ฅ์๋ฅผ ์
๋ฐ์ดํธํ์ฌ ์์ ํ์ผ์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค.
@nebhale ์ฌ์ ํ ๋์ฐํ ๊ธฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
``` [ConfigurationUtils] /tmp/buildpackdownloads/a457f9495309d44a788ea9f361d85ebf/config/java_main.yml์ ๋๋ฒ๊ทธ ๊ตฌ์ฑ: {"java_main_class"=>nil, "arguments"=>nil}
[๋น๋ํฉ] ๋๋ฒ๊ทธ ๋ฆด๋ฆฌ์ค ํ์ด๋ก๋:
์ ๋์จ: []
config_vars: {}
default_process_types:
์น: '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=๋ฉํ์คํ์ด์ค -stackThreads=250
-vmOptions="$JAVA_OPTS") && ์์ฝ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ: $CALCULATED_MEMORY
&& JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT
ํ๊ฐ ์คํ $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
์์
: '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=๋ฉํ์คํ์ด์ค -stackThreads=250
-vmOptions="$JAVA_OPTS") && ์์ฝ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ: $CALCULATED_MEMORY
&& JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT
ํ๊ฐ ์คํ $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher'
์ก์ ๋ฆด๋ฆฌ์ค ๋น๋ ์คํจ: ๋น๋ํฉ์ ๋ฆด๋ฆฌ์ค ์ถ๋ ฅ์ด ์๋ชป๋จ: yaml: ๋น์ ๋ ฌ ์ค๋ฅ:
1ํ: !!str Downloa...
์ buildpackrunner.Release๋ก ๋น์ ๋ ฌํํ ์ ์์ต๋๋ค.
์ข
๋ฃ ์ํ 224```
Ben์ ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ค์ ์ ์ถํด์ผ ํฉ๋๊น? ์ด๋ฌํ ๊ธฐํ ๋ฆด๋ฆฌ์ค ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ ๊ฐ ํ์ํฉ๋๊น?
๋๋ ์ฌ์ํด์ผ์ง. ๋๋ ์์ง ํ์ง ์์๋ค.
์ง๊ธ ๋ง์คํฐ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ๋งค๋ํ์คํธ๋ฅผ ํตํด ๋ธ๋์น๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค.
๊ทธ๋์ ๊ทธ๋ฅ repos ๋ง์คํฐ์ ๋ค์ ๋ณํฉํ์ต๋๋ค.
https://github.com/kmacpher67/java-buildpack
๋ฌด์์ ํด์ผ ํ๋์ง ์๋ ค์ฃผ์ธ์.
์ด๊ฒ์ ๋ฆด๋ฆฌ์ค ๋จ๊ณ์์ ์ฝ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๋ ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ํ์คํฉ๋๋ค. stdout
๋ ํ๋ก์ธ์ค ๊ตฌ์ฑ ํ์ด๋ก๋๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ํด๋น ๋จ๊ณ์์ ์์ฝ๋ฉ๋๋ค.
์ฐ๋ฆฌ์ ๋ชจ๋ ๋ค์ด๋ก๋ ๋์์ ํ์ฉํ๊ณ ๋ค๋ฅธ APM ํตํฉ ๋์์ธ๊ณผ ์ผ์นํ๋๋ก ์ฝ๋๋ฅผ ๋จ์ํํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@kmacpher67 @nebhale
@bvader
https://github.com/kmacpher67/java-buildpack/tree/master/elastic-repo
Ben์ด ์ ์ํ ๋๋ก ์ด ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผelastic
์ ์ฅ์์ ๋ณต์ฌํ๋ฉด ๊ฑฐ๊ธฐ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค. ์ด ์ ์ฅ์๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์์ ํ์ผ์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค.
์ ๋ Elastic Java APM ์์ด์ ํธ์ ๊ธฐ์ ์ฑ ์์์ ํจ๊ป ์ผํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ตฌ์ฑ ์ต์ /๊ฒฐ์ ์ ๋ํด ์์ ํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์/์ข ์์ฑ์ด ์์กดํ๊ธฐ ๋๋ฌธ์ maven repo์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋จ๊ฒจ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ด ํ ๋ก ์ ๋ณผ ์ ์์ต๋๋ค.
https://github.com/elastic/apm-agent-java/issues/523#issuecomment -472604463
@kmacpher67 ์ฌ๋ฌ๋ถ์ ๋ ธ๊ณ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
Elastic APM ์์ด์ ํธ์ ๋ํ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ถ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ JRebel๊ณผ ๊ด๋ จ๋์ด์๋ ์ ๋ ๊ฒ์ ๋๋ค. ์ด์ฉ๋ฉด ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง ์ด๊ฒ์ด Elastic APM์ ๋ํ ์ผ๋ฐ ๋น๋ํฉ ๋ฌธ์๊ฐ ์๋์ด์ผ ํฉ๋๊น?
๋๋ ๋ค์์ ์ธ๊ธํ๊ณ ์๋ค:
https://github.com/kmacpher67/java-buildpack/blob/master/docs/framework-elastic_apm_agent.md
๋ํ ์ง์๋ ์ ์๊ฑฐ๋ ์ง์๋์ด์ผ ํ๋ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๊ฐ ๋ง์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. Elastic ํ์์ ์ด ์ด๊ธฐ PR์ ๋ฐ์ ํ ์ดํด๋ณด๊ณ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
์ secret_token
๋ ๋งค์ฐ ์ค์ํ ๊ตฌ์ฑ์
๋๋ค.
https://www.elastic.co/guide/en/apm/agent/java/current/config-reporter.html#config -secret-token
Elastic ํ์ด ๊ธฐ์ฌํ๊ธฐ๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค.
@nebhale ์ CLA์์ ์ผํ๊ณ ์์ต๋๋ค. ๋น์ ๊ณผ ์ ๋ ๊ธธ์ ๊ฑด๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ VP Eng์์ต๋๋ค. PCF/Labs๋ฅผ ์ฌ์ฉํ CoreLogic์์ ์ง๊ธ Elastic์์ SaMo์ ์คํ์ค ๊ตฌ์ถ์ ๋์ต๋๋ค.
@nebhale maven ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ง์ ์ง์ํ ๊ณํ์ด ์์ต๋๊น? https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/maven-metadata.xml์ ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ์์ด์ผ ํ๋ฉฐ ํ์๋ง ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค.
์๋ฅผ ๋ค์ด
maven_repository_root: https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent
maven_artifact: elastic-apm-agent-$version.jar
@bvader
์์ด์ ํธ์ ๋ํ ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํ์ต๋๋ค.
secret_token
๋ํ ์๋น์ค ์ฌ์ ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
ttps://github.com/kmacpher67/java-buildpack
์ฐ๋ฆฌ๊ฐ ์ถ๊ฐํ๋ ์ ํ์ ์์ฑ ํ์ผ์ด ์์ต๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ์ +์ถ๊ฐํ ์ ์๋ ์ํ ํ์ผ์ด ์์ต๋๊น?
๋น๋ ํฉ์๋ ๋ค์ ์์น๊ฐ ์์ต๋๋ค.
https://github.com/kmacpher67/java-buildpack/tree/master/resources
maven XML ์ง์์ ๋ํด +1 ํฌํ๋ฅผ ํ๋ค๋ฉด ์์ฑํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ ๋ฃจ๋น ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋ฉฐ cf ์ฌ๋๋ค์ด ๋ค๋ฅธ ์์ด์ ํธ๊ฐ ๊ฐ์ ์ํฉ์ ๊ฒช๋๋ค๋ฉด ์์ฌ์ค๋ฝ์ต๋๋ค. index.yml์ ์ถ๊ฐํ ์ ์๋ค๋ฉด ์ด์์ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์๋ ค์ฃผ์ธ์. ํด๋น ํญ๋ชฉ์ ์ค๋นํ๋ ๋ฐ ํต์ฌ์ ์ธ ์ฌ๋๋ค์ ํ๋ณดํ๊ธฐ ์ํด ์์ ์ธ๊ธํ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๊ฒ ์ต๋๋ค.
cf ์ฌ๋๋ค์ด ๋ค๋ฅธ ์์ด์ ํธ๊ฐ ๊ฐ์ ์ํฉ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
๋๋ ์ด๊ฒ์ด maven ์ง์์ ์ถ๊ฐํ๊ธฐ ์ํ ๋ ผ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด Elastic APM๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ๋ ์ฌ์์ง ๊ฒ์ ๋๋ค. ๐
๊ทธ๋์ github repo์ index.yml
๋ฅผ ์ถ๊ฐํ์ต๋๋ค. https://github.com/elastic/apm-agent-java/pull/524
@kmacpher67
index.yml์ ์ด์ ๋ค์ ์์น์์ ์ฐพ์ ์ ์์ต๋๋ค.
https://raw.githubusercontent.com/elastic/apm-agent-java/master/cloudfoundry/index.yml
1) secret_token
์
๋ฐ์ดํธ ๊ฐ์ฌํฉ๋๋ค.
2) ๋ฌธ์์ ๊ด๋ จํ์ฌ ์ ๋ ์ฌ์ ํ ๋ชจ๋ JRebel ์ฐธ์กฐ ๋ฐ JRebel ๊ฐ์ง ๋ฑ์ ๋ํด ๊ฝค ํผ๋์ค๋ฝ์ต๋๋ค. Elastic APM ์์ด์ ํธ/๋น๋ํฉ์๋ ํ์ฌ ์ข ์์ฑ/์ฐธ์กฐ ๋ฐ JRebel์ ๋ํ ํ์ดํผ๋งํฌ๊ฐ ์์ด์ผ ํฉ๋๋ค. Elastic Java APM ๋ฌธ์์์ ๊ณง ์ง์นจ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ด ํ์ด์ง๊ฐ New Relic Page์ ๋น์ทํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ์๋๋ฉด ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ์์ ํ ๋์น๊ณ ์๊ณ ์ด๊ฒ์ ์ด๋ป๊ฒ ๋ JRebel๊ณผ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋์ด ์์ต๋๋ค.
https://github.com/cloudfoundry/java-buildpack/blob/master/docs/framework-new_relic_agent.md
๊ทํ์ ๋ถ๊ธฐ์ ์ ํตํด ๋๋ ์ฐ๋ฆฌ๊ฐ ํฉ๋ณ๋๋ ์ฆ์ ์ฐธ์ฌํ์ฌ ๋์์ ๋๋ฆฌ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ์๋ง๋ ๋ชจ๋ JRebel Reference๋ฅผ ๊บผ๋ด ์์ํ์ญ์์ค.
์์
Elastic APM ์์ด์ ํธ ํ๋ ์์ํฌ
Elastic APM ์์ด์ ํธ ํ๋ ์์ํฌ๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ธ๋ฉ๋ Elastic APM ์๋น์ค์ ํจ๊ป ์๋ํ๋๋ก ์๋์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํ์ง ๊ธฐ์ค | ๋จ์ผ ๋ฐ์ธ๋ฉ๋ New Relic ์๋น์ค์ ์กด์ฌ. New Relic ์๋น์ค์ ์กด์ฌ๋ ์ด๋ฆ, ๋ ์ด๋ธ ๋๋ ํ๊ทธ์ ํ์ ๋ฌธ์์ด๋ก
elastic-apm
๊ฐ ์๋ ์๋น์ค๋ฅผ ํฌํจํ๋VCAP_SERVICES
ํ์ด๋ก๋๋ก ์ ์๋ฉ๋๋ค.
-- | --
ํ๊ทธ |elastic-agent=<version>
3) ๋น๊ณต์ ์์ฑ ํ์ผ์ด ์์ง๋ง ๋ชจ๋ ์์ฑ์๋ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ณํฉํ ์ ์์ต๋๋ค. ์์ง๋์ด๋ง ํ ๋ฑ์ ์ฐธ์ฌ์์ผ์ผ ํ๋ฉฐ ์ฒ์์ ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๋์ค์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
@nebhale ์ฒ์์ ์ด๊ฒ์ "๋ฒ ํ ๋๋ ์คํ"์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฅ ๋ค์ด๊ฐ๊ณ ๋ฐ๋ณตํฉ๋๊น? ๋๋ ๊ทธ ๊ณผ์ ์ ๋ํด ์ฝ๊ฐ ๋ถ๋ถ๋ช ํฉ๋๋ค. Elastic์ @kmacpher67 ์ด ๊ธฐ๋ฐ์ผ๋ก ์ ๊ณตํ ์ด ํ๋ฅญํ ์์ ์ ๋ฐ๋ณตํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
๋ฌธ์ ๋ณต์ฌ ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ์์ ํฉ๋๋ค. ์ ๊ฑฐ๋ jrebel zero refs.
๋ฆด๋ฆฌ์ค ํ์ด๋ก๋์์ Downloa...
์ ์ฝ์ ๋ก๊ทธ๋ฅผ ๊ณ์ ์ป๊ณ ์์ต๋๋ค.
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
๋ค์ golang ๋ํผ์์ ์ค๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/cloudfoundry/buildpackapplifecycle/blob/master/buildpackrunner/runner.go#L484
๋ง์คํฐ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฒญํด์ผ ํฉ๋๊น?
์ต์ ์
๋ฐ์ดํธ๋ Elastic์ ์๋ index.yml์ ๊ฐ๋ฆฌํค๋ ๊ฒ์ผ๋ก ์๋ํฉ๋๋ค.
@nebhale ์ฒ์์ ์ด๊ฒ์ "๋ฒ ํ ๋๋ ์คํ"์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฅ ๋ค์ด๊ฐ๊ณ ๋ฐ๋ณตํฉ๋๊น? ๋๋ ๊ทธ ๊ณผ์ ์ ๋ํด ์ฝ๊ฐ ๋ถ๋ถ๋ช ํฉ๋๋ค. Elastic์ ์ด ํ๋ฅญํ ์์ ์ ๋ฐ๋ณตํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ์ํด ์ฌ์ ํ
์คํธ๋ฅผ ์์ฑํ๋๋ฐ ๋ก์ปฌ์์ ์คํ๋๋ ๋ฃจ๋น๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ
์คํธ์ ํ์ง์ด ์์ฌ์ค๋ฝ์ต๋๋ค.
๋๋ ๋น๋ ํฉ ๋ณ๊ฒฝ ์ฌํญ์ cf ์ฑ ๊ณต๊ฐ์ผ๋ก ํดํนํ๊ณ ํธ์ํ์ต๋๋ค.
ํ
์คํธ ์ฝ๋:
https://github.com/kmacpher67/java-buildpack/blob/368dc9cc1a08670b49cdbf9d226eaae220ab4b77/spec/java_buildpack/framework/elastic_apm_agent_spec.rb#L80
์ด์์ ์ผ๋ก๋ ์ด ์์ ๋ฐฐํฌ๊ฐ CF ์ฑ ๊ณต๊ฐ์ผ๋ก ์ด๋ํ๋ฉด Elastic 6.4 ์ธ์คํด์ค๋ก ๋ค์ ๋์๊ฐ apm ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค. ๊ฑฐ๊ธฐ์์ ์คํธ๋ฆฌ๋ฐ์ด ์์๋๋ ๊ฒ์ ๋ณด์ญ์์ค.
์ค. 'ํ๋ณตํ๊ฒ ํผํ ์ ๋ฐฐ์ ์ต๋๋ค!!' ์ค์ ๋ก ๋๋ diff๋ฅผ ๋ณผ ์ ์์๊ณ ์ ๊ฑฐํ๋ ๊ฒ์ ์์ downloadcache.rb์ ์ฌ์ ํ ๋๋ฒ๊น ์ด ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. 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
์ด์ ์ถฉ๋ํ์ง ์์ต๋๋ค! ๋์ ํ ๋ธ๋์น๋ฅผ ์
๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ APM์ ์ค์นํ ๋ก์ปฌ cf ELK6.4 ์ค์น๋ฅผ ์์ ํ๊ฒ ์ต๋๋ค.
๋ฌด์์ ๋ณด๊ณ ํ๋์ง ํ์ธํ์ญ์์ค.
@nebhale ๋ด๊ฐ ์ปค๋ฐ์ ์ค์ฟผ์/์ค์ฟผ์ํ๊ธฐ๋ฅผ ์ํ์ญ๋๊น? ๊ฑฐ๊ธฐ์ ์ปค๋ฐ์ผ๋ก +600๋ฒ์ ํดํน ๋ฐ๋ณต์ด ์์ต๋๋ค.
https://github.com/cloudfoundry/java-buildpack/pull/696
@bvader
apm์ ๋ํด ์กด์ฌํ์ง ์๋ port8200์ ๊ณต๊ฒฉํ๋ ค๊ณ ํฉ๋๋ค. ์ง๊ธ ์ค์ ํด์ผ ํฉ๋๋ค.
ํ๋ ฅ์ ์คํ์ ๋ํ ๋น ๋ฅธ ์์ ์ค์ ๊ฐ์ด๋์ ๊ฒ์ผ๋ฅธ ์ฌ๋์ ์ํ ๋น ๋ฅธ ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ต๋๊น?
```
2019-03-14T13:39:43.03-0400 [APP/PROC/WEB/0] OUT 2019-03-14 17:39:43.037 [apm-reporter] ์ค๋ฅ co.elastic.apm.agent.report.IntakeV2ReportingEventHandler ์ด ์ค๋ฅ๊ฐ ์๋ METRICS ์ ํ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ฐ๊ฒฐ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค.
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 1์ด ๋์ ๊บผ์ง(ยฑ10%)````
@kmacpher67
๋์ปค๊ฐ ํธํ๋ค๋ฉด ์ด๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฝ๊ฐ์ Elastic, Kibana, Apm-Server ํ๊ฒฝ์ ์ง์ํฉ๋๋ค.
https://gist.github.com/bvader/9665fa7b3bd69457517e41a7c28b4725
๊ทธ ๋ค์์
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=()
๋ค์์ ๋ก์ปฌ Java... ๋ฐ ํ
์คํธํ ๋ชจ๋ ๊ฒ์ ๋ํ ์ง์นจ์ด ํฌํจ๋ ์ํ Java ์ฑ์
๋๋ค.
https://gist.github.com/bvader/cc9fea7e6f8f709dfa2ad14776eed7fe
apm-server๋ง ์ํ๋ฉด ์ต์ ๊ตฌ์ฑ์ ๋ค์ด๋ก๋/์ค์นํ๊ณ ์ํํฉ๋๋ค. tar.gz ๋ฐ ์ต์ ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
https://www.elastic.co/downloads/apm
Elasticsearch ์ธ์คํด์ค์ 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"
๊ทธ๋ฐ ๋ค์ ์คํ
https://www.elastic.co/guide/en/apm/server/current/setting-up-and-running.html
./apm-server -e
๋ํ ์ง์นจ์ ๋ฐ๋ฅด์ญ์์ค. ์ด๊ฒ์ด Kibana/Elasticsearch ์ฌ์ด๋ ๋์๋ณด๋ ๋ฑ์ ์ ๋ก๋/๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
# After the stack is full running please go to
http://<kibanahost>:5601/app/kibana#/home/tutorial/apm?_g=()
@kmacpher67 APM ์๋ฒ์ ๋ํ ์ฝ๊ฐ์ ๋์/ํ์ ์ด ํ์ํ ๊ฒฝ์ฐ ์๋ ค์ฃผ์ธ์. ํ๋/์ถ์ํ ์ ์์ต๋๋ค. ์ ์ด๋ฉ์ผ๋ก ์ง์ ์ฐ๋ฝํ์ค ์ ์์ต๋๋ค...
์, ์ฒ์์ "๋ฒ ํ ๋๋ ์คํ"์ ๋ํด ํผ๋์ ๋๋ฆฐ ์ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. " comment ์ ๋ CF ํ๋ก์ธ์ค์ ๋น๋ํฉ ํ๋ก์ธ์ค๋ฅผ ๋ฐฐ์ฐ๋ ์ค์ ๋๋ค. I / We / Elastic / OSS ์ปค๋ฎค๋ํฐ๋ ๊ทํ์ ๋ ธ๋ ฅ๊ณผ ์ปค๋ฎค๋ํฐ ์ ์ ์ ์ ์ ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ค์ ์ฃผ์ ๋ณํฉ๋์ง ์์ ๊ฒฝ์ฐ ์ ์ฅ์๋ฅผ ํ๋ค์ดํ๊ณ ๋ด ์ชฝ์์ ์ค์น/์คํ์ ์๋ํฉ๋๋ค.
@nebhale
์ค๋น๊ฐ ๋๋ฉด PR์ ๋ณผ ์ค๋น๊ฐ ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ณํฉ ์์ฒญ PULL์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ง๋ง ์ถฉ๋์ด ์์ต๋๋ค.
๊ฒํ ์์ฒญ๋จ
์ด pull ์์ฒญ์ ๋ํ ๊ฒํ ๊ฐ ์์ฒญ๋์์ต๋๋ค. ๋ณํฉํ ํ์๋ ์์ต๋๋ค.
@nebhale
nebhale์ด(๊ฐ) ๊ฒํ ๋ฅผ ์์ฒญํ์ต๋๋ค.
์ด ๋ถ๊ธฐ์๋ ํด๊ฒฐํด์ผ ํ๋ ์ถฉ๋์ด ์์ต๋๋ค.
์ด ์ ์ฅ์์ ๋ํ ์ฐ๊ธฐ ๊ถํ์ด ์๋ ์ฌ๋๋ง pull ์์ฒญ์ ๋ณํฉํ ์ ์์ต๋๋ค.
์ถฉ๋ํ๋ ํ์ผ
๋๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํํ๊ณ ์ต์ ๋ฒ์ ์ผ๋ก ์ด๋ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ ์ต์ ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด FORK๋ฅผ ์ํํด์ผ ํ ๊ฒ์
๋๋ค.
์ด MR ์ค๋ ๋์์ ์ ๊ฑฐ๋ ๋ค์ ์ ์ถํด์ผ ํ๋์ง ๋ฌผ์์ต๋๋ค.
์ด๊ฒ์ pull ์์ฒญ์ ๋ฐ๋ผ ๋ซ์์ผ ํฉ๋๋ค.
https://github.com/cloudfoundry/java-buildpack/pull/696