Gunicorn: Gunicorn ๊ธฐ๋ณธ ์˜ค๋ฅ˜ ๋กœ๊น… ๋‚ ์งœ ํ˜•์‹์ด ํ‘œ์ค€ ISO8601์ด ์•„๋‹™๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 05์›” 03์ผ  ยท  34์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: benoitc/gunicorn

https://github.com/benoitc/gunicorn/blob/e73ca252f7e1d0286998a0ae4254164291020a0c/gunicorn/glogging.py#L88

์ด ๋ฌธ์ œ์˜ ๋™๊ธฐ๋Š” logstash์˜ ๋‹ค์Œ grok ๋ฌธ์ž…๋‹ˆ๋‹ค.

grok { match => { "message" => "\[(?<gunicorn.time>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})? %{ISO8601_TIMEZONE})\] \[%{NUMBER:[gunicorn][worker_id]}\] \[%{LOGLEVEL:[gunicorn][level]}\] %{GREEDYDATA:[gunicorn][message]}" } remove_field => "message" }

๋‚ ์งœ ํ˜•์‹ ์— ์‹œ๊ฐ„๊ณผ ์‹œ๊ฐ„๋Œ€ ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ํฌํ•จ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น๋ฌธ์ด ์ž˜๋ ธ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

grok { match => { "message" => "\[%{TIMESTAMP_ISO8601:[gunicorn][time]}\] \[%{NUMBER:[gunicorn][worker_id]}\] \[%{LOGLEVEL:[gunicorn][level]}\] %{GREEDYDATA:[gunicorn][message]}" } remove_field => "message" }

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

Improvement Discussion FeaturLogging

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ข‹์Šต๋‹ˆ๋‹ค. ์ฆ‰, logstash์˜ grok์—๋Š” ๊ด€๋Œ€ํ•œ ํŒจํ„ด์ด ์•„๋‹Œ ์—„๊ฒฉํ•œ ํŒจํ„ด์ด ๋ฏธ๋ฆฌ ๋กœ๋“œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” BBC/EBU์—์„œ ํ‘œ์ค€ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•œ ์ ์ด ์žˆ์œผ๋ฉฐ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋”์ฐํ•œ ๋ง์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด "(๋ง) ๊ณต๋ฐฑ ๋ฌธ์ž" ์ด๊ฒƒ์€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.... ๊ทธ ๋ฌธ์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฌผ๋ก  ์ด ์‹œ์ ์—์„œ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Logstash์˜ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ T ๋˜๋Š” space๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

๋˜ํ•œ ์ด๊ฒƒ์€ ๋ฌธ์ œ์˜ ๋‚ด์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ํ‘œ์ค€์—์„œ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณต๋ฐฑ์ด ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€ ์ ‘๋ฏธ์‚ฌ์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์ด ํ˜•์‹์€ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ gunicorn์—๋งŒ ํ•ด๋‹นํ•˜๋Š” ๋น„์ •ํ†ต์  ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ณต๋ฐฑ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ฆฌ์„์€ ์†Œ๋ฆฌ์ธ์ง€ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์–ธ์–ด์™€ automotons ๊ตฌ๋ฌธ์— ๊ด€ํ•ด์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  34 ๋Œ“๊ธ€

๋‚ ์งœ ํ˜•์‹์€ ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. https://en.wikipedia.org/wiki/Common_Log_Format

์•„, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์‘๋‹ต์€ ์•ก์„ธ์Šค ๋กœ๊ทธ ํ˜•์‹์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ณด๊ณ ์„œ๋Š” ์˜ค๋ฅ˜ ๋กœ๊ทธ ํ˜•์‹์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

%{DATESTAMP} %{ISO8601_TIMEZONE} ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

19.x์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งŽ์€ ๋กœ๊น… ์‚ฌ์šฉ๋Ÿ‰์„ ๊นจ๋œจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๋‹ค์Œ ๋ฉ”์ด์ € ๋ฒ„์ „์—์„œ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@tilgovi ๊ทธ๋ž˜์„œ ์ด๊ฒŒ ์›ํ•˜๋˜ ๊ฑด๊ฐ€์š”?

๋ฐฐํฌ๋œ ๋งŽ์€ ์‹œ์Šคํ…œ์€ ํ˜„์žฌ ํ˜•์‹์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ ์ˆจ๊น€์— ๊ทœ์น™์ด ํ•ญ์ƒ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š” ๋„ˆ๋ฌด ํฐ ๋ณ€๊ฒฝ์ด ์•„๋‹๊นŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ์ƒ๊ฐ?

๊ฐ€๋Šฅํ•œ ์ ˆ์ถฉ์•ˆ์€ ์ „ํ™˜ ๋ฐ ์‚ฌ์šฉ ์ค‘๋‹จ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ํ™€์ˆ˜(๊ทธ๋Ÿฌ๋‚˜ ์•ฝ๊ฐ„) ๋‚ ์งœ ํ˜•์‹์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์—†์• ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณ ์ • ๋กœ๊ทธ ๋ผ์ธ ํ˜•์‹์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŒŒ์ด์ฌ์„ ํ†ตํ•ด ๋กœ๊ฑฐ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ gunicorn์ด ๊ฒฝ์Ÿ ์„ค์ •๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์„ ํƒ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. DI๋Š” OCD ์‚ฌ๋žŒ์ด ์•„๋‹ˆ์ง€๋งŒ grok ์ฟผ๋ฆฌ๋ฅผ ์š”๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ˜„๋Œ€์ ์ธ ์œ ํ˜•์˜ ๊ณ ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค :D ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒƒ์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๊ธธ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ž…๋‹ˆ๋‹ค. ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์„ธ์ƒ์˜ ๋์€ ์•„๋‹ˆ์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์— ์˜์กดํ•˜๋”๋ผ๋„ ์šฐ๋ฆฌ๋Š” ๊ณ„์† ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๊ฑด ์ œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค... ์งˆ๋ฌธ์ด ์ €๋ฅผ ํ–ฅํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

R20์˜ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ˜•์‹์€ ์‹ค์ œ๋กœ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. RFC 3339 ์—๋Š” ์ด์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ISO 8601์€ "T"๋กœ ๊ตฌ๋ถ„๋œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ „์ฒด ๋‚ ์งœ ๋ฐ ์ „์ฒด ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋กœ๊ทธ๋Š” ๋ช…๋ น์ค„์—๋„ ์ธ์‡„๋˜๋ฉฐ ์‚ฌ๋žŒ์ด ์ฝ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„๋Œ€ ํ˜•์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ข‹์Šต๋‹ˆ๋‹ค. ์ฆ‰, logstash์˜ grok์—๋Š” ๊ด€๋Œ€ํ•œ ํŒจํ„ด์ด ์•„๋‹Œ ์—„๊ฒฉํ•œ ํŒจํ„ด์ด ๋ฏธ๋ฆฌ ๋กœ๋“œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” BBC/EBU์—์„œ ํ‘œ์ค€ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•œ ์ ์ด ์žˆ์œผ๋ฉฐ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋”์ฐํ•œ ๋ง์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด "(๋ง) ๊ณต๋ฐฑ ๋ฌธ์ž" ์ด๊ฒƒ์€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.... ๊ทธ ๋ฌธ์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฌผ๋ก  ์ด ์‹œ์ ์—์„œ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Logstash์˜ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ T ๋˜๋Š” space๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

๋˜ํ•œ ์ด๊ฒƒ์€ ๋ฌธ์ œ์˜ ๋‚ด์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ํ‘œ์ค€์—์„œ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณต๋ฐฑ์ด ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€ ์ ‘๋ฏธ์‚ฌ์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์ด ํ˜•์‹์€ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ gunicorn์—๋งŒ ํ•ด๋‹นํ•˜๋Š” ๋น„์ •ํ†ต์  ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ณต๋ฐฑ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ฆฌ์„์€ ์†Œ๋ฆฌ์ธ์ง€ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์–ธ์–ด์™€ automotons ๊ตฌ๋ฌธ์— ๊ด€ํ•ด์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค, @kozmaz87. ์‚ฌ์–‘์„ ํŒŒํ—ค์ณ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

127.0.0.1 - - [13/Aug/2018:15:03:26 +0000] "GET /debug/sms HTTP/1.1" 400 74 "-" "python-requests/2.18.4"

gunicorn ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ์ด ๋กœ๊ทธ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์ด ์ด์œ ๊ฐ€ ๋ฌด์—‡์ด๋“  '-'๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ์„ธ ๋ฒˆ์งธ๋Š” ์‚ฌ์šฉ์ž์—ฌ์•ผ ํ•˜๋ฉฐ, ์ด ์—ญ์‹œ '-'๋กœ ํ‰๊ฐ€๋˜๋Š” ์ด์œ ๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ณ  ๋‹ค์Œ์ด ์‚ฌ๋ž‘์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ':'๋กœ ์—ฐ๋„์™€ ๊ฒฐํ•ฉ๋˜๋Š” ๋‚ ์งœ ํ˜•์‹๊ณผ ๋ฌผ๋ก  ์ข‹์•„ํ•˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์‹œ๊ฐ„๋Œ€ ์ ‘๋ฏธ์‚ฌ. ๊ทธ๋Ÿฌ๋‚˜ ์ฃผ๋ณ€์„ ํŒŒํ—ค์นœ ํ›„ ์ด๊ฒƒ์ด nginx๊ฐ€ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์œผ๋ฏ€๋กœ nginx ์•ก์„ธ์Šค ๋กœ๊ทธ๋ฅผ ๋ชจ๋ฐฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์—ฌ ์ด ๊ณต๊ฐ„์œผ๋กœ ๊ตฌ๋ถ„๋œ ์‹œ๊ฐ„๋Œ€๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๊ณณ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. HAProxy๋Š” ์‹œ๊ฐ„๋Œ€ ์ ‘๋ฏธ์‚ฌ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค...

๋ฒŒ๋ชฉ์ด ๋ฏธ์ณค์–ด์š”... ๋ˆ„๊ฐ€ ์–ผ์Œ๋ฌผ ํ•œ ์–‘๋™์ด ์ข€ ๊ฐ€์ ธ๋‹ค์ฃผ์„ธ์š” :)

์•ก์„ธ์Šค ๋กœ๊ทธ ํ˜•์‹์€ ํ™•์‹คํžˆ "๊ณตํ†ต"์ž…๋‹ˆ๋‹ค: https://en.wikipedia.org/wiki/Common_Log_Format

ํ•˜์ง€๋งŒ ๋งˆ์ง€๋ง‰์— ๋ฆฌํผ๋Ÿฌ์™€ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. --access-logformat ํ”Œ๋ž˜๊ทธ ์ฐธ์กฐ: http://docs.gunicorn.org/en/latest/settings.html#access -log-format

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊นจ๋‹ซ๋Š”๋‹ค. ๋‘ ๋ฒˆ์งธ ํ•ญ๋ชฉ์ด '-'์ธ ๊ฒƒ์ด ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค. :D ๊ตฌํ˜„ํ•œ ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  '-'

ํ˜„์žฌ ๋กœ๊ทธ ํ˜•์‹์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. imo ๊ณตํ†ต ํ˜•์‹์ด ์ข‹์œผ๋ฉฐ ์—…์ŠคํŠธ๋ฆผ ์„œ๋ฒ„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ฐ? cc @tilgovi

๋ฒ”ํ”„ @tilgovi ๋„ @berkerpeksag

๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @tilgovi ๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” [๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹](
https://en.wikipedia.org/wiki/Common_Log_Format.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์—ด์–ด๋‘˜ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์˜ค๋ฅ˜ ๋กœ๊ทธ์— ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์€ ์•ก์„ธ์Šค ๋กœ๊ทธ ํ˜•์‹์ด๋ฉฐ ๊ฑฐ๊ธฐ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

์ด์ œ ๋ฌธ์ œ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋‹ค์‹œ ์—ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ธฐ๋ณธ ์„ค์ •์ด ์žˆ๋Š” Gunicorn์˜ ์ถœ๋ ฅ ์˜ˆ์ž…๋‹ˆ๋‹ค.

[2019-01-25 11:44:34 -0800] [22794] [INFO] ๊ธฐ๋‹ˆ์ฝ˜ ์‹œ์ž‘ 19.9.0
[2019-01-25 11:44:34 -0800] [22794] [INFO] ๋“ฃ๊ธฐ : http://127.0.0.1 :8000 (22794)
[2019-01-25 11:44:34 -0800] [22794] [INFO] ์ž‘์—…์ž ์‚ฌ์šฉ: ๋™๊ธฐํ™”
[2019-01-25 11:44:34 -0800] [22797] [INFO] pid๊ฐ€ ์žˆ๋Š” ๋ถ€ํŒ… ์ž‘์—…์ž: 22797
[2019-01-25 11:44:36 -0800] [22797] [์ •๋ณด] 127.0.0.1 - - [25/Jan/2019:11:44:36 -0800] "GET / HTTP/1.1" 200 14 " -" "์ปฌ/7.54.0"

๋ฌธ์ œ๋Š” ์•ก์„ธ์Šค ๋กœ๊ทธ์˜ ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ _์ „์ฒด ๋กœ๊ทธ ์ค„_์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Gunicorn์€ ๋กœ๊ทธ ๋ผ์ธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ํƒ€์ž„์Šคํƒฌํ”„, pid ๋ฐ ๋ ˆ๋ฒจ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ผ์ธ _๋˜ํ•œ_์—๋Š” ๊ณ ์œ ํ•œ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์žˆ๋Š” ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฐ™์€ ํ˜•์‹์ด ์•„๋‹Œ์ง€ ์ฃผ๋ชฉํ•˜์‹ญ์‹œ์˜ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์›๋ž˜ ์š”์ฒญ์€ _์ผ๋ฐ˜ ๋กœ๊ทธ ํ˜•์‹๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ_ ๋กœ๊ทธ ํ–‰ ์‹œ์ž‘ ๋ถ€๋ถ„์˜ ํƒ€์ž„์Šคํƒฌํ”„์— ๊ณต๋ฐฑ์ด ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[25/1/2019:11:44:34 -0800] [22794] [INFO] gunicorn ์‹œ์ž‘ 19.9.0
[25/1/2019:11:44:34 -0800] [22794] [INFO] ๋“ฃ๊ธฐ: http://127.0.0.1:8000 (22794)
[25/Jan/2019:11:44:34 -0800] [22794] [INFO] ์ž‘์—…์ž ์‚ฌ์šฉ: ๋™๊ธฐํ™”
[25/1/2019:11:44:34 -0800] [22797] [INFO] pid๊ฐ€ ์žˆ๋Š” ๋ถ€ํŒ… ์ž‘์—…์ž: 22797
[25/Jan/2019:11:44:36 -0800] [22797] [INFO] 127.0.0.1 - - [25/Jan/2019:11:44:36 -0800] "GET / HTTP/1.1" 200 14 "-" "์ปฌ/7.54.0"

๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์ด ๊ตญ์ œ์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—(์งง์€ ์›” ์ด๋ฆ„์„ ๊ฐ€์ง) ๋Œ€๋‹ต์€ ์•„๋งˆ๋„ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ๋กœ๊ทธ ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๋Š” ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ISO8601 ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations

๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์€ ์‹ค์ œ๋กœ T ๋ฌธ์ž ๋Œ€์‹  ํ—ˆ์šฉ๋˜์ง€๋งŒ ์‹œ๊ฐ„๊ณผ ์˜์—ญ ์˜คํ”„์…‹ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์œ ํšจํ•œ ISO8601 ํ˜•์‹์ž…๋‹ˆ๋‹ค.

  • [2019-01-25T11:44:34-0800]
  • [2019-01-25 11:44:34-0800]

์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ต:

[2019-01-25 11:44:34 -0800]
                    ^ there is a space here

ํ•˜์ง€๋งŒ ๋ฐฐํฌ๋œ ์‹œ์Šคํ…œ์„ ๊นจ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ๊ฑฑ์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž˜ ๊ตฌ๋ฌธ ๋ถ„์„/์žฌํฌ๋งท ๋กœ๊ทธ๋Š” logstash์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ํ˜•์‹์˜ ์•ก์„ธ์Šค ๋กœ๊ทธ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํŠน์ • ์‹๋ณ„์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜•์‹์ด ๊นจ์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋ฅ˜ ๋กœ๊ทธ๋Š” ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ก์„ธ์Šค ๋กœ๊ทธ ํ˜•์‹์ด ๋ณ€๊ฒฝ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ผ๋ฐ˜์ ์ธ ๋กœ๊ทธ ํ˜•์‹์ด๋ฉฐ --access-log-format ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ๋กœ๊ทธ ํ˜•์‹์€ ํ•ธ๋“ค๋Ÿฌ์— ์ „๋‹ฌ๋˜๋Š” ์•ก์„ธ์Šค ๋กœ๊ทธ์˜ _message_ ํ˜•์‹๋งŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ•ธ๋“ค๋Ÿฌ์—๋Š” ์ž์ฒด ํฌ๋งทํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

stdout ๋ฐ stderr์˜ ์ŠคํŠธ๋ฆผ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํฌ๋งทํ„ฐ๋Š” ์‹œ์ž‘ ๋ถ€๋ถ„์— ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—์„œ ์•ก์„ธ์Šค ๋กœ๊ทธ์— _2_๊ฐœ์˜ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์‹œ์ž‘ ๋ถ€๋ถ„์—, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฉ”์‹œ์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ธ๋“ค๋Ÿฌ์˜ ํฌ๋งทํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด --logconfig ์˜ต์…˜(ํŒŒ์ผ ๋˜๋Š” ์‚ฌ์ „) ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํฌ๋งทํ„ฐ์—์„œ ISO8601 ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ๊ตฌ๋ฌธ ๋ถ„์„/์žฌํฌ๋งท์€ logstash์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๊ฐ€ ๊ธฐ๋ณธ ์ œ๊ณต ํŒจํ„ด์œผ๋กœ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๋ฌธ์ œ๋Š” grok์— ISO8601 ํƒ€์ž„์Šคํƒฌํ”„์— ๋Œ€ํ•œ ๋‚ด์žฅ ํŒจํ„ด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ด๋ ธ์Šต๋‹ˆ๋‹ค.

@tilgovi ํ˜ธํ™˜์„ฑ์„ ๊นจ๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ NGINX๋Š” ISO8601 ํ˜•์‹ ๋˜๋Š” ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

$time_iso8601
local time in the ISO 8601 standard format
$time_local
local time in the Common Log Format

https://nginx.org/en/docs/http/ngx_http_log_module.html

์œ ์‚ฐ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋˜‘๊ฐ™์ด ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Btw ์šฐ๋ฆฌ๋Š” ์ถœ๋ ฅ์— ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ผ์ธ์„ ํ‘œ์‹œํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? PID๊ฐ€ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ํ—ค๋”๊ฐ€ ์—†์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ?

๊ธฐ๋ณธ ํฌ๋งทํ„ฐ์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ผ๋ถ€ ๋„๊ตฌ๊ฐ€ ์†์ƒ๋ ๊นŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ TIME_ISO8601=true ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

ํ˜ธํ™˜์„ฑ์„ ๊นจ๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ด์œ ๋กœ ํ‹ฐ์ผ“์„ ๋‹ซ์€ ๊ฒƒ ๊ฐ™์•„์„œ ํ‹ฐ์ผ“์„ ๋‹ค์‹œ ์—ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋‘˜ ๋‹ค ๋ฌธ์ œ๊ฐ€ ๊ณตํ†ต ๋กœ๊ทธ ํ˜•์‹์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ํ˜•์‹์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ํฌ๋งทํ„ฐ์˜ ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋…ผ์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋‹ต์€ ์•„๋งˆ๋„ ์—ฌ์ „ํžˆ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Btw ์šฐ๋ฆฌ๋Š” ์ถœ๋ ฅ์— ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ผ์ธ์„ ํ‘œ์‹œํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? PID๊ฐ€ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ํ—ค๋”๊ฐ€ ์—†์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ?

๊ฐ€๋Šฅํ•œ. ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด.

์‚ฌ์šฉ์ž ์ •์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๊ดœ์ฐฎ์•„. ์‚ฌ์šฉ์ž๋Š” ๊ณ ๊ธ‰ ๋กœ๊น… โ€‹โ€‹๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ญ์ƒ ๋กœ๊ทธ๋ฅผ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก --log-level ์™€ ๊ฐ™์€ CLI์— ๋Œ€ํ•œ ์ผ๋ถ€ ์„ค์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. --log-date-format ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? iso8601 ์™€ ๊ฐ™์€ ๊ธฐํ˜ธ ๋ฌธ์ž์—ด๋„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ --log-config ๋˜๋Š” log_config_dict ์‚ฌ์šฉ์„ ์›ํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•œํŽธ @tilgovi 20.0 ๋ฆด๋ฆฌ์Šค๋Š” python 2์™€์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ˜•์‹์„ ๋ณ€๊ฒฝํ•˜๊ธฐ์— ์ข‹์€ ์‹œ๊ธฐ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ์œ ์‚ฐ์— ๋Œ€ํ•ด์„œ๋„ ๋‚ด๊ฐ€ ๋” ๊ฑฑ์ •ํ•˜๋Š” ๊ฒƒ์€ ISO8601์ด ์‚ฌ๋žŒ์˜ ๋ˆˆ์œผ๋กœ ๋ถ„์„ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋‚˜๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๊ด€์ฐฐํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • [ ] stdout ๋ฐ stderr ๋กœ๊ทธ์—์„œ ์ด ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” -iso8601 ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ).
  • [ ] ์•ก์„ธ์Šค ๋กœ๊ทธ์— ์ด ํ˜•์‹์œผ๋กœ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋Š” ํ˜•์‹์— ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋™์•ˆ ์‹œ๊ฐ„ ๋™์•ˆ UTC๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด -utc ์˜ต์…˜์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ? ์ƒ๊ฐ?

ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ œ์•ˆ๋œ diff๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

diff --git a/gunicorn/glogging.py b/gunicorn/glogging.py
index 56cc5bd..0735e58 100644
--- a/gunicorn/glogging.py
+++ b/gunicorn/glogging.py
@@ -80,7 +80,7 @@ CONFIG_DEFAULTS = dict(
         formatters={
             "generic": {
                 "format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s",
-                "datefmt": "[%Y-%m-%d %H:%M:%S %z]",
+                "datefmt": "[%Y-%m-%d %H:%M:%S%z]",
                 "class": "logging.Formatter"
             }
         }
@@ -175,7 +175,7 @@ class Logger(object):
     loglevel = logging.INFO

     error_fmt = r"%(asctime)s [%(process)d] [%(levelname)s] %(message)s"
-    datefmt = r"[%Y-%m-%d %H:%M:%S %z]"
+    datefmt = r"[%Y-%m-%d %H:%M:%S%z]"

     access_fmt = "%(message)s"
     syslog_fmt = "[%(process)d] %(message)s"

์•ก์„ธ์Šค ๋กœ๊ทธ ํ† ํฐ์—์„œ ISO8601 ๋‚ ์งœ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ด ํฅ๋ฏธ๋กญ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์˜ ๋™๊ธฐ์™€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•ํ•˜๊ฒŒ ๋Š๋ผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐Ÿ˜„ ์ €๋Š” ๋‹จ์ง€ ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ƒ๊ฐํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ 20.1๋กœ ์—ฐ๊ธฐํ•˜์—ฌ ์šฐ๋ฆฌ์—๊ฒŒ ๋ช‡ ๋ฒˆ์„ ํ—ˆ๋ฝํ•ฉ๋‹ˆ๋‹ค.

์นœ์• ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„,
์š”์ฒญ ์†์‹ค ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค(Gunicorn๊ณผ ๊ด€๋ จ ์—†์Œ). Apache ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜์˜ ์ด ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ๋งˆ์ดํฌ๋กœ์ดˆ๋ฅผ ํฌํ•จํ•˜๋Š” ์ •ํ™•ํ•œ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2019-10-30 14:27:16.960421 . ๊ทธ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•œ ๋ฉ‹์ง„ ํ–ฅ์ƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

log-date-format iso8601 ํ”Œ๋ž˜๊ทธ๊ฐ€ gunicorn์˜ ๋‹ค์Œ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ค ํฌ๋ง์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰