๐ŸŽ‰ ์ธ์ƒ ์ฒซ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ: ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ ํ•œ ์ค„ ํ•ด๊ฒฐํ•˜๊ธฐ
๐ŸŽ‰ ์ธ์ƒ ์ฒซ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ: ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ ํ•œ ์ค„ ํ•ด๊ฒฐํ•˜๊ธฐ
moseoh
otel

๐ŸŽ‰ ์ธ์ƒ ์ฒซ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ: ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ ํ•œ ์ค„ ํ•ด๊ฒฐํ•˜๊ธฐ

moseoh ยท 2025๋…„ 07์›” 01์ผ

์šฐ์—ฐ์˜ ์—ฐ์†์œผ๋กœ ์‹œ์ž‘๋œ ์ฒซ ๊ธฐ์—ฌ

์›๋ž˜๋Š” AI ๋ถ„์„ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ธฐ์—ฌํ•  ๋งŒํ•œ ์ด์Šˆ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ์š”. ๊ทธ๋Ÿฐ๋ฐ ๋ถ„์„๋„ ํ•˜๊ธฐ์ „์— OpenTelemetry Collector์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ด์Šˆ(#40962)๋ผ๋Š” ํฅ๋ฏธ๋กœ์šด ๊ธ€์„ ๋ฐœ๊ฒฌํ•˜์—ฌ, ๋ถ„์„ํ•˜๋‹ค๊ฐ€ ์šฐ์—ฐํžˆ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

์ •๋ง ๊ฐ„๋‹จํ•œ ํƒ€์ดํ•‘ ์‹ค์ˆ˜์˜€๋Š”๋ฐ, ์ฒซ ๊ธฐ์—ฌ ์ค€๋น„ ์‹œ๊ฐ„๊นŒ์ง€ ํฌํ•จํ•ด์„œ ๋”ฑ 1์‹œ๊ฐ„ ๋งŒ์— ๊ธฐ์—ฌ๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”. (๋ฌผ๋ก  100๊ฐœ๊ฐ€ ๋„˜๋Š” GitHub Actions๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๋ฐ๋งŒ 20๋ถ„์€ ๋” ๊ฑธ๋ ธ์ง€๋งŒ..)

๋ฌธ์ œ ๋ฐœ๊ฒฌ: โ€œ์–ด? ์ด๊ฒŒ ๋งž๋‚˜?โ€

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ด์Šˆ๋ฅผ ํŒŒํ—ค์น˜๋˜ ์ค‘, receivercreator ์ปดํฌ๋„ŒํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋‹ค๊ฐ€ ๋ญ”๊ฐ€ ์ด์ƒํ•œ ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค:

func filterConsumerSignals(consumer *enhancingConsumer, signals receiverSignals) {
if !signals.metrics {
consumer.metrics = nil
}
if !signals.logs {
consumer.logs = nil
}
if !signals.metrics {// <-- ๋ ์šฉ์Šค
consumer.traces = nil
}
}

๋งˆ์ง€๋ง‰ ์ค„์„ ๋ณด๋‹ˆ ๋ถ„๋ช…ํžˆ !signals.traces์—ฌ์•ผ ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ !signals.metrics๋กœ ๋˜์–ด ์žˆ๋”๋ผ๊ณ ์š”. ์ฒ˜์Œ์—๋Š” โ€œ์„ค๋งˆ ์ด๋Ÿฐ ๊ฐ„๋‹จํ•œ ์‹ค์ˆ˜๊ฐ€ 7๊ฐœ์›”์ด๋‚˜ ๋ฐฉ์น˜๋˜์–ด ์žˆ์„๊นŒ?โ€ ์‹ถ์–ด์„œ ์ •๋ง ๊ณ ์ณ์•ผ ํ• ์ง€ ๋ง์•„์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

์˜์™ธ๋กœ ์˜ค๋ž˜๋œ ๋ฒ„๊ทธ์˜ ์ •์ฒด

๋” ์ž์„ธํžˆ ์ถ”์ ํ•ด๋ณด๋‹ˆ ์ด ๋ฒ„๊ทธ๋Š” ๋ฌด๋ ค 7๊ฐœ์›” ์ „์— ์ƒ๊ธด ๊ฒƒ์ด์—ˆ์–ด์š”! PR #35617์—์„œ ๋กœ๊ทธ ์ง€์› ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹ค์ˆ˜๋กœ ๋“ค์–ด๊ฐ„ ๊ฒƒ ๊ฐ™์€๋ฐ, ๊ทธ๋™์•ˆ ์•„๋ฌด๋„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒŒ ์ •๋ง ์‹ ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋” ํ—ท๊ฐˆ๋ ธ๋˜ ๊ฑด, ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋„ ํ•จ๊ป˜ ๋ˆ„๋ฝ๋˜์–ด ์žˆ์—ˆ๋‹ค๋Š” ์ ์ด์—์š”:

  • TestOnRemoveForMetrics ์กด์žฌ
  • TestOnRemoveForLogs ์กด์žฌ
  • TestOnRemoveForTraces โ€”> โŒย ๋ˆ„๋ฝ ์ฒ˜์Œ์—๋Š” โ€œํ˜น์‹œ ์˜๋„์ ์œผ๋กœ ๋นผ๋‘” ๊ฑด๊ฐ€?โ€ ํ•˜๋Š” ์ƒ๊ฐ๋„ ํ–ˆ์ง€๋งŒ, ์ฝ”๋“œ ํŒจํ„ด์„ ๋ณด๋‹ˆ ๊ทธ๋ƒฅ ๊ฐ™์ด ๋น ๋œจ๋ฆฐ ๊ฒƒ ๊ฐ™๋”๋ผ๊ณ ์š”.

๋‹จ ํ•œ์ค„์„ ์ˆ˜์ •ํ•˜๋ฉด์„œ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋“ค

์™œ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ๋ฒ„๊ทธ๊ฐ€ ์˜ค๋ž˜ ๋ฐฉ์น˜๋˜์—ˆ์„๊นŒ?

  1. ํฐ PR์— ๋ฌปํ˜”์„ ๊ฐ€๋Šฅ์„ฑ: ๋‹น์‹œ PR์ด 1000์ค„์ด ๋„˜๋Š” ๋Œ€๊ทœ๋ชจ ๊ธฐ๋Šฅ ์ถ”๊ฐ€์˜€๋Š”๋ฐ, ์ด๋Ÿฐ ์ž‘์€ ํ—ฌํผ ํ•จ์ˆ˜๋Š” ๊ผผ๊ผผํžˆ ๋ฆฌ๋ทฐ๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์–ด์š”.
  2. ํ…Œ์ŠคํŠธ ๋ˆ„๋ฝ์˜ ์—ฐ์‡„ ํšจ๊ณผ: metrics์™€ logs์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋Š” ์žˆ์—ˆ์ง€๋งŒ, ๋งˆ์นจ traces ํ…Œ์ŠคํŠธ๋„ ์—†์–ด์„œ โ€œ์ด๊ฒŒ ์˜๋„๋œ ๋™์ž‘์ธ๊ฐ€?โ€ ํ•˜๋Š” ํ˜ผ๋ž€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ๋ถ„์„ํ•ด๋ณด๋‹ˆ ๋ช…๋ฐฑํ•œ ๋ฒ„๊ทธ๊ฐ€ ํ™•์‹คํ•ด์„œ, ๋ˆ„๋ฝ๋œ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ด์„œ PR์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ์นœ์ ˆํ–ˆ๋˜ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ๊ณผ์ •

์ฒ˜์Œ์—” โ€œ๋‚ด๊ฐ€ ๊ธฐ์—ฌํ•ด๋„ ๋ ๊นŒ? ๋ญ”๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ค์šธ ๊ฒƒ ๊ฐ™์€๋ฐโ€ฆโ€ ํ•˜๋Š” ์˜ค๋žœ๊ธฐ๊ฐ„ ์‹œ์ž‘ํ•˜์ง€ ๋ชป ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ง‰์ƒ ํ•ด๋ณด๋‹ˆ ๊ณผ์ •์ด ์ •๋ง ์ฒด๊ณ„์ ์ด๊ณ  ์นœ์ ˆํ•˜๋”๋ผ๊ณ ์š”!

  • ์ž๋™ํ™”๋œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ: CLA ์„œ๋ช…, changelog ์ž‘์„ฑ, ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋“ฑ ๋†“์น  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์„ CI์—์„œ ์ž๋™์œผ๋กœ ์ฒดํฌํ•ด์ค๋‹ˆ๋‹ค.
  • ์นœ์ ˆํ•œ ๋ฉ”์ธํ…Œ์ด๋„ˆ: ๋น ๋œจ๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ์–ด์„œ ๋†“์น  ์ผ์ด ์ „ํ˜€ ์—†์—ˆ์–ด์š”.
  • ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ: ์ƒ๊ฐ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ LGTM์„ ์ฃผ๋ฉด์„œ โ€œGood catch!โ€๋ผ๊ณ  ๋ฆฌ๋ทฐ๋„ ๋‚จ๊ฒจ์ฃผ์–ด์„œ ์ •๋ง ๊ธฐ๋ถ„์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค!

์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ๋“ค

1. ์ž‘์€ ๊ฒƒ๋„ ์ถฉ๋ถ„ํžˆ ์˜๋ฏธ ์žˆ๋Š” ๊ธฐ์—ฌ

ํ•œ ์ค„ ์ˆ˜์ •์ด์–ด๋„ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์–ด์š”. ํŠนํžˆ OpenTelemetry์ฒ˜๋Ÿผ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๋”์šฑ ๊ทธ๋ ‡๊ฒ ์ฃ .

2. ํ…Œ์ŠคํŠธ์˜ ์ค‘์š”์„ฑ ์žฌํ™•์ธ

๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋งŒ ๊ณ ์น˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํšŒ๊ท€ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์•ผ ์™„์ „ํ•œ ์ˆ˜์ •์ด๋ผ๋Š” ๊ฑธ ์ฒด๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

3. ์˜คํ”ˆ์†Œ์Šค๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์ ‘๊ทผํ•˜๊ธฐ ์‰ฝ๋‹ค

๊ฑฐ์ฐฝํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์•„๋‹ˆ์–ด๋„ ์ถฉ๋ถ„ํžˆ ์˜๋ฏธ ์žˆ๋Š” ๊ธฐ์—ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ค‘์š”ํ•œ ๊ฑด ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์šฉ๊ธฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ์ ˆํ•œ ์ด์Šˆ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฑด, ์šด์ด ์ข€ ๋”ฐ๋ผ์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์š”

์•ž์œผ๋กœ์˜ ๊ณ„ํš

์ด๋ฒˆ ๊ฒฝํ—˜์œผ๋กœ ์ž์‹ ๊ฐ์ด ๋งŽ์ด ์ƒ๊ฒจ์„œ, ๋‹ค๋ฅธ ์ด์Šˆ๋“ค๋„ ์ ๊ทน์ ์œผ๋กœ ์ฐพ์•„๋ณด๊ณ  ์žˆ์–ด์š”. ํŠนํžˆ OpenTelemetry ์ƒํƒœ๊ณ„๊ฐ€ ์›Œ๋‚™ ํฌ๋‹ค ๋ณด๋‹ˆ ์ด๋Ÿฐ ์ž‘์€ ๋ฒ„๊ทธ๋“ค์ด ๋” ์ˆจ์–ด์žˆ์„ ๊ฒƒ ๊ฐ™๊ฑฐ๋“ ์š”. ๋‹จ์ˆœํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ๋„˜์–ด์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๋„ ๋„์ „ํ•ด๋ณด๊ณ  ์‹ถ์ง€๋งŒ, ์ผ๋‹จ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋” ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒŒ ์šฐ์„ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


PR ๋งํฌ: Fix incorrect signal check in filterConsumerSignals