์ด ๋ฌธ์ ์ ๋๊ธฐ๋ 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 ์ ์ฒด๋ฅผ ๊ต์ฒดํด์ผ ํ๊ฑฐ๋ ์ด๋ฅผ ์์ฉํ๊ธฐ ์ํด ๋ก๊ทธ ํ์์ ์ฌ์ฉ์ ์ ์ ํํ์์ ์์ฑํด์ผ ํฉ๋๋ค.
๋ ์ง ํ์์ ๊ณตํต ๋ก๊ทธ ํ์์ ๋ฐ๋ฆ ๋๋ค. 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์ด ์ฌ๋์ ๋์ผ๋ก ๋ถ์ํ๊ธฐ ์ด๋ ต๊ณ ๋๋ฅผ ํฌํจํ ๋ง์ ์ฌ๋๋ค์ด ์ฝ์์ ์ฌ์ฉํ์ฌ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๊ด์ฐฐํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์ ์ํ๊ณ ์ถ์ต๋๋ค.
-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์ ๋ค์ ๋ฒ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋๋ค๋ฉด ์ด๋ค ํฌ๋ง์ด ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ข์ต๋๋ค. ์ฆ, logstash์ grok์๋ ๊ด๋ํ ํจํด์ด ์๋ ์๊ฒฉํ ํจํด์ด ๋ฏธ๋ฆฌ ๋ก๋๋์ด ์์ต๋๋ค. ๋๋ BBC/EBU์์ ํ์ค ์ฌ๋๋ค๊ณผ ํจ๊ป ์ผํ ์ ์ด ์์ผ๋ฉฐ ์ด๋ฐ ์ข ๋ฅ์ ๋์ฐํ ๋ง์ ๊ธฐ์ตํฉ๋๋ค. ๊ฐ๋ ์ฑ์ ์ํด "(๋ง) ๊ณต๋ฐฑ ๋ฌธ์" ์ด๊ฒ์ ๊ตฌํํ ์ ์์ต๋๋ค.... ๊ทธ ๋ฌธ์๋ ๋ฌด์์ ๋๊น? ๋ฌผ๋ก ์ด ์์ ์์ ๋ชจ๋ ๋ฌธ์๋ฅผ ํ์ฉํ ์ ์์ผ๋ฉฐ ์ด๋ ์ข์ง ์์ต๋๋ค. ๊ทธ๋์ Logstash์ ์ฌ๋๋ค์ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก T ๋๋ space๋ก ๊ตฌํํ์ต๋๋ค.
TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
๋ํ ์ด๊ฒ์ ๋ฌธ์ ์ ๋ด์ฉ์ด ์๋๋๋ค. ๋ฌธ์ ๋ ํ์ค์์ ํ์ฉํ์ง ์๋ ๊ณต๋ฐฑ์ด ์๋ ์๊ฐ๋ ์ ๋ฏธ์ฌ์ ๋๋ค.
๋ถํํ๋ ์ด ํ์์ ์ผ๋ฐ์ ์ด์ง ์์ต๋๋ค. ์ด ํ์์ gunicorn์๋ง ํด๋นํ๋ ๋น์ ํต์ ํ์์ ๋๋ค. ๋๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ณต๋ฐฑ์ ๋ํด ๋ ผ์ํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ฆฌ์์ ์๋ฆฌ์ธ์ง ์๊ณ ์์ง๋ง ์ธ์ด์ automotons ๊ตฌ๋ฌธ์ ๊ดํด์๋ ๋ชจ๋ ๊ฒ์ ๋๋ค.