์น ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด ์ธ์๋ New Relic Ruby ์์ด์ ํธ๋ Resque ์์ ์ ๊ณ์ธกํ ์๋ ์์ต๋๋ค.
์์ ์ธ์ ์บก์ฒ
๋ฃจ๋น ์์ด์ ํธ ๋ฒ์ 3.6.9๋ถํฐ, ์ ํ์ ์ผ๋ก ํ๋ก์ธ์ ํธ๋ ์ด์ค ๋ฐ ํธ๋ ์ด์ค ์ค๋ฅ์์ Resque ์์ ์ธ์๋ฅผ ์บก์ฒํ๋๋ก ๋ฃจ๋น ์์ด์ ํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์คํจํ ์์ ์ ์ฌํํ๋ ค๊ณ ํ ๋ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค. ์์ ์ธ์์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ๊บผ์ ธ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ค๋ฉด ์์ด์ ํธ ๋ฒ์ ์ ๋ง๊ฒ newrelic.yml ํธ์งํ์ธ์.
- newrelic_rpm 3.12.0 ์ด์:
attributes.include: job.resque.args.* - newrelic_rpm 3.6.9 - 3.11.X์ ๊ฒฝ์ฐ:
resque.capture_params: true
์ด ๊ธฐ๋ฅ์ HTTP ์์ฒญ ๋งค๊ฐ๋ณ์๊ฐ ์น ์์ฒญ์ ๋ํ ํธ๋์ญ์
์ถ์ ๋ฐ ์ถ์ ๋ ์ค๋ฅ์์ ์บก์ฒ๋๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ์ผ๋ฐ capture_params ์ต์์ ์ค์ ๊ณผ ๋ค๋ฆ
๋๋ค. ์ด ๋ ๊ฐ์ง ์ค์ ์ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Resque ๋ฒ์ 1.23.1 ์ด์
Resque 1.23.1 ์ด์์ ์คํํ๋ ๊ฒฝ์ฐ New Relic์ Resque ๊ณ์ธก์ด ์๋ํ๊ธฐ ์ํด ์ผ๋ฐ ์์ด์ ํธ ์ค์น ์ ์ฐจ ์ธ์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
Exception: ์ด์ ๋ฒ์ ์ Resque๋ฅผ ์คํํ ๋ Resque before_first_fork, before_fork ๋๋ after_fork ํํฌ์์ NewRelic::Agent ๋ฉ์๋์ ๋ํ ํธ์ถ์ด ๋จ์ ์๋ ๊ฒฝ์ฐ Resque 1.23์ผ๋ก ์
๊ทธ๋ ์ด๋ํ ํ ํด๋น ํธ์ถ์ remove ํด์ผ ํฉ๋๋ค. .1 ์ด์.
๋์ฒด ํฌํฌ ๋ชจ๋
resque-multi-job-forks ๋๋ resque-jobs-per-fork gem์ Resque์ ๋ถ๊ธฐ ๋์์ ๋ณ๊ฒฝํ์ฌ ๊ฐ๋ณ ์์
์ ๋ํด ๋ถ๊ธฐํ์ง ์๊ณ ๋์ ์์
๋ฐฐ์น๋น ํ ๋ฒ ๋ถ๊ธฐํ๋๋ก ํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก FORK_PER_JOB ํ๊ฒฝ ๋ณ์๋ฅผ false ๋ก ์ค์ ํ์ฌ Resque์์ ๋ถ๊ธฐ๋ฅผ ์์ ํ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
์ธ๋ ฅ์์ ์ด๋ฌํ ๋์ฒด ํฌํฌ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ฃจ๋น ์์ด์ ํธ version 3.9.7 or higher ์ ์คํํ๊ณ ์๋์ง ํ์ธํ์ธ์. ์ด์ ๋ฒ์ ์ ๋ฃจ๋น ์์ด์ ํธ๋ ์ด๋ฌํ ๋์ฒด ํฌํฌ ๋ชจ๋์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์์ต๋๋ค. 3.9.7 ์ด์์ผ๋ก ์
๊ทธ๋ ์ด๋ํ๋ ๊ฒฝ์ฐ ์์ด์ ํธ๊ฐ ์ด๋ฌํ ํ๊ฒฝ์์ ์๋ํ๋๋ก ํ๊ธฐ ์ํด ์ด์ ์ ์ฌ์ฉํ์ ์ ์๋ manual_start ๋๋ after_fork ์ ๊ฐ์ NewRelic::Agent ๋ฉ์๋์ ๋ํ ์ง์ ํธ์ถ์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค. .
์ด์ Resque ๋ฒ์ (< 1.23.1)
Resque 1.23.1 ์ด์ ๋ฒ์ ์์ New Relic์ Ruby ์์ด์ ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ New Relic์ ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ํด Resque 1.23.1 ์ด์์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์ Resque ์์
์ ์๋ช
๋์ ์ค์ํ ์ง์ ์ ์ฌ์ฉ์ ์ ์ ์ฝ๋๋ฅผ ์ฝ์
ํ๊ธฐ ์ํด Resque( before_fork , after_fork ๋ฑ)์ ์ํด ๋
ธ์ถ๋ ํํฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. New Relic Ruby ์์ด์ ํธ๋ ๊ณ์ธก์ ๋ฐฐ์นํ ์ ์๋๋ก ์ด๋ฌํ ํํฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
1.23.1 ์ด์ ์ Resque ๋ฒ์ ์์๋ ํํฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์ํ ์ ์์ต๋๋ค. ๋ง์ง๋ง ์ ์๊ฐ ์ฐ์ ํฉ๋๋ค. Resque ๋ฒ์ 1.23.1 ์ด์์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ(ํํฌ๋ฅผ ์๋ก ๋ฎ์ด์ฐ์ง ์๊ณ ์ฌ๋ฌ ๋ฒ ์ ์ํ ์ ์์), ํ์ํ New Relic ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์ ์ ์ Resque ํํฌ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋ค์์ ์์ ๋๋ค.
Example: Modifying custom Resque hooks
์ฌ์ฉ์ ์ ์ ์ฝ๋๊ฐ ์๋ ํํฌ์ ๋ํ ์ ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์์ด์ ํธ๊ฐ ์๋์ผ๋ก ์ค์นํฉ๋๋ค.
Resque.before_first_fork do # ... your custom hook code ... NewRelic::Agent.manual_start(:dispatcher => :resque, :sync_startup => true, :start_channel_listener => true)end Resque.before_fork do |job| # ... your custom hook code ... NewRelic::Agent.register_report_channel(job.object_id)end Resque.after_fork do |job| # ... your custom hook code ... NewRelic::Agent.after_fork(:report_to_channel => job.object_id, :report_instance_busy => false)end๊ต์ฐฉ ์ํ ์์
์ผ๋ถ ๊ณ ๊ฐ(ํนํ ์์ ์ฒ๋ฆฌ๋์ด ๋งค์ฐ ๋์ ๊ณ ๊ฐ)์ Ruby ์์ด์ ํธ๊ฐ ํ์ฑํ๋ Resque ์์ ์ ํ๋ก์ธ์ค์์ ๊ฐํ์ ์ธ ๊ต์ฐฉ ์ํ๋ฅผ ๋ณด๊ณ ํ์ต๋๋ค. ์ด๋ฌํ ๊ต์ฐฉ ์ํ๋ Ruby ์์ด์ ํธ๊ฐ New Relic ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ Resque์ ๋ถ๊ธฐ ๋์ ๊ฐ์ ์๋ชป๋ ์ํธ ์์ฉ์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- Resque ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋
FORK_PER_JOBํ๊ฒฝ ๋ณ์๋ฅผfalse๋ก ์ค์ ํ์ฌ Resque์ ๋ถ๊ธฐ ๋์์ ๋นํ์ฑํํฉ๋๋ค. - Ruby ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
resolv-replace๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Ruby์ ๊ธฐ๋ณธ DNS ํ์ธ ์ฝ๋๋ฅผ ์์ํ Ruby ๋ฒ์ ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
Ruby ์์ด์ ํธ๋ Resque ๋ง์คํฐ ํ๋ก์ธ์ค์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ New Relic ์์ง๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๋๋ค. ์ผ๋ถ ํ๊ฒฝ์์ ์ด ์ค๋ ๋๋ DNS ํ์ธ ์ค(New Relic ์์ง๊ธฐ์ ํธ์คํธ ์ด๋ฆ์ ํ์ธํ ๋) ๊ธฐ๋ณธ ์ ๊ธ์ ํ๋ํฉ๋๋ค.
๊ธฐ๋ณธ Resque ๋ง์คํฐ ํ๋ก์ธ์ค์ ๊ธฐ๋ณธ ์ค๋ ๋๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด fork๋ฅผ ํธ์ถํ๋ ๋์ ์ด ๊ธฐ๋ณธ ์ ๊ธ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ์ํด ์ ์ง๋๋ ๊ฒฝ์ฐ์๋ ๋ถ๊ธฐ๋ ์์ ํ๋ก์ธ์ค์์ ์ ์ง๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ fork ์ ํธ์ถ ์ค๋ ๋๋ง ๋ณต์ฌํ๋ฏ๋ก ๊ธฐ๋ณธ ์ ๊ธ์ ๋ณด์ ํ๊ณ ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ ํ์ ํ๋ก์ธ์ค์ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ ์ ๊ธ์ด ํด์ ๋์ง ์์ต๋๋ค. ์์ ํ๋ก์ธ์ค๊ฐ DNS ํ์ธ์ ์๋ํ๋ฉด ๋์ผํ ๊ธฐ๋ณธ ์ ๊ธ ๋ฐ ๊ต์ฐฉ ์ํ๋ฅผ ์ป์ผ๋ ค๊ณ ์๋ํฉ๋๋ค. ์ด Github ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด Ruby์ ๊ธฐ๋ณธ DNS ํ์ธ ๊ฒฝ๋ก ๋์ resolv-replace ์ ์ฌ์ฉํ์ธ์.