๋กœ๊ทธ ํ•ญ๋ชฉ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง

์ด ๋ฌธ์„œ์—์„œ๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์„ ํ†ตํ•ด ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, gcloud CLI ๋ช…๋ น์–ด gcloud alpha logging tail ๋ฐ Cloud Logging API ๋ฉ”์„œ๋“œ entries.tail๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ, gcloud logging read๋‚˜ API ๋ฉ”์„œ๋“œ entries.list๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ๋ถ„์„ํ•˜๋ฉด Cloud Logging์ด ์ €์žฅํ•œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ฑฐ๋‚˜ ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋งํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Cloud Logging API์— ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ•  ๋•Œ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์˜ ์ŠคํŠธ๋ฆผ ๋กœ๊ทธ

๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์—์„œ ์ŠคํŠธ๋ฆผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š” ๋กœ๊ทธ๋งŒ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

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

    ๊ฒ€์ƒ‰์ฐฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํŽ˜์ด์ง€๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ ๋ถ€์ œ๋ชฉ์ด Logging์ธ ๊ฒฐ๊ณผ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  2. ์ฟผ๋ฆฌ ํ•„๋“œ์— ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Logging์—์„œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋ฉด ์ฟผ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š” ๋กœ๊ทธ๋งŒ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ฐฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด Logging์— ์ตœ๊ทผ์— ์ €์žฅ๋œ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ํŒจ๋„์—์„œ ์Šคํฌ๋กค๋ฐ”๋ฅผ ์„ ํƒํ•  ๋•Œ๊นŒ์ง€ ๋กœ๊ทธ๊ฐ€ ๊ณ„์† ์ŠคํŠธ๋ฆฌ๋ฐ๋ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์ค‘์ง€๋˜๋ฉด ์ŠคํŠธ๋ฆฌ๋ฐ ๋‹ค์‹œ ์‹œ์ž‘ ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์—์„œ ์ฟผ๋ฆฌ ๋นŒ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Google Cloud CLI์—์„œ ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง ์‚ฌ์šฉ

์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด Google Cloud CLI ๋˜๋Š” Cloud Logging API๋ฅผ ์‚ฌ์šฉํ•ด์„œ Cloud Logging์ด ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์€ ํ•„๋“œ ์ˆ˜์ค€ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋กœ๊ทธ ๋ฒ„ํ‚ท์— ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์—์„œ ์ด๋Ÿฌํ•œ ๋ฒ„ํ‚ท์— ๋Œ€ํ•ด ๋กœ๊ทธ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์„ ์œ„ํ•œ API ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ entries.tail ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

gcloud alpha logging tail ์„ค์น˜

gcloud alpha logging tail์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Python 3๊ณผ grpcio Python ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Python ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•ˆ๋‚ด๋Š” Python ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. grpcio ํŒจํ‚ค์ง€ ์„ค์น˜์— ํ•„์š”ํ•œ Python ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž pip์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Python ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์—ฌ gcloud alpha logging tail์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud CLI๊ฐ€ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Google Cloud CLI ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•ˆ๋‚ด๋Š” Google Cloud CLI ์„ค์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ๋ฒ„์ „ 302.0.0 ์ด์ƒ์˜ gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    gcloud version
    

    gcloud CLI ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ•์€ gcloud components update๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  3. gcloud CLI ์•ŒํŒŒ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    gcloud components install alpha
    
  4. MacOS, Linux, Cloud Shell ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ:

    1. gRPC ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

       sudo pip3 install grpcio
      
    2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ CLOUDSDK_PYTHON_SITEPACKAGES๋ฅผ ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Google Cloud ํ”„๋กœ์ ํŠธ ID๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค์Œ์„ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค.

    gcloud config set project PROJECT_ID
    gcloud auth login
    

    ํ”„๋กœ์ ํŠธ ID๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  6. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ gcloud alpha logging tail์ด ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    gcloud alpha logging tail
    

    ์ด ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    Initializing tail session.

    ์ด์ œ Logging์—์„œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๊ธฐ๋กํ•˜๋Š” ๋™์•ˆ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง ์„ธ์…˜ ์ค‘ ๋กœ๊ทธ ํ•ญ๋ชฉ

์‹ค์‹œ๊ฐ„ ํ…Œ์ผ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud alpha logging tail ์ฐธ์กฐ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฒ„ํผ๋ง ๋ฐ ์ˆœ์„œ ์ง€์ •

Logging์€ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์€ ์ž‘์„ฑ ์ค‘์ธ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋ณผ ๋•Œ์™€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ณผ ๋•Œ์˜ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋„๋ก ๋ฒ„ํผ ๊ธฐ๊ฐ„ ์„ค์ •์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 0์—์„œ 60์ดˆ ์‚ฌ์ด์˜ ๋ฒ„ํผ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„ํผ ๊ธฐ๊ฐ„์˜ ๋‹ค์Œ ํŠน์„ฑ์— ์œ ์˜ํ•˜์„ธ์š”.

  • ๊ธฐ๋ณธ ๋ฒ„ํผ ๊ธฐ๊ฐ„์€ 2์ดˆ์ž…๋‹ˆ๋‹ค.

  • Logging์€ ๋ฒ„ํผ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋กœ๊ทธ ๋ฒ„ํ‚ท์— ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ง€์—ฐ์‹œํ‚ต๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ๋ฒ„ํผ ๊ธฐ๊ฐ„ ์™ธ์— ์ž‘์„ฑ๋œ ๊ฒฝ์šฐ Logging์€ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ์ˆ˜์‹ ๋  ๋•Œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ ๊ธฐ๊ฐ„์„ ๊ตฌ์„ฑํ•  ๋•Œ๋Š” ๊ธฐ๋ก๋œ ๋กœ๊ทธ๋ฅผ ๋ณด๋Š” ๊ฒƒ๊ณผ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋œ ํ•ญ๋ชฉ์„ ๋ณด๋Š” ๊ฒƒ ์‚ฌ์ด์—์„œ ๊ท ํ˜•์ ์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ ๊ธฐ๊ฐ„ ๊ท ํ˜•
0์ดˆ ์ตœ์‹  ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ๋ฐ˜ํ™˜๋˜์—ˆ์ง€๋งŒ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
60์ดˆ ๋ฐ˜ํ™˜๋œ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋˜๊ธฐ ์ „๊นŒ์ง€ 60์ดˆ ์ง€์—ฐ๋˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋กœ๊ทธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

ํ•œ๋„ ๋ฐ ํ• ๋‹น๋Ÿ‰

๋‹ค์Œ ํ‘œ์—๋Š” ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์˜ ํ•œ๋„ ๋ฐ ํ• ๋‹น๋Ÿ‰์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ๋„ ๋ฐ ํ• ๋‹น๋Ÿ‰ ๊ฐ’
๋ถ„๋‹น ๋ฐ˜ํ™˜๋œ ํ•ญ๋ชฉ 60,000
60,000๊ฐœ ์ด์ƒ์˜ ํ•ญ๋ชฉ์ด ํ•„ํ„ฐ์™€ ์ผ์น˜ํ•˜๋ฉด Logging์—์„œ ์‘๋‹ต์˜ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Google Cloud ํ”„๋กœ์ ํŠธ๋‹น ์—ด๋ฆฐ ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง ์„ธ์…˜ ์ˆ˜ 10

ํด๋ผ์ด์–ธํŠธ ์ œํ•œ์‚ฌํ•ญ

๋งŽ์€ ํ•ญ๋ชฉ์„ ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๋Š” Google Cloud ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž‘์„ฑ๋œ ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ•˜๋Š” ๋งŒํผ ๋น ๋ฅด๊ฒŒ ์†Œ๋น„ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Logging์€ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ํ•ญ๋ชฉ๋ณด๋‹ค ์šฐ์„ ํ•˜๋Š” ์ด ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ผ๋ง ์„ธ์…˜์ด ๋๋‚˜๋ฉด Logging์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ œํ•œ์œผ๋กœ ์ธํ•ด ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง ์‚ฌ์šฉ

์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด Cloud Logging์ด ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์„ ์œ„ํ•œ API ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ entries.tail ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹ค์‹œ๊ฐ„ ํ…Œ์ผ๋ง์€ ํ•„๋“œ ์ˆ˜์ค€ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋กœ๊ทธ ๋ฒ„ํ‚ท์— ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋กœ๊ทธ ํƒ์ƒ‰๊ธฐ์—์„œ ์ด๋Ÿฌํ•œ ๋ฒ„ํ‚ท์— ๋Œ€ํ•ด ๋กœ๊ทธ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Go

Logging์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Logging ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Logging์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

import (
	"context"
	"fmt"
	"io"

	logging "cloud.google.com/go/logging/apiv2"
	"cloud.google.com/go/logging/apiv2/loggingpb"
)

// tailLogs creates a channel to stream log entries that were recently ingested for a project
func tailLogs(projectID string) error {
	// projectID := "your_project_id"

	ctx := context.Background()
	client, err := logging.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient error: %w", err)
	}
	defer client.Close()

	stream, err := client.TailLogEntries(ctx)
	if err != nil {
		return fmt.Errorf("TailLogEntries error: %w", err)
	}
	defer stream.CloseSend()

	req := &loggingpb.TailLogEntriesRequest{
		ResourceNames: []string{
			"projects/" + projectID,
		},
	}
	if err := stream.Send(req); err != nil {
		return fmt.Errorf("stream.Send error: %w", err)
	}

	// read and print two or more streamed log entries
	for counter := 0; counter < 2; {
		resp, err := stream.Recv()
		if err == io.EOF {
			break
		}
		if err != nil {
			return fmt.Errorf("stream.Recv error: %w", err)
		}
		fmt.Printf("received:\n%v\n", resp)
		if resp.Entries != nil {
			counter += len(resp.Entries)
		}
	}
	return nil
}

Java

Logging์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Logging ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Logging์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.LogEntryServerStream;
import com.google.cloud.logging.Logging;
import com.google.cloud.logging.Logging.TailOption;
import com.google.cloud.logging.LoggingOptions;

public class TailLogEntries {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Optionally provide the logname as an argument.
    String logName = args.length > 0 ? args[0] : "";

    LoggingOptions options = LoggingOptions.getDefaultInstance();
    try (Logging logging = options.getService()) {

      // Optionally compose a filter to tail log entries only from specific log
      LogEntryServerStream stream;

      if (logName != "") {
        stream =
            logging.tailLogEntries(
                TailOption.filter(
                    "logName=projects/" + options.getProjectId() + "/logs/" + logName));
      } else {
        stream = logging.tailLogEntries();
      }
      System.out.println("start streaming..");
      for (LogEntry log : stream) {
        System.out.println(log);
        // cancel infinite streaming after receiving first entry
        stream.cancel();
      }
    }
  }
}

Node.js

Logging์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Logging ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Logging์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

const {Logging} = require('@google-cloud/logging');
const logging = new Logging();

/**
 * TODO(developer): Replace logName with the name of your log.
 */
const log = logging.log(logName);
console.log('running tail log entries test');

const stream = log
  .tailEntries({
    filter: 'timestamp > "2021-01-01T23:00:00Z"',
  })
  .on('error', console.error)
  .on('data', resp => {
    console.log(resp.entries);
    console.log(resp.suppressionInfo);
    // If you anticipate many results, you can end a stream early to prevent
    // unnecessary processing and API requests.
    stream.end();
  })
  .on('end', () => {
    console.log('log entry stream has ended');
  });

// Note: to get all project logs, invoke logging.tailEntries