ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Azure Event Hubs ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Amazon MSK ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Confluent Cloud ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ๋“ฑ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Google Cloud

ํ”Œ๋žซํผ ๋กœ๊ทธ ์ •๋ณด

์ง€์›๋˜๋Š” Google Cloud ์„œ๋น„์Šค๋Š” ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ์™€ ํ™œ๋™์„ ์บก์ฒ˜ํ•˜๋Š” ์ž์ฒด ํ”Œ๋žซํผ ๋กœ๊ทธ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ ๋กœ๊ทธ์—๋Š” ์„ฑ๊ณต์ ์ธ ์ž‘์—…, ์˜ค๋ฅ˜, ๊ฒฝ๊ณ , ๊ธฐํƒ€ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋น„๋กฏํ•ด ์„œ๋น„์Šค ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์— ๊ด€ํ•œ ์„ธ๋ถ€์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ๋กœ๊ทธ๋Š” Cloud Logging์˜ ์ผ๋ถ€์ด๋ฉฐ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”Œ๋žซํผ ๋กœ๊ทธ์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ๋ฐ ํ•„ํ„ฐ๋ง์„ ํ—ˆ์šฉํ•˜๋Š” JSON ๊ฐ์ฒด๋กœ ๊ตฌ์กฐํ™”๋ฉ๋‹ˆ๋‹ค.

  • ์ฝ˜์†”์˜ ๋กœ๊น…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ Cloud Monitoring ๋ฐ ๊ธฐํƒ€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ, ์•Œ๋ฆผ, ๊ธฐํƒ€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ ์Šคํ† ๋ฆฌ์ง€๋Š” ์ˆ˜์ง‘๋œ ๋ณผ๋ฅจ ๋ฐ ๋ณด๊ด€ ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ๋กœ๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Google Cloud Platform ๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์‚ฌ์šฉ ์ค‘์ธ ์ฃผ์ œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์š”๊ฑด์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์—ญํ•  ๋ฐ ๊ถŒํ•œ

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋กœ๊น…์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ๋ทฐ์–ด (roles/logging.viewer) Identity and Access Management (IAM) ์—ญํ• ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Logging ์•ก์„ธ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ IAM์œผ๋กœ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋‹ค์Œ์€ IAM ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ  ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ์ˆ˜์ง‘ ์‹คํŒจ ์ •๋ณด

๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ง‘๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ

Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ง‘๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Cloud Storage ๊ฐ์ฒด ๋˜๋Š” ๊ฐ์ฒด์˜ ์ผ๋ถ€๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ชฉ๋ก์€ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ์ˆ˜์ง‘์ด ์‹คํŒจํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฉ”์ผ ํฌ๊ธฐ

    • ๊ฐœ๋ณ„ ๋ฉ”์ผ์€ 10MB๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ „์ฒด ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

    • Avro ๋˜๋Š” Pub/Sub Avro ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Avro ๋ธ”๋ก์€ 16MB๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋” ํฐ Avro ๋ธ”๋ก์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

  • ๋ฉ”์‹œ์ง€ ์†์„ฑ

    • ๋ฉ”์‹œ์ง€์—๋Š” ์ตœ๋Œ€ 100๊ฐœ์˜ ์†์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์ง‘๋˜๋ฉด ์ถ”๊ฐ€ ์†์„ฑ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

    • ์†์„ฑ ํ‚ค๋Š” 256๋ฐ”์ดํŠธ๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ฐ’์€ 1,024๋ฐ”์ดํŠธ๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ’์ด ์ตœ๋Œ€ ํฌ๊ธฐ๋ณด๋‹ค ํฌ๋ฉด ์ˆ˜์ง‘ ์‹œ ์ „์ฒด ํ‚ค-๊ฐ’ ์Œ์ด ๋ฉ”์‹œ์ง€์—์„œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

      ๋ฉ”์‹œ์ง€ ํ‚ค์™€ ์†์„ฑ ์‚ฌ์šฉ์— ๊ด€ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๊ฒŒ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  • Avro ํ˜•์‹

    • Avro ๊ฐ์ฒด์˜ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹์ด ์ž˜๋ชป๋˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์ง‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ˜•์‹

    • ์ง€์›๋˜๋Š” Avro ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜์ง€ ์•Š๋Š” ํ˜•์‹์€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Azure Event Hubs, Amazon MSK, Confluent Cloud ์ฃผ์ œ ๊ฐ€์ ธ์˜ค๊ธฐ

Azure Event Hubs, Amazon MSK, Confluent Cloud ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ง‘๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ชฉ๋ก์€ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ์ˆ˜์ง‘์ด ์‹คํŒจํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฉ”์ผ ํฌ๊ธฐ

    • ๊ฐœ๋ณ„ ๋ฉ”์ผ์€ 10MB๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ „์ฒด ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ์†์„ฑ

    • ๋ฉ”์‹œ์ง€์—๋Š” ์ตœ๋Œ€ 100๊ฐœ์˜ ์†์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์ง‘๋˜๋ฉด ์ถ”๊ฐ€ ์†์„ฑ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

    • ์†์„ฑ ํ‚ค๋Š” 256๋ฐ”์ดํŠธ๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ฐ’์€ 1,024๋ฐ”์ดํŠธ๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ’์ด ์ตœ๋Œ€ ํฌ๊ธฐ๋ณด๋‹ค ํฌ๋ฉด ์ˆ˜์ง‘ ์‹œ ์ „์ฒด ํ‚ค-๊ฐ’ ์Œ์ด ๋ฉ”์‹œ์ง€์—์„œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

      ๋ฉ”์‹œ์ง€ ํ‚ค์™€ ์†์„ฑ ์‚ฌ์šฉ์— ๊ด€ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๊ฒŒ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”Œ๋žซํผ ๋กœ๊ทธ ์‚ฌ์šฉ ์„ค์ •

ํ”Œ๋žซํผ ๋กœ๊ทธ๋Š” ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.

๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๋™์•ˆ ํ”Œ๋žซํผ ๋กœ๊ทธ ์‚ฌ์šฉ ์„ค์ •

๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์ฃผ์ œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์ œ๋กœ ์ด๋™

  2. ์ฃผ์ œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์ œ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

  3. ์ฃผ์ œ ID ํ•„๋“œ์— ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ID๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์ œ ์ด๋ฆ„ ์ง€์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋ฆ„ ์ง€์ • ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  4. ๊ธฐ๋ณธ ๊ตฌ๋… ์ถ”๊ฐ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  5. ์ˆ˜์ง‘ ์‚ฌ์šฉ ์„ค์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ๋‹ค๋ฅธ ๊ธฐ๋ณธ ์„ค์ •์€ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  7. ์ฃผ์ œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด --ingestion-log-severity ํ”Œ๋ž˜๊ทธ๊ฐ€ WARNING ๋˜๋Š” INFO, DEBUG์™€ ๊ฐ™์€ ๋‚ฎ์€ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘์ธ ์ฃผ์ œ์— ๋Œ€ํ•ด gcloud pubsub topics create ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด gcloud pubsub topics create ๋ช…๋ น์–ด์— --ingestion-log-severity=WARNING ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    gcloud pubsub topics create TOPIC_ID \
        --cloud-storage-ingestion-bucket=BUCKET_NAME \
        --cloud-storage-ingestion-input-format=INPUT_FORMAT \
        --ingestion-log-severity=WARNING

๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ํ”Œ๋žซํผ ๋กœ๊ทธ ์‚ฌ์šฉ ์„ค์ •

๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์ฃผ์ œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์ œ๋กœ ์ด๋™

  2. ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ (Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Azure Event Hubs ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Amazon MSK ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ๋˜๋Š” Confluent Cloud ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์ฃผ์ œ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ํ”Œ๋žซํผ ๋กœ๊ทธ ์‚ฌ์šฉ ์„ค์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์—…๋ฐ์ดํŠธ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ์ˆ˜์ง‘-๋กœ๊ทธ-์‹ฌ๊ฐ๋„๊ฐ€ WARNING ๋˜๋Š” INFO, DEBUG์™€ ๊ฐ™์€ ๋” ๋‚ฎ์€ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘์ธ ์ฃผ์ œ์˜ ์„ค์ •์„ ์ง€์ •ํ•˜๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gcloud pubsub topics update ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ๋กœ๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด gcloud pubsub topics create ๋ช…๋ น์–ด์— --ingestion-log-severity=WARNING ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•˜๊ณ  Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ์„ค์ •์„ ์ง€์ •ํ•˜๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ ๊ฐ’์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    gcloud pubsub topics update TOPIC_ID \
        --cloud-storage-ingestion-bucket=BUCKET_NAME \
        --cloud-storage-ingestion-input-format=INPUT_FORMAT \
        --cloud-storage-ingestion-text-delimiter=TEXT_DELIMITER \
        --cloud-storage-ingestion-minimum-object-create-time=MINIMUM_OBJECT_CREATE_TIME \
        --cloud-storage-ingestion-match-glob=MATCH_GLOB
        --ingestion-log-severity=WARNING

ํ”Œ๋žซํผ ๋กœ๊ทธ ์‚ฌ์šฉ ์ค‘์ง€

์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์ฃผ์ œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์ œ๋กœ ์ด๋™

  2. ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ (Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Azure Event Hubs ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Amazon MSK ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ๋˜๋Š” Confluent Cloud ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์ฃผ์ œ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ํ”Œ๋žซํผ ๋กœ๊ทธ ์‚ฌ์šฉ ์„ค์ •์„ ์„ ํƒ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  5. ์—…๋ฐ์ดํŠธ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ์ˆ˜์ง‘-๋กœ๊ทธ-์‹ฌ๊ฐ๋„๊ฐ€ DISABLED๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘์ธ ์ฃผ์ œ์˜ ์„ค์ •์„ ์ง€์ •ํ•˜๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gcloud pubsub topics update ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์—์„œ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด gcloud pubsub topics update ๋ช…๋ น์–ด์— --ingestion-log-severity=DISABLED ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•˜๊ณ  Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ์„ค์ •์„ ์ง€์ •ํ•˜๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    gcloud pubsub topics update TOPIC_ID \
        --cloud-storage-ingestion-bucket=BUCKET_NAME \
        --cloud-storage-ingestion-input-format=INPUT_FORMAT \
        --cloud-storage-ingestion-text-delimiter=TEXT_DELIMITER \
        --cloud-storage-ingestion-minimum-object-create-time=MINIMUM_OBJECT_CREATE_TIME \
        --cloud-storage-ingestion-match-glob=MATCH_GLOB
        --ingestion-log-severity=DISABLED

ํ”Œ๋žซํผ ๋กœ๊ทธ ๋ณด๊ธฐ

์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Google Cloud ์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ๋กœ ์ด๋™

  2. Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฉ”๋‰ด์—์„œ ๊ธฐ์กด ๋กœ๊ทธ ๋ทฐ์–ด๋ฅผ ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ์ฟผ๋ฆฌ ํ‘œ์‹œ ์ „ํ™˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ(Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Azure Event Hubs ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Amazon MSK ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ๋˜๋Š” Confluent Cloud ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ)์˜ ํ•ญ๋ชฉ๋งŒ ํ‘œ์‹œ๋˜๋„๋ก ๋กœ๊ทธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋ ค๋ฉด ์ฟผ๋ฆฌ ํ•„๋“œ์— "resource.type=pubsub_topic AND severity=WARNING"์„ ์ž…๋ ฅํ•˜๊ณ  ์ฟผ๋ฆฌ ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  6. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ฐฝ์—์„œ ์‹œ๊ฐ„ ์ˆ˜์ •์„ ํด๋ฆญํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ธฐ๊ฐ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ ์‚ฌ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

gcloud CLI

gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ํ”Œ๋žซํผ ๋กœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด gcloud logging read ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ (Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Azure Event Hubs ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ, Amazon MSK ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ ๋˜๋Š” Confluent Cloud ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ)์˜ ํ”Œ๋žซํผ ๋กœ๊ทธ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ œํ•œํ•˜๋„๋ก ํ•„ํ„ฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud logging read "resource.type=pubsub_topic AND severity=WARNING"

Cloud Logging API

entries.list Cloud Logging API ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Cloud Storage ๊ฐ€์ ธ์˜ค๊ธฐ ์ฃผ์ œ์˜ ํ”Œ๋žซํผ ๋กœ๊ทธ๋งŒ ํฌํ•จ๋˜๋„๋ก ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋ ค๋ฉด filter ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ƒ˜ํ”Œ JSON ์š”์ฒญ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

{
"resourceNames":
  [
    "projects/my-project-name"
  ],
  "orderBy": "timestamp desc",
  "filter": "resource.type=\"pubsub_topic\" AND severity=WARNING"
}

ํ”Œ๋žซํผ ๋กœ๊ทธ ํ˜•์‹ ๋ณด๊ธฐ ๋ฐ ์ดํ•ด

๋‹ค์Œ ์„น์…˜์—๋Š” ์ƒ˜ํ”Œ ํ”Œ๋žซํผ ๋กœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ”Œ๋žซํผ ๋กœ๊ทธ์˜ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํ”Œ๋žซํผ ๋กœ๊ทธ ๊ด€๋ จ ํ•„๋“œ๊ฐ€ jsonPayload ๊ฐ์ฒด ๋‚ด์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud Storage

Avro ์‹คํŒจ

{
  "insertId": "1xnzx8md4768",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "cloudStorageFailure": {
      "objectGeneration": "1661148924738910",
      "bucket": "bucket_in_avro_format",
      "objectName": "counts/taxi-2022-08-15T06:10:00.000Z-2022-08-15T06:15:00.000Z-pane-0-last-00-of-01",
      "avroFailureReason": {}
    },
    "topic": "projects/my-project/topics/avro_bucket_topic",
    "errorMessage": "Unable to parse the header of the object. The object won't be ingested."
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "project_id": "my-project",
      "topic_id": "avro_bucket_topic"
    }
  },
  "timestamp": "2024-10-07T18:55:45.650103193Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2024-10-07T18:55:46.678221398Z"
}
๋กœ๊ทธ ํ•„๋“œ ์„ค๋ช…
insertId ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
jsonPayload.@type ์ด๋ฒคํŠธ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ type.googleapis.com/google.pubsub.v1.IngestionFailureEvent์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.objectGeneration Cloud Storage ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.bucket ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋œ Cloud Storage ๋ฒ„ํ‚ท์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.objectName Cloud Storage ๊ฐ์ฒด์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.avroFailureReason ๋” ๊ตฌ์ฒด์ ์ธ Avro ํŒŒ์‹ฑ ์˜ค๋ฅ˜ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.
jsonPayload.topic ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋  Pub/Sub ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.
jsonPayload.errorMessage ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
resource.type ๋ฆฌ์†Œ์Šค ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ pubsub_topic์ž…๋‹ˆ๋‹ค.
resource.labels.project_id Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
resource.labels.topic_id Pub/Sub ์ฃผ์ œ ID์ž…๋‹ˆ๋‹ค.
timestamp ๋กœ๊ทธ ํ•ญ๋ชฉ ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค.
severity ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์ด WARNING์ž…๋‹ˆ๋‹ค.
logName ๋กœ๊ทธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
receiveTimestamp ๋กœ๊ทธ ํ•ญ๋ชฉ ์ˆ˜์‹  ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ์‹คํŒจ

{
  "insertId": "1kc4puoag",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "cloudStorageFailure": {
      "bucket": "bucket_in_text_format",
      "apiViolationReason": {},
      "objectName": "counts/taxi-2022-08-15T06:10:00.000Z-2022-08-15T06:15:00.000Z-pane-0-last-00-of-01",
      "objectGeneration": "1727990048026758"
    },
    "topic": "projects/my-project/topics/large_text_bucket_topic",
    "errorMessage": "The message has exceeded the maximum allowed size of 10000000 bytes. The message won't be published."
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "large_text_bucket_topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2024-10-09T14:09:07.760488386Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2024-10-09T14:09:08.483589656Z"
}
๋กœ๊ทธ ํ•„๋“œ ์„ค๋ช…
insertId ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
jsonPayload.@type ์ด๋ฒคํŠธ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ type.googleapis.com/google.pubsub.v1.IngestionFailureEvent์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.objectGeneration Cloud Storage ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.bucket ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋œ Cloud Storage ๋ฒ„ํ‚ท์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.objectName Cloud Storage ๊ฐ์ฒด์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
jsonPayload.cloudStorageFailure.apiViolationReason API ์œ„๋ฐ˜์— ๊ด€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.
jsonPayload.topic Pub/Sub ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.
jsonPayload.errorMessage ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
resource.type ๋ฆฌ์†Œ์Šค ์œ ํ˜•, ํ•ญ์ƒ pubsub_topic์ž…๋‹ˆ๋‹ค.
resource.labels.project_id Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
resource.labels.topic_id Pub/Sub ์ฃผ์ œ ID์ž…๋‹ˆ๋‹ค.
timestamp ๋กœ๊ทธ ํ•ญ๋ชฉ ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค.
severity ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์ด WARNING์ž…๋‹ˆ๋‹ค.
logName ๋กœ๊ทธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
receiveTimestamp Cloud Logging์—์„œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ˆ˜์‹ ํ•œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

Amazon MSK

API ์œ„๋ฐ˜

  {
  "insertId": "k3breb2q",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "awsMskFailure": {
      "apiViolationReason": {},
      "clusterArn": "arn:aws:kafka:us-east-1:291552718126:cluster/cluster-ingestion/abb9faea-4070-4eb76-9c21-f98abca92eaf-2",
      "kafkaTopic": "msk-topic",
      "partitionId": "1",
      "offset": "11"
    },
    "errorMessage": "The value of an attribute in the message exceeded the maximum allowed size of 1024 bytes. Number of bytes in the value: 1025. Key: my header. Value: my very large value โ€ฆ",
    "topic": "projects/my-project/topics/msk-import-topic"
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "msk-import-topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2025-02-03T16:18:14.693357960Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2025-02-03T16:18:16.241643258Z"
}
๋กœ๊ทธ ํ•„๋“œ ์„ค๋ช…
insertId ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
jsonPayload.@type ์ด๋ฒคํŠธ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ type.googleapis.com/google.pubsub.v1.IngestionFailureEvent์ž…๋‹ˆ๋‹ค.
jsonPayload.awsMskFailure.clusterArn ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ฃผ์ œ์˜ ํด๋Ÿฌ์Šคํ„ฐ ARN์ž…๋‹ˆ๋‹ค.
jsonPayload.awsMskFailure.kafkaTopic ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” Kafka ์ฃผ์ œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
jsonPayload.awsMskFailure.partitionId ์ˆ˜์ง‘๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋œ ํŒŒํ‹ฐ์…˜์˜ ID์ž…๋‹ˆ๋‹ค.
jsonPayload.awsMskFailure.offset ์ˆ˜์ง‘๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€์˜ ํŒŒํ‹ฐ์…˜ ๋‚ด ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค.
jsonPayload.awsMskFailure.apiViolationReason API ์œ„๋ฐ˜์— ๊ด€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.
jsonPayload.topic Pub/Sub ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.
jsonPayload.errorMessage ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
resource.type ๋ฆฌ์†Œ์Šค ์œ ํ˜•, ํ•ญ์ƒ pubsub_topic์ž…๋‹ˆ๋‹ค.
resource.labels.project_id Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
resource.labels.topic_id Pub/Sub ์ฃผ์ œ ID์ž…๋‹ˆ๋‹ค.
timestamp ๋กœ๊ทธ ํ•ญ๋ชฉ ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค.
severity ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์ด WARNING์ž…๋‹ˆ๋‹ค.
logName ๋กœ๊ทธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
receiveTimestamp Cloud Logging์—์„œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ˆ˜์‹ ํ•œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

Azure Event Hubs

API ์œ„๋ฐ˜

{
  "insertId": "i1fbqnb12",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "azureEventHubsFailure": {
      "apiViolationReason": {},
      "namespace": "my-namespace",
      "eventHub": "my-event-hub",
      "partitionId": "1",
      "offset": "15"
    },
    "errorMessage": "The value of an attribute in the message exceeded the maximum allowed size of 1024 bytes. Number of bytes in the value: 1025. Key: my header. Value: my very large value โ€ฆ",
    "topic": "projects/my-project/topics/event-hubs-import-topic"
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "event-hubs-import-topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2025-02-03T16:18:14.693357960Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2025-02-03T14:05:12.338211450Z"
}
๋กœ๊ทธ ํ•„๋“œ ์„ค๋ช…
insertId ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
jsonPayload.@type ์ด๋ฒคํŠธ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ type.googleapis.com/google.pubsub.v1.IngestionFailureEvent์ž…๋‹ˆ๋‹ค.
jsonPayload.azureEventHubsFailure.namespace ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ—ˆ๋ธŒ๊ฐ€ ํฌํ•จ๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.
jsonPayload.azureEventHubsFailure.eventHub ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ—ˆ๋ธŒ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
jsonPayload.azureEventHubsFailure.partitionId ์ˆ˜์ง‘๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋œ ํŒŒํ‹ฐ์…˜์˜ ID์ž…๋‹ˆ๋‹ค.
jsonPayload.azureEventHubsFailure.offset ์ˆ˜์ง‘๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€์˜ ํŒŒํ‹ฐ์…˜ ๋‚ด ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค.
jsonPayload.azureEventHubsFailure.apiViolationReason API ์œ„๋ฐ˜์— ๊ด€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.
jsonPayload.topic Pub/Sub ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.
jsonPayload.errorMessage ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
resource.type ๋ฆฌ์†Œ์Šค ์œ ํ˜•, ํ•ญ์ƒ pubsub_topic์ž…๋‹ˆ๋‹ค.
resource.labels.project_id Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
resource.labels.topic_id Pub/Sub ์ฃผ์ œ ID์ž…๋‹ˆ๋‹ค.
timestamp ๋กœ๊ทธ ํ•ญ๋ชฉ ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค.
severity ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์ด WARNING์ž…๋‹ˆ๋‹ค.
logName ๋กœ๊ทธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
receiveTimestamp Cloud Logging์—์„œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ˆ˜์‹ ํ•œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

Confluent Cloud

ํ…์ŠคํŠธ ์‹คํŒจ

{
  "insertId": "i1fbqnb14",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "confluentCloudFailure": {
      "apiViolationReason": {},
      "clusterId": "lma-1x18ae",
      "kafkaTopic": "confluent-topic",
      "partitionId": "1",
      "offset": "19"
    },
    "errorMessage": "The value of an attribute in the message exceeded the maximum allowed size of 1024 bytes. Number of bytes in the value: 1025. Key: my header. Value: my very large value โ€ฆ",
    "topic": "projects/my-project/topics/confluent-import-topic"
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "confluent-import-topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2025-02-03T16:18:14.693357960Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2025-02-03T17:03:11.428221440Z"
}
๋กœ๊ทธ ํ•„๋“œ ์„ค๋ช…
insertId ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
jsonPayload.@type ์ด๋ฒคํŠธ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ type.googleapis.com/google.pubsub.v1.IngestionFailureEvent์ž…๋‹ˆ๋‹ค.
jsonPayload.confluentCloudFailure.clusterId ์ˆ˜์ง‘๋˜๋Š” ์ฃผ์ œ๊ฐ€ ํฌํ•จ๋œ ํด๋Ÿฌ์Šคํ„ฐ ID์ž…๋‹ˆ๋‹ค.
jsonPayload.confluentCloudFailure.kafkaTopic ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” Kafka ์ฃผ์ œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
jsonPayload.confluentCloudFailure.partitionId ์ˆ˜์ง‘๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋œ ํŒŒํ‹ฐ์…˜์˜ ID์ž…๋‹ˆ๋‹ค.
jsonPayload.confluentCloudFailure.offset ์ˆ˜์ง‘๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€์˜ ํŒŒํ‹ฐ์…˜ ๋‚ด ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค.
jsonPayload.confluentCloudFailure.apiViolationReason API ์œ„๋ฐ˜์— ๊ด€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.
jsonPayload.topic Pub/Sub ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.
jsonPayload.errorMessage ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
resource.type ๋ฆฌ์†Œ์Šค ์œ ํ˜•, ํ•ญ์ƒ pubsub_topic์ž…๋‹ˆ๋‹ค.
resource.labels.project_id Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
resource.labels.topic_id Pub/Sub ์ฃผ์ œ ID์ž…๋‹ˆ๋‹ค.
timestamp ๋กœ๊ทธ ํ•ญ๋ชฉ ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค.
severity ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์ด WARNING์ž…๋‹ˆ๋‹ค.
logName ๋กœ๊ทธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
receiveTimestamp Cloud Logging์—์„œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ˆ˜์‹ ํ•œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
Apache Kafkaยฎ๋Š” ๋ฏธ๊ตญ ๋ฐ/๋˜๋Š” ๋‹ค๋ฅธ ๊ตญ๊ฐ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” Apache Software Foundation ๋˜๋Š” ํ•ด๋‹น ๊ณ„์—ด์‚ฌ์˜ ๋“ฑ๋ก ์ƒํ‘œ์ž…๋‹ˆ๋‹ค.