Istio Envoy Access Logging
์ฌ์ ์ค๋น
k apply -f https://raw.githubusercontent.com/istio/istio/master/samples/helloworld/helloworld.yaml
Enable Access Logging
Telemetry API
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
name: default-ns-logging
namespace: default
spec:
accessLogging:
- providers:
- name: envoy
$ k exec -it ... -- sh
~ $ curl http://helloworld.default.svc.cluster.local:5000/hello
---
$ k exec -it helloworld... -c istio-proxy -- sh
...
[2024-03-18T23:08:48.020Z] "GET /hello HTTP/1.1" 200 - via_upstream - "-" 0 59 52 51 "-" "curl/8.6.0" "a0698764-a04d-48c8-8914-045808d19898" "helloworld.default.svc.cluster.local:5000" "10.42.0.4:5000" inbound|5000|| 127.0.0.6:60873 10.42.0.4:5000 10.42.0.6:48352 outbound_.5000_._.helloworld.default.svc.cluster.local default
...
[2024-03-18T23:10:51.528Z] "GET /hello HTTP/1.1" 200 - via_upstream - "-" 0 59 38 37 "-" "curl/7.88.1" "5c3abfa9-c806-490b-a5ec-a6659f866490" "helloworld.default.svc.cluster.local:5000" "10.42.0.5:5000" outbound|5000||helloworld.default.svc.cluster.local 10.42.0.4:55914 10.43.135.30:5000 10.42.0.4:41438 - default
...
ํน์ ๋ค์์คํ์ด์ค ๋๋ Workload์ ๋ํด์๋ง Access Log๋ฅผ ์ดํด๋ด์ผ ํ๋ค๋ฉด ์ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค.
Mesh Config
spec:
meshConfig:
accessLogFile: /dev/stdout
๋๋
$ istioctl install --set meshConfig.accessLogFile=/dev/stdout
๋๋ค ์จ๋ณด๊ธฐ
์ผ๋จ Telemetry API ๋ฐฉ์๊ณผ Mesh Config ๋ฐฉ์ ๋๋ค ๋ ๋ฆฝ์ ์ด๋ค! ์ฒ์์ ๋๋ค ์ธํ ์ ํด์ผ ๋ก๊น ์ด ๋๋ ์ค ์์๋๋ฐ, ๊ทธ๊ฒ ์๋๋ผ ๋ ์ค ์ด๋ค ๋ฐฉ๋ฒ์ ์จ๋ Envoy Logging์ด ๋๋ค!
๋ค๋ง, ์ฐจ์ด์ ์ Telemetry API๋ ๋ค์์คํ์ด์ค์ ์ํฌ๋ก๋ Selector๋ฅผ ํตํด ๋ก๊น ๋์์ ์ ํํ ์ ์์ด์ ์ข๋ ์ธ๋ฐํ(fine-grained) ๋ก๊ทธ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
Access Log Format
Access Log๊ฐ ์ด๋ค ์ ๋ณด๋ค์ ๋ณด์ฌ์ฃผ๋์ง ์ข๋ ์ดํด๋ณด์.
ํธ๋ํฝ์ ๋ฐฉํฅ ๊ตฌ๋ถ ๊ฐ๋ฅ
Access Log๋ inbound, outbound ํธ๋ํฝ์ ํ๋ฆ์ ๊ธฐ๋กํ๋ค.
- inbound
- ์ํฌ๋ก๋๋ก ๋ค์ด์ค๋ ํธ๋ํฝ
- outbound
- ์ํฌ๋ก๋์์ ๋๊ฐ๋ ํธ๋ํฝ
upstream, downstream ์ ๋ณด ํ์ธ ๊ฐ๋ฅ
upstream, downstream ์๊ฒ๋ค์ envoy์ ์ฉ์ด๋ค.
๋จผ์ โupstreamโ์ Envoy sidecar๊ฐ ๋ฐ์ ์์ฒญ์ forward ๋ฐ๋ ํธ์คํธ๋ฅผ ๋งํ๋ค. ๊ธฐ์กด ์ํฌ๋ก๋ ์ปจํ ์ด๋๊ฐ upstream ์ญํ ์ ํ๋ค.
โdownstreamโ์ Envoy sidecar์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๋ฐ๋ ํธ์คํธ๋ฅผ ๋งํ๋ค.
- upstream
- host
- ex:
10.42.0.4:5000
- ex:
- cluster
- ex:
inbound|5000||
,outbound|5000||helloworld.default.svc.cluster.local
- ํ์์
{direction}|{port}|{subset}|{hostname}
- โclusterโ๊ฐ Envoy์์๋ โํธ๋ํฝ์ ๋ณด๋ผ ์ ์๋ ๋์ ์ํฌ๋ก๋์ ์งํฉโ์ ๋งํ๋๋ฐ, ํ์ Istio Envoy Log์์๋ ๋์ผํ ์๋ฏธ๋ก ์ฐ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค ๐ค
- ex:
- local address
- ex:
127.0.0.6:60873
- ex:
- host
- downstream
- local address
- ex:
10.42.0.4:5000
- ex:
- remote address
- ex:
10.42.0.6:48352
- ex:
- local address
Request ๊ธฐ๋ณธ ์ ๋ณด ํ์ธ ๊ฐ๋ฅ
- Method & Path
- ex:
GET /hello HTTP/1.1
- ex:
- X-ENVOY-UPSTREAM-SERVICE-TIME
- ์์ฒญ์ด Envoy์ ๋์ฐฉํ ํ ์ ์คํธ๋ฆผ ์๋น์ค์ ์ํด ์ฒ๋ฆฌ๊ฐ ์๋ฃ ๋๊ณ Envoy๋ก ๋์์ฌ ๋๊น์ง ๊ฑธ๋ฆฐ ์ ์ฒด ์๊ฐ (๋ฐ๋ฆฌ์ด ๋จ์)
- X-FORWARDED-FOR (XFF ํค๋)
- ์์ฒญ์ด proxy ์๋ฒ๋ ๋ก๋ ๋ฐธ๋ฐ์์ ๊ฐ์ ์ค๊ฐ ์๋ฒ๋ฅผ ํต๊ณผํ ๋, ์๋ ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ๋ณด์กดํ๋๋ฐ ์ฌ์ฉ
- User Agent
- ex:
curl/8.6.0
- ex:
- X-REQUEST-ID
- ex:
a0698764-a04d-48c8-8914-045808d19898
- ๊ฐ๋ฒ HTTP ์์ฒญ์ ์๋ณํ๊ณ , ๊ทธ๊ฒ๋ค์ ์ถ์ (tracing) ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํค๋
- ex:
- Authority
- ex:
helloworld.default.svc.cluster.local:5000
- ์์ฒญ์ด ์ ์ก๋๋, ์์ฒญ์ด ํ๊น์ผ๋ก ํ๋ ํธ์คํธ ์ด๋ฆ๊ณผ ํฌํธ ๋ฒํธ๊ฐ ๋ด๊ธด ํค๋.
- HTTP/1.x์
Host
ํค๋์ ์ ์ฌํ ์ญํ . - ์๋ฒ ๋๋ ํ๋ก์๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์๋น์ค ํ๋ ๊ฒฝ์ฐ, ์๋ฅผ ๋ค์ด
example.com
๊ณผanother.com
์ด IP ์ฃผ์๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ, ์์ฒญ์ด ์ด๋ค ๋๋ฉ์ธ์ ๋์์ผ๋ก ํ๋์ง ๊ตฌ๋ถํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- ex:
Response ์ ๋ณด ํ์ธ ๊ฐ๋ฅ
- Response Code
- ex:
200
- ex:
- Response Code Details
- Response Code๊ฐ ์์ฑ๋ ๊ตฌ์ฒด์ ์ธ ์ด์ ๋ ์กฐ๊ฑด์ ์ค๋ช . ๋๋ฒ๊น ์ฉ๋.
- Response Flag
- ex:
via_upstream
- ์๊ฑด โThe response code was set by the upstreamโ๋ผ๋ ์๋ฏธ.
- ์์ฒญ์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋์๋์ง ํ์.
- Envoy ๋ฌธ์์์ ์ ์ฒด ๋ชฉ๋ก ํ์ธ ๊ฐ๋ฅ.
- ex:
Header์ Body ์ ๋ณด๋ ํ์ธ ๋ถ๊ฐ
Envoy Access Log๋ Header์ Body ์ ๋ณด๋ ๋ณด์ฌ์ฃผ์ง ์๋๋ค.
curl http://helloworld.default.svc.cluster.local:5000/hello --header "haha: hoho"
์๋ ๊ฒ ์์ฒญ์ ๋ณด๋ด๋, header ์ ๋ณด๋ ํ์ธ ๋ถ๊ฐ๋ฅ!
๋จ, ๋ช๋ช ํค๋(X-FORWARDED-FOR
, X-REQUEST-ID
, AUTHORITY
)๋ Access Log์ ํ์๋๋ค.