๋ก๊ทธ parsing์ ์ ์ํ ๊ท์น์ ๋ฐ๋ผ ์ ํํ๋์ง ์์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์ฑ(ํค:๊ฐ ์)์ผ๋ก ๋ณํํ๋ ํ๋ก์ธ์ค์
๋๋ค. NRQL ์ฟผ๋ฆฌ์์ ์ด ์์ฑ์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๊ฒ ๋ก๊ทธ๋ฅผ ํจ์ฏํ๊ฑฐ๋ ํํฐ๋งํ ์ ์์ต๋๋ค.
๋ด๋ ๋ฆญ์ ํน์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ฐ๋ผ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. ์ด ๋ฌธ์์์๋ ๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์์ด ์๋ํ๋ ๋ฐฉ์๊ณผ ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
GraphQL API์ธ NerdGraph๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์์ฑ, ์ฟผ๋ฆฌ ๋ฐ ๊ด๋ฆฌํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ์ํ ์ ์ฉํ ๋๊ตฌ๋ Nerdgraph API ํ์๊ธฐ์
๋๋ค. ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ๊ตฌ๋ฌธ ๋ถ์์ ๋ํ NerdGraph ํํ ๋ฆฌ์ผ์ ์ฐธ์กฐํ์ญ์์ค.
๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์์ ๋ํ 5๋ถ ๊ธธ์ด ๋์์์ ํ์ธํด ๋ณด์ญ์์ค.
๊ตฌ๋ฌธ ๋ถ์ ์์
์ข์ ์๋ ์ ํํ๋์ง ์์ ํ
์คํธ๋ฅผ ํฌํจํ๋ ๊ธฐ๋ณธ NGINX ์ก์ธ์ค ๋ก๊ทธ์
๋๋ค. ๊ฒ์ํ ๋ ์ ์ฉํ์ง๋ง ๊ทธ ์ธ์๋ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ต๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ๋ผ์ธ์ ์์
๋๋ค.
127.180.71.3 - - [10/May/1997:08:05:32 +0000] "GET /downloads/product_1 HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"
๊ตฌ๋ฌธ ๋ถ์๋์ง ์์ ํฌ๋งท์์๋ ๋๋ถ๋ถ์ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด ์ ์ฒด ํ
์คํธ ๊ฒ์์ ์ํํด์ผ ํฉ๋๋ค. ๊ตฌ๋ฌธ ๋ถ์ ํ, ๋ก๊ทธ๋ response code
๋ฐ request URL
๊ฐ์ ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
"remote_addr": "93.180.71.3",
"path": "/downloads/product_1",
"user_agent": "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"
๊ตฌ๋ฌธ ๋ถ์์ ์ฌ์ฉํ๋ฉด ํด๋น ๊ฐ์ ํจ์ฏํ๋ ์ปค์คํ
์ฟผ๋ฆฌ๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์ฒญ URL๋น ์๋ต ์ฝ๋์ ๋ถํฌ๋ฅผ ์ดํดํ๊ณ ๋ฌธ์ ๊ฐ ์๋ ํ์ด์ง๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์์ ์๋ ๋ฐฉ์
๋ค์์ ๋ด๋ ๋ฆญ์ด ๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋จํ ์ค๋ช
์
๋๋ค.
๋ก๊ทธ ๊ตฌ๋ฌธ ๋ถ์ | ์๋ ์๋ฆฌ |
---|
๋์ | - ๊ตฌ๋ฌธ ๋ถ์์ ์ ํ๋ ํน์ ํ๋์ ์ ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก
message ํ๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ๋ฐ์ดํฐ์ ์กด์ฌํ์ง ์๋ ํ๋/์์ฑ๊น์ง ํฌํจํด, ๋ชจ๋ ํ๋/์์ฑ์ ์ ํํ ์ ์์ต๋๋ค. - ๊ฐ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๊ท์น์ด ๊ตฌ๋ฌธ ๋ถ์์ ์๋ํ ๋ก๊ทธ๋ฅผ ๊ฒฐ์ ํ๋ NRQL
WHERE ์ ์ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค. - ๋งค์นญ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๋ ค๋ฉด ๋ก๊ทธ์
logtype ์์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ logtype ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ ํ๋์ง ์์ต๋๋ค. NRQL WHERE ์ ์์ ํ๋ ์ด์์ ์์ฑ์ ๋งค์นญ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
์๊ธฐ | - ๊ตฌ๋ฌธ ๋ถ์์ ๊ฐ ๋ก๊ทธ ๋ฉ์์ง์ ํ ๋ฒ๋ง ์ ์ฉ๋ฉ๋๋ค. ์ฌ๋ฌ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ๋ก๊ทธ์ ๋งค์นํ๋ ๊ฒฝ์ฐ ์ฑ๊ณตํ ์ฒซ ๋ฒ์งธ ๊ท์น๋ง ์ ์ฉ๋ฉ๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์์๊ฐ ์์ต๋๋ค. ๋ ์ด์์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ๋ก๊ทธ์ ๋งค์น๋๋ ๊ฒฝ์ฐ ๋ฌด์์๋ก ํ๋๊ฐ ์ ํ๋ฉ๋๋ค. ๋์ผํ ๋ก๊ทธ์ ๋งค์น๋์ง ์๋๋ก ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์์ฑํด์ผ ํฉ๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์์ ๋ฐ์ดํฐ๊ฐ NRDB์ ๊ธฐ๋ก๋๊ธฐ ์ ์ ๋ก๊ทธ ์์ง ์ค์ ์คํ๋ฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋ก๋๋ฉด ๋ ์ด์ ๊ตฌ๋ฌธ ๋ถ์์ ํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ณด๊ฐ์ด ์ด๋ค์ง๊ธฐ ์ ์(before) ํ์ดํ๋ผ์ธ์์ ๊ตฌ๋ฌธ ๋ถ์์ด ์คํ๋ฉ๋๋ค. ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ํ ๋งค์นญ ๊ธฐ์ค์ ์ ์ํ ๋๋ ์ฃผ์ํด์ผ ํฉ๋๋ค. ๊ธฐ์ค์ด ๊ตฌ๋ฌธ ๋ถ์ ๋๋ ๋ณด๊ฐ์ด ์ํ๋ ๋๊น์ง ์กด์ฌํ์ง ์๋ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒฝ์ฐ ๋งค์นญ์ด ๋ฐ์ํ ๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ก๊ทธ์ ํ์๋์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ตฌ๋ฌธ ๋ถ์์ด ์คํ๋์ง ์์ต๋๋ค.
|
๋ฐฉ๋ฒ | - ๊ท์น์ Grok, ์ ๊ท์ ๋๋ ์ด ๋์ ํผํฉํ์ฌ ์์ฑํ ์ ์์ต๋๋ค. Grok์ ๋ณต์กํ ์ ๊ท์์ ์ถ์ํํ๋ ํจํด ๋ชจ์์
๋๋ค.
- ๋ด๋ ๋ฆญ์ Parsing UI๋ Java Regex ๊ตฌ๋ฌธ์ ์ง์ํฉ๋๋ค. ์บก์ฒ ๊ทธ๋ฃน์ ์์ฑ ๋๋ ํ๋ ์ด๋ฆ์ ๊ฒฝ์ฐ, Java Regex๋ [A-Za-z0-9]๋ง ํ์ฉํฉ๋๋ค.
|
Grok์ ์ฌ์ฉํ ์์ฑ ๊ตฌ๋ฌธ ๋ถ์
๊ตฌ๋ฌธ ๋ถ์ ํจํด์ ๋ก๊ทธ ๋ฉ์์ง ๊ตฌ๋ฌธ ๋ถ์์ ์ํ ์
๊ณ ํ์ค์ธ Grok๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ฉ๋๋ค.logtype
ํ๋๊ฐ ์๋ ์์ ๋ก๊ทธ๋ ๋ด์ฅ๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ณผ ๋น๊ต ํ์ธ๋๋ฉฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฐ๊ฒฐ๋ Grok ํจํด์ด ๋ก๊ทธ์ ์ ์ฉ๋ฉ๋๋ค.
Grok์ ๋ณต์กํ ๋ฆฌํฐ๋ด ์ ๊ท์ ๋์ ์ฌ์ฉ๋ ๋ด์ฅ ๋ฐ ๋ช
๋ช
๋ ํจํด์ ์ถ๊ฐํ๋ ์ ๊ท์์ ์์ ์งํฉ์
๋๋ค. ์๋ฅผ ๋ค์ด ์ ์๊ฐ ์ ๊ท์ (?:[+-]?(?:[0-9]+))
๊ณผ ๋งค์นญ๋ ์ ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ ํ์ ์์ด ๋์ผํ ์ ๊ท์์ ๋ํ๋ด๋ Grok ํจํด INT
๋ฅผ ์ฌ์ฉํ๋๋ก %{INT}
์ ์์ฑํ ์ ์์ต๋๋ค.
Grok ํจํด์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
%{PATTERN_NAME[:OPTIONAL_EXTRACTED_ATTRIBUTE_NAME[:OPTIONAL_TYPE[:OPTIONAL_PARAMETER]]]}
Where:
PATTERN_NAME
์ง์ Grok ํจํด ์ค ํ๋์
๋๋ค. ํจํด ์ด๋ฆ์ ์ ๊ท์์ ๋ํ๋ด๋ ์ฌ์ฉ์ ์นํ์ ์ธ ์ด๋ฆ์
๋๋ค. ํด๋น ์ ๊ท์๊ณผ ์ ํํ ๋์ผํฉ๋๋ค.OPTIONAL_EXTRACTED_ATTRIBUTE_NAME
์ด ์ ๊ณต๋ ๊ฒฝ์ฐ, ํจํด ์ด๋ฆ๊ณผ ๋งค์น๋๋ ๊ฐ์ผ๋ก ๋ก๊ทธ ๋ฉ์์ง์ ์ถ๊ฐ๋ ์์ฑ์ ์ด๋ฆ์
๋๋ค. ์ ๊ท์์ ์ฌ์ฉํ์ฌ ๋ช
๋ช
๋ ์บก์ฒ ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ์ ๊ณต๋์ง ์์ผ๋ฉด ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ฌธ์์ด์ ์์ญ๊ณผ ๋งค์น๋์ง๋ง ํด๋น ๊ฐ์ผ๋ก ์์ฑ์ ์ถ์ถํ์ง๋ ์์ต๋๋ค.OPTIONAL_TYPE
์ ์ถ์ถํ ์์ฑ ๊ฐ์ ์ ํ์ ์ง์ ํฉ๋๋ค. ์๋ตํ๋ฉด, ๊ฐ์ด ๋ฌธ์์ด๋ก ์ถ์ถ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, "File Size: 123"
์ ๊ฐ 123
์ ์ซ์์์ file_size
์์ฑ์ผ๋ก ์ถ์ถํ๋ ค๋ฉด value: %{INT:file_size:int}
์ ์ฌ์ฉํฉ๋๋ค.OPTIONAL_PARAMETER
ํน์ ์ ํ์ ๋ํด ์ ํ์ ์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํฉ๋๋ค. ํ์ฌ๋ datetime
์ ํ๋ง ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋งค์น๋๋ ๋ฌธ์์ด์์ ์ ๊ท์๊ณผ Grok ํจํด ์ด๋ฆ์ ํผํฉํ์ฌ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ง์๋๋ Grok ํจํด ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด ์ด ๋งํฌ๋ฅผ ํด๋ฆญํ๊ณ , ์ง์๋๋ Grok ์ ํ ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ญ์์ค.
๋ณ์ ์ด๋ฆ์ ๋ช
์์ ์ผ๋ก ์ค์ ํด์ผ ํ๋ฉฐ %{URI:uri}
๊ฐ์ด ์๋ฌธ์์ฌ์ผ ํ๋ค๋ ๋ฐ ์ ์ํ์ญ์์ค. %{URI}
๋๋ %{URI:URI}
๊ฐ์ ํํ์์ ์๋ฉ๋๋ค.
๋ก๊ทธ ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ํ์์ ๋ ์ ์์ต๋๋ค.
"message": "54.3.120.2 2048 0"
์ด ์ ๋ณด๋ ์ ํํ์ง๋ง ๊ทธ ์๋ฏธ๊ฐ ์ง๊ด์ ์ด์ง ์์ต๋๋ค. Grok ํจํด์ ์ํ๋ ํ
๋ ๋ฉํธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ ๋ ์ฝ๋๋ ์ฌ์ฉํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค.
์ด๋ฅผ ์ํด์๋ ์ด ์ธ ํ๋๋ฅผ ์ถ์ถํ๋ Grok ํจํด์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
%{IP:host_ip} %{INT:bytes_received} %{INT:bytes_sent}
ํ๋ก์ธ์ฑ ํ, ๋ก๊ทธ ๋ ์ฝ๋์๋ host_ip
, bytes_received
๋ฐ bytes_sent
ํ๋๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด์ ๋ด๋ ๋ฆญ์์ ์ด๋ฌํ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ๋ฐ์ดํฐ์ ๋ํ ํต๊ณ ์ฐ์ฐ์ ํํฐ๋ง, ํจ์ฏ ๋ฐ ์ํํ ์ ์์ต๋๋ค. ๋ด๋ ๋ฆญ์์ Grok ํจํด์ผ๋ก ๋ก๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ญ์์ค.
์ฌ๋ฐ๋ฅธ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ UI์์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ง๋ค์ด Grok ๊ตฌ๋ฌธ ๋ถ์์ ์์ฑ, ํ
์คํธ ๋ฐ ํ์ฑํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Inventory Services๋ผ๋ ๋ง์ดํฌ๋ก ์๋น์ค์ ๋ํ ํน์ ์ ํ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด, ํน์ ์ค๋ฅ ๋ฉ์์ง์ ์ ํ์ ์ฐพ๋ Grok ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ง๋ญ๋๋ค. ์ด๋ฅผ ์ํด์๋:
๊ท์น์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์: Inventory Services error parsing
๊ตฌ๋ฌธ ๋ถ์ํ ๊ธฐ์กด ํ๋๋ฅผ ์ ํ(๊ธฐ๋ณธ๊ฐ = message
)ํ๊ฑฐ๋ ์ ํ๋ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค.
๋ค์ด์ค๋ ๋ก๊ทธ์ ๋ํ ์ฌ์ ํํฐ ์ญํ ์ ํ๋ NRQL WHERE
์ ์ ์๋ณํฉ๋๋ค. ์: entity.name='Inventory Service'
. ์ด ์ฌ์ ํํฐ๋ ๊ท์น์์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ก๊ทธ ์๋ฅผ ์ค์ฌ ๋ถํ์ํ ํ๋ก์ธ์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
๋งค์น๋๋ ๋ก๊ทธ๊ฐ ์์ผ๋ฉด ์ ํํ๊ฑฐ๋ Paste log ํญ์ ํด๋ฆญํ์ฌ ์ํ ๋ก๊ทธ์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
Grok ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์ถ๊ฐํฉ๋๋ค. ์:
Inventory error: %{DATA:error_message} for product %{INT:product_id}
Where:
Inventory error
: ํ์ฑ ๊ท์น์ ์ด๋ฆerror_message
: ์ ํํ๋ ค๋ ์ค๋ฅ ๋ฉ์์งproduct_id
: Inventory Service์ ์ ํ ID
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํ์ฑํํ๊ณ ์ ์ฅํฉ๋๋ค.
๊ณง Inventory Service ๋ก๊ทธ๊ฐ 2๊ฐ์ ์๋ก์ด ํ๋ error_message
์ product_id
๋ก ๊ฐํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ด๋ฌํ ํ๋์ ๋ํด ์ฟผ๋ฆฌํ๊ณ , ์ฐจํธ ๋ฐ ๋์๋ณด๋๋ฅผ ๋ง๋ค๊ณ , ์๋ฆผ์ ์ค์ ํ๋ ๋ฑ์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
๋ณด๋ค ์์ธํ ๋ด์ฉ์ UI์ ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ฐธ์กฐํ์ญ์์ค.
OPTIONAL_TYPE
ํ๋๋ ์ถ์ถํ ์์ฑ ๊ฐ์ ์ ํ์ ์ง์ ํฉ๋๋ค. ์๋ตํ๋ฉด, ๊ฐ์ด ๋ฌธ์์ด๋ก ์ถ์ถ๋ฉ๋๋ค.
์ง์๋๋ ์ ํ:
Grok์ ์ง์ ๋ ์ ํ | ๋ด๋ ๋ฆญ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ์ ํ |
---|
boolean
| boolean
|
byte short int integer
| integer
|
long
| long
|
float
| float
|
double
| double
|
string (๊ธฐ๋ณธ) text
| string
|
date datetime
| ์๊ฐ long ๊ธฐ๋ณธ์ ์ผ๋ก ISO 8601๋ก ํด์๋ฉ๋๋ค. OPTIONAL_PARAMETER ๊ฐ ์๋ ๊ฒฝ์ฐ datetime ์ ํด์ํ๋ ๋ฐ ์ฌ์ฉํ ๋ ์ง ๋ฐ ์๊ฐ ํจํด ๋ฌธ์์ด์ ์ง์ ํฉ๋๋ค. ์ด๋ ๊ตฌ๋ฌธ ๋ถ์ ์ค์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธ์ ์คํธ ํ์ดํ๋ผ์ธ์ ํ๋ฐ๋ถ์๋ ๋ชจ๋ ๋ก๊ทธ์ ๋ํด ๋ฐ์ํ๋ ์ถ๊ฐ ํ์์คํฌํ ํด์ ๋จ๊ณ๊ฐ ๋ณ๋๋ก ์กด์ฌํฉ๋๋ค. |
json
| JSON ์ ํ ๋ฐ์ดํฐ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ์ผ๋ฐ ํ
์คํธ์ ํผํฉ๋ JSON ๊ตฌ๋ฌธ ๋ถ์์ ์ฐธ์กฐํ์ญ์์ค. |
csv
| CSV ๋ฐ์ดํฐ. ์์ธํ ๋ด์ฉ์ CSV ๊ตฌ๋ฌธ ๋ถ์์ ์ฐธ์กฐํ์ธ์. |
geo
| IP ์ฃผ์์ ์ง๋ฆฌ์ ์์น. ๋ณด๋ค ์์ธํ ๋ด์ฉ์ IP ์ฃผ์์ ์์น ํ์
(GeoIP)์ ์ฐธ์กฐํ์ญ์์ค. |
key value pairs
| ํค ๊ฐ ์์
๋๋ค. ์์ธํ ๋ด์ฉ์ ํค/๊ฐ ์ ๊ตฌ๋ฌธ ๋ถ์์ ์ฐธ์กฐํ์ญ์์ค. |
๋ฉํฐ๋ผ์ธ ๋ก๊ทธ์ ๊ฒฝ์ฐ GREEDYDATA
Grok ํจํด์ ์๋ก์ด ์ค์ ๋งค์นํ์ง ์์ต๋๋ค. ( .*
์ ๋์ผ)
๋ฐ๋ผ์ %{GREEDYDATA:some_attribute}
๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ์์ ๋ฉํฐ๋ผ์ธ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. (?s)%{GREEDYDATA:some_attribute}
๋ด๋ ๋ฆญ ๋ก๊ทธ ํ์ดํ๋ผ์ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก๊ทธ JSON ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ง๋ง, ๋๋ก ์ผ๋ฐ ํ
์คํธ์ ํผํฉ๋ JSON ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฐ ์ํฉ์์, ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ค์ JSON ์์ฑ์ ์ฌ์ฉํ์ฌ ํํฐ๋งํ๊ธธ ์ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ json
grok ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์ ํ์ grok ํจํด์์ ์บก์ฒํ JSON์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. ์ด ํฌ๋งท์ 3๊ฐ์ง ์ฃผ์ ๋ถ๋ถ, ์ฆ grok ๊ตฌ๋ฌธ, ๊ตฌ๋ฌธ ๋ถ์๋ json ์์ฑ์ ํ ๋นํ๋ ค๋ ์ ๋์ฌ ๋ฐ json
grok ์ ํ์ ์์กดํฉ๋๋ค. json
grok ์ ํ์ ์ฌ์ฉํ๋ฉด ํฌ๋งท์ด ์ฌ๋ฐ๋ฅด์ง ์์ ๋ก๊ทธ์์ JSON์ ์ถ์ถํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ก๊ทธ์ ๋ ์ง/์๊ฐ ๋ฌธ์์ด์ด ์ ๋์ฌ๋ก ๋ถ๋ ๊ฒฝ์ฐ:
2015-05-13T23:39:43.945958Z {"event": "TestRequest", "status": 200, "response": {"headers": {"X-Custom": "foo"}}, "request": {"headers": {"X-Custom": "bar"}}}
์ด ๋ก๊ทธ ํ์์์ JSON ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ฉด ๋ค์ Grok ํํ์์ ์์ฑํฉ๋๋ค.
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:json}
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
containerTimestamp: "2015-05-13T23:39:43.945958Z"
my_attribute_prefix.event: "TestRequest"
my_attribute_prefix.status: 200
my_attribute_prefix.response.headers.X-Custom: "foo"
my_attribute_prefix.request.headers.X-Custom: "bar"
keepAttributes
๋๋ dropAttributes
์ต์
์ ์ฌ์ฉํ์ฌ ์ถ์ถํ๊ฑฐ๋ ๋๋กญํ ์์ฑ ๋ชฉ๋ก์ ์ ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ Grok ํํ์์ ์ฌ์ฉํ๋ฉด:
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:json({"keepAttributes": ["my_attribute_prefix.event", "my_attribute_prefix.response.headers.X-Custom"]})}
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
containerTimestamp: "2015-05-13T23:39:43.945958Z"
my_attribute_prefix.event: "TestRequest"
my_attribute_prefix.request.headers.X-Custom: "bar"
my_attribute_prefix
์ ๋์ฌ๋ฅผ ์๋ตํ๋ ค๋ฉด ์ค์ ์ "noPrefix": true
๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:json({"noPrefix": true})}
my_attribute_prefix
์ ๋์ฌ๋ฅผ ์๋ตํ๊ณ status
์์ฑ๋ง ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ ์ค์ ์ "noPrefix": true
๋ฐ "keepAttributes: ["status"]
๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:json({"noPrefix": true, "keepAttributes": ["status"]})}
JSON์ด ์ด์ค์ผ์ดํ๋ ๊ฒฝ์ฐ isEscaped
์ต์
์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ฌธ ๋ถ์์ ํ ์ ์์ต๋๋ค. JSON์ด ์ด์ค์ผ์ดํ๋๊ณ ์ธ์ฉ์ด ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ธ์ฉ ๋ถํธ๋ ์ผ์น์์ผ์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ Grok ํํ์์ ์ฌ์ฉํ๋ฉด:
%{TIMESTAMP_ISO8601:containerTimestamp} "%{GREEDYDATA:my_attribute_prefix:json({"isEscaped": true})}"
์ด์ค์ผ์ดํ๋ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค.
2015-05-13T23:39:43.945958Z "{\"event\": \"TestRequest\", \"status\": 200, \"response\": {\"headers\": {\"X-Custom\": \"foo\"}}, \"request\": {\"headers\": {\"X-Custom\": \"bar\"}}}"
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
containerTimestamp: "2015-05-13T23:39:43.945958Z"
my_attribute_prefix.event: "TestRequest"
my_attribute_prefix.status: 200
my_attribute_prefix.response.headers.X-Custom: "foo"
my_attribute_prefix.request.headers.X-Custom: "bar"
json
Grok ์ ํ์ ๊ตฌ์ฑํ๋ ค๋ฉด :json(_CONFIG_)
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
json({"dropOriginal": true})
: ๊ตฌ๋ฌธ ๋ถ์์ ์ฌ์ฉ๋ JSON ์ค๋ํซ์ ์ญ์ ํฉ๋๋ค. true
(๊ธฐ๋ณธ๊ฐ)๋ก ์ค์ ํ๋ฉด ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ์๋ณธ JSON ์ค๋ํซ์ ์ญ์ ํฉ๋๋ค. JSON ์์ฑ์ ๋ฉ์์ง ํ๋์ ์ ์ง๋ฉ๋๋ค.json({"dropOriginal": false})
: ์ถ์ถ๋ JSON ํ์ด๋ก๋๋ฅผ ๋ณด์ฌ์ค๋๋ค. false
๋ก ์ค์ ํ๋ฉด ์ ์ฒด JSON ์ ์ฉ ํ์ด๋ก๋๊ฐ ์์ my_attribute_prefix
์ ์ด๋ฆ์ด ์ง์ ๋ ์์ฑ ์๋์ ํ์๋ฉ๋๋ค. JSON ์์ฑ์ ์ฌ๊ธฐ ๋ฉ์์ง ํ๋์ ๋จ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์์๊ฒ JSON ๋ฐ์ดํฐ์ ๋ํ 3๊ฐ์ง ๋ค๋ฅธ ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ธ ๊ฐ์ง ๋ฒ์ ๋ชจ๋ ์ ์ฅํ๋ ๊ฒ์ด ์ฐ๋ ค๋๋ ๊ฒฝ์ฐ ์ฌ๊ธฐ์์ ๊ธฐ๋ณธ๊ฐ์ธ true
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.json({"depth": 62})
: JSON ๊ฐ์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ ๊น์ด ์์ค(๊ธฐ๋ณธ๊ฐ์ 62)์
๋๋ค.json({"keepAttributes": ["attr1", "attr2", ..., "attrN"]})
: JSON์์ ์ถ์ถํ ์์ฑ์ ์ง์ ํฉ๋๋ค. ์ ๊ณต๋ ๋ชฉ๋ก์ ๊ณต๋ฐฑ์ผ๋ก ๋ ์ ์์ต๋๋ค. ์ด ๊ตฌ์ฑ ์ต์
์ ์ค์ ํ์ง ์์ผ๋ฉด ๋ชจ๋ ์์ฑ์ด ์ถ์ถ๋ฉ๋๋ค.json({"dropAttributes": ["attr1", "attr2", ..., "attrN"]})
: JSON์์ ๋๋กญํ ์์ฑ์ ์ง์ ํฉ๋๋ค. ์ด ๊ตฌ์ฑ ์ต์
์ด ์ค์ ๋์ง ์์ผ๋ฉด ์์ฑ์ด ๋๋กญ๋์ง ์์ต๋๋ค.json({"noPrefix": true})
: JSON์์ ์ถ์ถ๋ ์์ฑ์์ ์ ๋์ฌ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ์ด ์ต์
์ true
๋ก ์ค์ ํฉ๋๋ค.json({"isEscaped": true})
: ์ด์ค์ผ์ดํ๋ JSON์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ฉด ์ด ์ต์
์ true
๋ก ์ค์ ํฉ๋๋ค. (์ผ๋ฐ์ ์ผ๋ก JSON์ด ๋ฌธ์์ดํ๋ ๋ ๋ณผ ์ ์์ต๋๋ค. ์: {\"key\": \"value\"}
)
์์คํ
์ด ์ผํ๋ก ๊ตฌ๋ถ๋ ๊ฐ(CSV) ๋ก๊ทธ๋ฅผ ๋ณด๋ด๊ณ ์ด๋ฅผ ๋ด๋ ๋ฆญ์์ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํ๋ ๊ฒฝ์ฐ Grok ํจํด์ผ๋ก ์บก์ฒํ CSV๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ csv
Grok ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ํ์์ Grok ๊ตฌ๋ฌธ, ๊ตฌ๋ฌธ ๋ถ์๋ CSV ์์ฑ์ ํ ๋นํ๋ ค๋ ์ ๋์ฌ ๋ฐ csv
Grok ์ ํ์ ์ธ ๊ฐ์ง ์ฃผ์ ๋ถ๋ถ์ ์์กดํฉ๋๋ค. csv
Grok ์ ํ์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์์ CSV๋ฅผ ์ถ์ถํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ CSV ๋ก๊ทธ ์ค๊ณผ
"2015-05-13T23:39:43.945958Z,202,POST,/shopcart/checkout,142,10"
๋ค์ ํํ์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๊ฒฝ์ฐ:
%{GREEDYDATA:log:csv({"columns": ["timestamp", "status", "method", "url", "time", "bytes"]})}
๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.
log.timestamp: "2015-05-13T23:39:43.945958Z"
log.url: "/shopcart/checkout"
"log" ์ ๋์ฌ๋ฅผ ์๋ตํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ตฌ์ฑ์ "noPrefix": true
๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
%{GREEDYDATA:log:csv({"columns": ["timestamp", "status", "method", "url", "time", "bytes"], "noPrefix": true})}
์ด ๊ตฌ์ฑ:
- CSV Grok ์ ํ ๊ตฌ์ฑ(์ ํจํ JSON์ด์ด์ผ ํจ)์์ ํ์์ ์ผ๋ก ์ด์ ์ง์ํด์ผ ํฉ๋๋ค.
- ์ด ์ด๋ฆ์ผ๋ก "_"(๋ฐ์ค)์ ์ค์ ํ์ฌ ๊ฒฐ๊ณผ ๊ฐ์ฒด์์ ์ด์ ์ญ์ ํ๋ฉด ๋ชจ๋ ์ด์ ๋ฌด์ํ ์ ์์ต๋๋ค.
์ ํ์ ๊ตฌ์ฑ ์ต์
:
"์ด" ๊ตฌ์ฑ์ ํ์์ด์ง๋ง ๋ค์ ์ค์ ์ ์ฌ์ฉํ์ฌ CSV ๊ตฌ๋ฌธ ๋ถ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- dropOriginal: (๊ธฐ๋ณธ๊ฐ์
true
) ๊ตฌ๋ฌธ ๋ถ์์ ์ฌ์ฉ๋ CSV ์ค๋ํซ์ ์ญ์ ํฉ๋๋ค. true
(๊ธฐ๋ณธ๊ฐ)์ผ๋ก ์ค์ ํ๋ฉด ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ์๋ ํ๋๋ฅผ ์ญ์ ํฉ๋๋ค. - noPrefix: (๊ธฐ๋ณธ๊ฐ์
false
) Grok ํ๋ ์ด๋ฆ์ ๊ฒฐ๊ณผ ๊ฐ์ฒด์ ์ ๋์ฌ๋ก ํฌํจํ์ง ์์ต๋๋ค. - separator: (๊ธฐ๋ณธ๊ฐ์
,
) ๊ฐ ์ด์ ๋ถํ ํ๋ ๋ฌธ์/๋ฌธ์์ด์ ์ ์ํฉ๋๋ค.- ๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค๋
\t
๋ฅผ ๊ตฌ๋ถ ๊ธฐํธ๋ก ์ง์ ํด์ผ ํ๋ TSV(ํญ์ผ๋ก ๊ตฌ๋ถ๋ ๊ฐ)์
๋๋ค. %{GREEDYDATA:log:csv({"columns": ["timestamp", "status", "method", "url", "time", "bytes"], "separator": "\t"})
- quoteChar: (๊ธฐ๋ณธ๊ฐ์
"
) ์ด ๋ด์ฉ์ ์ ํ์ ์ผ๋ก ๋๋ฌ์ธ๋ ๋ฌธ์๋ฅผ ์ ์ํฉ๋๋ค.
์์คํ
์ด IPv4 ์ฃผ์๊ฐ ํฌํจ๋ ๋ก๊ทธ๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ ๋ด๋ ๋ฆญ์ ์ง๋ฆฌ์ ์ผ๋ก ์ฃผ์๋ฅผ ์ฐพ๊ณ ์ง์ ๋ ์์ฑ์ผ๋ก ๋ก๊ทธ ์ด๋ฒคํธ๋ฅผ ๋ณด๊ฐํ ์ ์์ต๋๋ค. Grok ํจํด์ด ์บก์ฒํ IP ์ฃผ์์ ์์น๋ฅผ ์ฐพ๋ geo
Grok type์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ํฌ๋งท์ IP์ ๋์, ๊ตญ๊ฐ, ์๋/๊ฒฝ๋ ๋ฑ ์ฃผ์์ ๊ด๋ จ๋ ํ๋ ์ด์์ ํ๋๋ฅผ ๋ฐํํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ก๊ทธ ์ค์ด ์ฃผ์ด์ง๋๋ค.
2015-05-13T23:39:43.945958Z 146.190.212.184
๋ค์ ํํ์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๊ฒฝ์ฐ:
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:ip:geo({"lookup":["city","region","countryCode", "latitude","longitude"]})}
๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.
ip.countryName: United States
ip.regionName: New Jersey
containerTimestamp:2015-05-13T23:39:43.945958Z
๋ฃฉ์
๊ตฌ์ฑ:
๋ฐ๋์ geo
์์
์์ ๋ฐํ๋ ์ํ๋ lookup
ํ๋๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ค์ ์ต์
์ค ์ ์ด๋ 1๊ฐ ํญ๋ชฉ์ด ํ์ํฉ๋๋ค.
- city: ๋์ ์ด๋ฆ
- countryCode: ๊ตญ๊ฐ์ ์ฝ์
- countryName: ๊ตญ๊ฐ ์ด๋ฆ
- latitude: ์๋
- longitude: ๊ฒฝ๋
- postalCode: ์ฐํธ๋ฒํธ ๋๋ ์ด์ ์ ์ฌํ ๊ฒ
- region: ์ฃผ, ๋, ์ง์ญ์ ์ฝ์
- regionName: ์ฃผ, ๋, ์ง์ญ์ ์ด๋ฆ
๋ด๋ ๋ฆญ ๋ก๊ทธ ํ์ดํ๋ผ์ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ง๋ง, ๋๋ก๋ ๋ก๊ทธ ๋ฉ์์ง๊ฐ ํค/๊ฐ ์ ํ์์ด ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ด๋ฐ ์ํฉ์์๋ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ค์ ํค/๊ฐ ์์ฑ์ ์ฌ์ฉํ์ฌ ํํฐ๋งํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๊ฒฝ์ฐ, keyvalue
grok ์ ํ์ ์ฌ์ฉํ๋ฉด grok ํจํด์์ ์บก์ฒํ ํค/๊ฐ ์์ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. ์ด ํ์์ 3๊ฐ์ง ๋ถ๋ถ ์ฆ, grok ๊ตฌ๋ฌธ, ๊ตฌ๋ฌธ ๋ถ์๋ ํค/๊ฐ ์์ฑ์ ์ง์ ํ๋ ค๋ ์ ๋์ฌ, keyvalue
grok ์ ํ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. keyvalue
grok ์ ํ์ ์ฌ์ฉํ๋ฉด ๋ก๊ทธ์์ ์ ์ ํ๊ฒ ํ์์ด ์ง์ ๋์ง ์์ ํค/๊ฐ ์์ ์ถ์ถํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ก๊ทธ์ ๋ ์ง/์๊ฐ ๋ฌธ์์ด์ด ์ ๋์ฌ๋ก ๋ถ์ ๊ฒฝ์ฐ:
2015-05-13T23:39:43.945958Z key1=value1,key2=value2,key3=value3
์ด ๋ก๊ทธ ํ์์์ ํค/๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ฉด ๋ค์ Grok ํํ์์ ๋ง๋ญ๋๋ค.
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:keyvalue()}
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
containerTimestamp: "2015-05-13T23:39:43.945958Z"
my_attribute_prefix.key1: "value1"
my_attribute_prefix.key2: "value2"
my_attribute_prefix.key3: "value3"
๋ง์ถคํ๋ ๊ตฌ๋ถ ๊ธฐํธ์ ๋ถ๋ฆฌ ๊ธฐํธ๋ฅผ ์ ์ํด ํ์ํ ํค/๊ฐ ์์ ์ถ์ถํ ์๋ ์์ต๋๋ค.
2015-05-13T23:39:43.945958Z event:TestRequest request:bar
์๋ฅผ ๋ค์ด, ๋ค์ Grok ํํ์์ ์ฌ์ฉํ๋ฉด:
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:keyvalue({"delimiter": " ", "keyValueSeparator": ":"})}
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
containerTimestamp: "2015-05-13T23:39:43.945958Z"
my_attribute_prefix.event: "TestRequest"
my_attribute_prefix.request: "bar"
my_attribute_prefix
์ ๋์ฌ๋ฅผ ์๋ตํ๋ ค๋ฉด ์ค์ ์ "noPrefix": true
๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:keyValue({"noPrefix": true})}
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
containerTimestamp: "2015-05-13T23:39:43.945958Z"
์ํ๋ ์ธ์ฉ ๋ฌธ์ ์ ๋์ฌ๋ฅผ ์ค์ ํ๋ ค๋ฉด, ๊ตฌ์ฑ์ "quoteChar":๋ฅผ ํฌํจ์ํต๋๋ค.
2015-05-13T23:39:43.945958Z nbn_demo='INFO',message='This message contains information with spaces ,sessionId='abc123'
%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:keyValue({"quoteChar": "'"})}
๊ฒฐ๊ณผ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"my_attribute_prefix.message": "'This message contains information with spaces",
"my_attribute_prefix.nbn_demo": "INFO",
"my_attribute_prefix.sessionId": "abc123"
Grok ํจํด ํ๋ผ๋ฏธํฐ
๋ค์ ์ต์
์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ํ์์ ๋ง๊ฒ ๊ตฌ๋ฌธ ๋ถ์์ ๋์์ ์ ์ํ ์ ์์ต๋๋ค.
delimiter
- ์ค๋ช
: ๊ฐ ํค/๊ฐ ์์ ๊ตฌ๋ถํ๋ ๋ฌธ์์ด์
๋๋ค.
- ๊ธฐ๋ณธ๊ฐ:
,
(์ผํ) - ์ฌ์ ์: ํ๋
delimiter
๋ฅผ ์ค์ ํ์ฌ ์ด ๋์์ ๋ณ๊ฒฝํฉ๋๋ค.
keyValueSeparator
- ์ค๋ช
: ํค์ ๊ฐ์ ํ ๋นํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์์ด์
๋๋ค.
- ๊ธฐ๋ณธ๊ฐ:
=
- ์ฌ์ ์: ์ํ๋ ๋ถ๋ฆฌ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋
keyValueSeparator
๋ฅผ ์ค์ ํฉ๋๋ค.
quoteChar
- ์ค๋ช
: ๊ณต๋ฐฑ์ด๋ ํน์ ๋ฌธ์๋ก ๊ฐ์ ๋ฌถ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์์
๋๋ค.
- ๊ธฐ๋ณธ๊ฐ:
"
(ํฐ๋ฐ์ดํ) - ์ฌ์ ์:
quoteChar
์ฌ์ฉํ์ฌ ์ํ๋ ๋ฌธ์๋ฅผ ์ ์ํฉ๋๋ค.
dropOriginal
- ์ค๋ช
: ๊ตฌ๋ฌธ ๋ถ์ ํ ์๋ณธ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ญ์ ํฉ๋๋ค. ๋ก๊ทธ ์ ์ฅ ๊ณต๊ฐ์ ์ค์ด๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ:
true
- ์ฌ์ ์: ์๋ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ ์งํ๋ ค๋ฉด
dropOriginal
์ false
๋ก ์ค์ ํฉ๋๋ค.
noPrefix
- ์ค๋ช
:
true
๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ๊ฐ์ฒด์์ Grok ํ๋ ์ด๋ฆ์ ์ ๋์ฌ๋ก ์ ์ธ์ํต๋๋ค. - ๊ธฐ๋ณธ๊ฐ:
false
- ์ฌ์ ์:
noPrefix
true
๋ก ์ค์ ํ์ฌ ํ์ฑํํฉ๋๋ค.
escapeChar
- ์ค๋ช
: ํน์ ๋ก๊ทธ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ์ด์ค์ผ์ดํ ๋ฌธ์๋ฅผ ์ํ๋ ๋๋ก ์ ์ํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ: ""(์ญ์ฌ๋์)
- ์ฌ์ ์:
escapeChar
๋ก ๋ง์ถคํํฉ๋๋ค.
trimValues
- ์ค๋ช
: ๊ณต๋ฐฑ์ด ํฌํจ๋ ๊ฐ์ ์๋ผ๋ผ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ๊ฐ:
false
- ์ฌ์ ์: ํธ๋ฆฌ๋ฐ์ ํ์ฑํํ๋ ค๋ฉด
trimValues
๋ฅผ true
๋ก ์ค์ ํฉ๋๋ค.
trimKeys
- ์ค๋ช
: ๊ณต๋ฐฑ์ด ํฌํจ๋ ํค๋ฅผ ์๋ผ๋ผ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ๊ฐ:
true
- ์ฌ์ ์: ํธ๋ฆฌ๋ฐ์ ํ์ฑํํ๋ ค๋ฉด
trimKeys
๋ฅผ true
๋ก ์ค์ ํฉ๋๋ค.
๋ก๊ทธ ์ ํ๋ณ ์ ๋ฆฌ
๋ด๋ ๋ฆญ์ ๋ก๊ทธ ์์ง ํ์ดํ๋ผ์ธ์ ๋ก๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ๊ท์น์ ๋ก๊ทธ ์ด๋ฒคํธ๋ฅผ ๋งค์นญ์์ผ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ก๊ทธ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค.
๊ท์น์ ๋งค์นญ๋๋ ๋ก์ง๊ณผ ๊ตฌ๋ฌธ ๋ถ์ ๋ก์ง์ ์กฐํฉ์
๋๋ค. ๋งค์นญ์ ๋ก๊ทธ์ ์์ฑ์ ๋ํ ์ฟผ๋ฆฌ ๋งค์น๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ํ๋ฉ๋๋ค. ๊ท์น์ ์๊ธ ์ ์ฉ๋์ง ์์ต๋๋ค. ๊ท์น์ด ์์ฑ๋๊ธฐ ์ ์ ์์ง๋ ๋ก๊ทธ๋ ํด๋น ๊ท์น์ ์ํด ๊ตฌ๋ฌธ ๋ถ์๋์ง ์์ต๋๋ค.
๋ก๊ทธ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ก๊ทธ ์ด๋ฒคํธ์ logtype
ํ๋๋ฅผ ํฌํจํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๋ก๊ทธ์ ์ ์ฉํ ๋ด์ฅ๋ ๊ท์น์ ๋ด๋ ๋ฆญ์ ์๋ ค์ค๋๋ค.
์ค์
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ํ์ฑํ๋๋ฉด, ๊ท์น์ ์ํด ๊ตฌ๋ฌธ ๋ถ์๋ ๋ฐ์ดํฐ๋ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆด ์ ์์ต๋๋ค.
์ ํ
๊ตฌ๋ฌธ ๋ถ์์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์ํ์ด ๋ฐ๋ฆ
๋๋ค. ๊ณ์ ์ ์ ์๋ ์ปค์คํ
๊ท์น๊ณผ ํจํด์ ๋ก๊ทธ์ ๋งค์นญ์ํค๊ธฐ ์ํด ๊ตฌ๋ฌธ ๋ถ์์ด ์ํ๋ฉ๋๋ค. ๋ง์ ์์ ํจํด์ด๋ ์๋ชป ์ ์๋ ์ปค์คํ
๊ท์น์ ์์ฒญ๋ ์์ ๋ฉ๋ชจ๋ฆฌ์ CPU ๋ฆฌ์์ค๋ฅผ ์๋นํ ๋ฟ์๋๋ผ ์๋ฃํ๋ ๋ฐ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ๊ท์น๋น ๋ฉ์์ง๋น, ๊ณ์ ๋น 2ํ์ ๊ตฌ๋ฌธ ๋ถ์ ์ ํ์ ์ ์ฉํฉ๋๋ค.
์ ํ | ์ค๋ช
|
---|
Per-message-per-rule | ๊ท์น๋น ๋ฉ์์ง๋น ์ ํ์ผ๋ก ๋จ์ผ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ด 100ms๋ฅผ ์ด๊ณผํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด ์ ํ์ ๋๋ฌํ๋ฉด ์์คํ
์ ํด๋น ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ ์๋๋ฅผ ์ค์งํฉ๋๋ค. ์ธ์ ์คํธ ํ์ดํ๋ผ์ธ์ ํด๋น ๋ฉ์์ง์ ์ ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ชจ๋ ํญ๋ชฉ์ ์คํํ๋ ค๊ณ ์๋ํ๋ฉฐ, ๋ฉ์์ง๋ ์ฌ์ ํ ์์ง ํ์ดํ๋ผ์ธ์ ํตํด ์ ๋ฌ๋๊ณ NRDB์ ์ ์ฅ๋ฉ๋๋ค. ๋ก๊ทธ ๋ฉ์์ง๋ ์๋์ ๊ตฌ๋ฌธ ๋ถ์๋์ง ์์ ํฌ๋งท์
๋๋ค. |
Per-account | ๊ณ์ ๋น ์ ํ์ ๊ณ์ ์ด ๊ณต์ ํ ๋ฆฌ์์ค ํ ๋น๋ ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์
๋๋ค. ์ด ์ ํ์ ๊ณ์ ์ ๋ํ ๋ถ๋น ๋ชจ๋ (all) ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์์๋ ์ด ์๊ฐ์ ๊ณ ๋ คํฉ๋๋ค. |
๊ธฐ๋ณธ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น
๊ณตํต ๋ก๊ทธ ํฌ๋งท์๋ ์ ์ ๋ฆฝ๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ์ด๋ฏธ ์์ฑ๋์ด ์์ต๋๋ค. ๋ด์ฅ๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์ด์ ์ ์ป์ผ๋ ค๋ฉด, ๋ก๊ทธ๋ฅผ ์ ๋ฌํ ๋ logtype
์์ฑ์ ์ถ๊ฐํฉ๋๋ค. ๊ฐ์ ๋ค์ ํ์ ๋์ด๋ ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด, ํด๋น ์ ํ์ ๋ก๊ทธ์ ๋ํ ๊ท์น์ด ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
๋ด์ฅ๋ ๊ท์น ๋ชฉ๋ก
๋ค์ logtype
์์ฑ ๊ฐ์ ์ฌ์ ์ ์๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋งคํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, Application Load Balancer๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด:
- ๋ด๋ ๋ฆญ UI์์
logtype:"alb"
ํฌ๋งท์ ์ฌ์ฉํฉ๋๋ค. - NerdGraph์์
logtype = 'alb'
ํฌ๋งท์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ ๊ท์น์ ๋ํด ๊ตฌ๋ฌธ ๋ถ์๋๋ ํ๋๋ฅผ ์์๋ณด๋ ค๋ฉด ๋ด์ฅ๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ํ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
logtype
| ๋ก๊ทธ ์์ค | ๋งค์นญ ์ฟผ๋ฆฌ์ ์ |
---|
apache
| Apache ์ก์ธ์ค ๋ก๊ทธ | logtype:"apache"
|
apache_error
| Apache ์ค๋ฅ ๋ก๊ทธ | logtype:"apache_error"
|
alb
| ์ ํ๋ฆฌ์ผ์ด์
๋ก๋ ๋ฐธ๋ฐ์ ๋ก๊ทธ | logtype:"alb"
|
cassandra
| Cassandra ๋ก๊ทธ | logtype:"cassandra"
|
cloudfront-web
| CloudFront (ํ์ค ์น ๋ก๊ทธ) | logtype:"cloudfront-web"
|
cloudfront-rtl
| CloudFront (์ค์๊ฐ ์น ๋ก๊ทธ) | logtype:"cloudfront-rtl"
|
elb
| Elastic ๋ก๋ ๋ฐธ๋ฐ์ ๋ก๊ทธ | logtype:"elb"
|
haproxy_http
| HAProxy ๋ก๊ทธ | logtype:"haproxy_http"
|
ktranslate-health
| KTranslate ์ปจํ
์ด๋ ์ํ ๋ก๊ทธ | logtype:"ktranslate-health"
|
linux_cron
| Linux cron | logtype:"linux_cron"
|
linux_messages
| Linux ๋ฉ์์ง | logtype:"linux_messages"
|
iis_w3c
| Microsoft IIS ์๋ฒ ๋ก๊ทธ - W3C ํฌ๋งท | logtype:"iis_w3c"
|
mongodb
| MongoDB ๋ก๊ทธ | logtype:"mongodb"
|
monit
| Monit ๋ก๊ทธ | logtype:"monit"
|
mysql-error
| MySQL ์ค๋ฅ ๋ก๊ทธ | logtype:"mysql-error"
|
nginx
| NGINX ์ก์ธ์ค ๋ก๊ทธ | logtype:"nginx"
|
nginx-error
| NGINX ์ค๋ฅ ๋ก๊ทธ | logtype:"nginx-error"
|
postgresql
| PostgreSQL ๋ก๊ทธ | logtype:"postgresql"
|
rabbitmq
| Rabbitmq ๋ก๊ทธ | logtype:"rabbitmq"
|
redis
| Redis ๋ก๊ทธ | logtype:"redis"
|
route-53
| Route 53 ๋ก๊ทธ | logtype:"route-53"
|
syslog-rfc5424
| RFC5424 ํฌ๋งท Syslog | logtype:"syslog-rfc5424"
|
์ถ๊ฐํ๋ค logtype
๋ก๊ทธ๋ฅผ ์ง๊ณํ ๋๋ ๋ก๊ทธ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑ, ๊ฒ์ ๋ฐ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๋๋ก ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฅผ ์ํ ํ ๊ฐ์ง ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ ์ก๋ ๋ ๋ก๊ทธ ๋ฉ์์ง์ ์์ฑ logtype
์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ๋ด์ฅ๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํน์ logtype
๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
ํ
logType
, logtype
๋ฐ LOGTYPE
ํ๋๋ ๋ชจ๋ ๋ด์ฅ๋ ๊ท์น์ ์ง์ํฉ๋๋ค. ๊ฒ์์ ์ฝ๊ฒ ํ๋ ค๋ฉด ์กฐ์ง์ด ๋จ์ผ ๊ตฌ๋ฌธ์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์์ ์ง์๋๋ ์ ์ก ๋ฐฉ๋ฒ ์ค ์ผ๋ถ์์ ๋ณด๋ธ ๋ก๊ทธ์ logtype
์ ์ถ๊ฐํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์
๋๋ค.
logtype
์ attribute
๋ก ์ถ๊ฐํฉ๋๋ค. ๋ช
๋ช
๋ ๊ฐ ์์ค์ ๋ํด ๋ก๊ทธ ์ ํ์ ์ค์ ํด์ผ ํฉ๋๋ค.
record_transformer
๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ .conf
ํ์ผ์ ํํฐ ๋ธ๋ก์ ์ถ๊ฐํฉ๋๋ค. ์ด ์์์๋ nginx
์ logtype
์ ์ฌ์ฉํ์ฌ ๋ด์ฅ NGINX ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋ค๋ฅธ Fluentd ์์ ๋ค์ ํ์ธํด ๋ณด์ญ์์ค.
record_modifier
๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ ํํฐ ๋ธ๋ก์ .conf
ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.์ด ์์์๋ nginx
์ logtype
์ ์ฌ์ฉํ์ฌ ๋ด์ฅ๋ NGINX ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋ค๋ฅธ Fluent Bit ์์๋ฅผ ํ์ธํด๋ณด์ญ์์ค.
Record hostname ${HOSTNAME}
Record service_name Sample-App-Name
add_field
mutate ํํฐ๋ฅผ ์ฌ์ฉํด ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ ํํฐ ๋ธ๋ก์ Logstash ๊ตฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์์์๋ nginx
์ logtype
์ ์ฌ์ฉํ์ฌ ๋ด์ฅ๋ NGINX ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋ค๋ฅธ Logstash ์์๋ฅผ ํ์ธํด๋ณด์ญ์์ค.
"service_name" => "myservicename"
๋ด๋ ๋ฆญ์ผ๋ก ์ ์ก๋ JSON ์์ฒญ์ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด ์์์๋ ๊ฐ์ด nginx
์ธ logtype
์์ฑ์ ์ถ๊ฐํ์ฌ ๋ด์ฅ๋ NGINX ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. Logs API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด๋ค ์์ธํ ์์๋ณด์ญ์์ค.
Host: log-api.newrelic.com
Content-Type: application/json
X-License-Key: YOUR_LICENSE_KEY
"timestamp": TIMESTAMP_IN_UNIX_EPOCH,
"message": "User 'xyz' logged in",
"service": "login-service",
"hostname": "login.example.com"
์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น ์์ฑ ๋ฐ ๋ณด๊ธฐ
๋ง์ ๋ก๊ทธ๊ฐ ๊ณ ์ ํ ๋ฐฉ์์ผ๋ก ํ์ํ๋๊ฑฐ๋ ๊ตฌ์กฐํ๋ฉ๋๋ค. ์ด๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ฉด ์ปค์คํ
๋ก์ง์ ๋น๋ํ๊ณ ์ ์ฉํด์ผ ํฉ๋๋ค.

๋ก๊ทธ UI์ ์ผ์ชฝ ํ์ ๋ฉ๋ด์์ Parsing์ ์ ํํ ๋ค์ ์ ํจํ NRQL WHERE
์ ๊ณผ Grok ํจํด์ ์ฌ์ฉํ์ฌ ๊ณ ์ ํ ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์์ฑํฉ๋๋ค.
๊ณ ์ ํ ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- one.newrelic.com > All capabilities > Logs์ผ๋ก ์ด๋ํฉ๋๋ค.
- ๋ก๊ทธ UI ์ผ์ชฝ ํ์ ๋ฉ๋ด์ Manage data์์ Parsing์ ํด๋ฆญํ ๋ค์ Create parsing rule์ ํด๋ฆญํฉ๋๋ค.
- ์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์ํ ๊ธฐ์กด ํ๋๋ฅผ ์ ํ(๊ธฐ๋ณธ๊ฐ =
message
)ํ๊ฑฐ๋ ์ ํ๋ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค. - ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ ๋ก๊ทธ์ ๋งค์น๋๋ ์ ํจํ NRQL
WHERE
์ ์ ์
๋ ฅํฉ๋๋ค. - ๋งค์นํ๋ ๋ก๊ทธ๊ฐ ์์ผ๋ฉด ์ ํํ๊ฑฐ๋ Paste log ํญ์ ํด๋ฆญํ์ฌ ์ํ ๋ก๊ทธ๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค. ๋ก๊ทธ UI ๋๋ ์ฟผ๋ฆฌ ๋น๋์์ ํ
์คํธ๋ฅผ ๋ณต์ฌํ์ฌ ๊ตฌ๋ฌธ ๋ถ์ UI์ ๋ถ์ฌ๋ฃ๋ ๊ฒฝ์ฐ ํด๋น ๋ฒ์ ์ด Unformatted ๋ฒ์ ์ธ์ง ํ์ธํฉ๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ์
๋ ฅํ๊ณ Output ์น์
์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ฌ ์๋ํ๋์ง ํ์ธํฉ๋๋ค. Grok ๋ฐ ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ํด ๋ณด๋ค ์์ธํ ์์๋ณด๋ ค๋ฉด Grok ํจํด์ผ๋ก ๋ก๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํ์ธํด๋ณด์ญ์์ค.
- ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ํ์ฑํํ๊ณ ์ ์ฅํฉ๋๋ค.
๊ธฐ์กด ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ณด๋ ค๋ฉด:
- one.newrelic.com > All capabilities > Logs์ผ๋ก ์ด๋ํฉ๋๋ค.
- ๋ก๊ทธ UI ์ผ์ชฝ ํ์ ๋ฉ๋ด์ Manage data์์ Parsing์ ํด๋ฆญํฉ๋๋ค.
๋ฌธ์ ํด๊ฒฐ
๊ตฌ๋ฌธ ๋ถ์์ด ์๋ํ ๋๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
- Logic: ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น ๋งค์นญ ๋ก์ง์ด ์ํ๋ ๋ก๊ทธ์ ์ผ์นํ์ง ์์ต๋๋ค.
- Timing: ๊ตฌ๋ฌธ ๋ถ์ ๋งค์นญ ๊ท์น์ด ์์ง ์กด์ฌํ์ง ์๋ ๊ฐ์ ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ, ๊ตฌ๋ฌธ ๋ถ์์ด ์คํจํฉ๋๋ค. ๋ณด๊ฐ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ๋์ค์ ํ์ดํ๋ผ์ธ์ ๊ฐ์ ์ถ๊ฐํ๋ฉด ์ด๋ฐ ์ผ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- Limits: ๋ถ๋น ๊ตฌ๋ฌธ ๋ถ์, ํจํด, ๋๋กญ ํํฐ ๋ฑ์ ํตํด ๋ก๊ทธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ด ํ์ ๋์ด ์์ต๋๋ค. ์ต๋ ์๊ฐ์ด ์์๋ ๊ฒฝ์ฐ ์ถ๊ฐ ๋ก๊ทธ ์ด๋ฒคํธ ๋ ์ฝ๋์ ๋ํ ๊ตฌ๋ฌธ ๋ถ์์ ๊ฑด๋๋๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ปค์คํ
๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ง๋ค๊ฑฐ๋ ์กฐ์ ํด์ผ ํฉ๋๋ค.