컴포넌트 로깅
컴포넌트 로깅 (Component Logging)
Istio 컴포넌트는 유연한 로깅 프레임워크로 만들어져 있어요. 이 프레임워크는 컴포넌트 운영과 진단을 돕는 다양한 기능과 제어를 제공해요. 컴포넌트를 시작할 때 커맨드라인 옵션을 전달해서 이런 로깅 기능을 제어할 수 있어요.
출처: Istio 문서
본문
로깅 스코프 (Logging scopes)
컴포넌트가 출력하는 로깅 메시지는 스코프(scope) 로 분류돼요. 스코프는 하나의 묶음으로 제어할 수 있는 관련 로그 메시지들의 집합을 나타내요. 컴포넌트가 제공하는 기능에 따라 컴포넌트마다 서로 다른 스코프를 가져요. 모든 컴포넌트는 분류되지 않은 로그 메시지에 사용되는 default 스코프를 가지고 있어요.
예를 들어, 이 글을 쓰는 시점에 istioctl은 명령 내의 서로 다른 기능 영역을 나타내는 25개의 스코프를 가지고 있어요:
ads, adsc, all, analysis, authn, authorization, ca, cache, cli, default, installer, klog, mcp, model, patch, processing, resource, source, spiffe, tpath, translator, util, validation, validationController, wle
Pilot-Agent, Pilot-Discovery, Istio Operator는 각자의 스코프를 가지고 있으며, 이는 참조 문서를 보면 확인할 수 있어요.
각 스코프는 다음과 같은 고유한 출력 레벨을 가져요:
- none
- error
- warn
- info
- debug
여기서 none은 스코프에 대해 어떤 출력도 만들지 않고, debug는 최대량의 출력을 만들어내요. 모든 스코프의 기본 레벨은 info로, 정상 조건에서 Istio를 운영할 때 적절한 양의 로깅 정보를 제공하도록 의도된 것이에요.
출력 레벨을 제어하려면 --log_output_level 커맨드라인 옵션을 사용해요. 예를 들어:
$ istioctl analyze --log_output_level klog:none,cli:info
커맨드라인에서 출력 레벨을 제어하는 것 외에도, 실행 중인 컴포넌트의 출력 레벨을 ControlZ 인터페이스를 사용해 제어할 수도 있어요.
출력 제어 (Controlling output)
로그 메시지는 보통 컴포넌트의 표준 출력 스트림으로 보내져요. --log_target 옵션을 사용하면 출력을 여러 다른 위치로 보낼 수 있어요. 이 옵션에는 파일 시스템 경로의 쉼표 구분 목록을 주고, 표준 출력과 표준 오류 스트림을 나타내는 특별한 값 stdout과 stderr도 사용할 수 있어요.
로그 메시지는 보통 사람이 읽기 좋은 형식으로 출력돼요. --log_as_json 옵션을 사용하면 도구가 처리하기 쉬운 JSON 형식으로 출력을 강제할 수 있어요.
로그 로테이션 (Log rotation)
Istio 컨트롤 플레인 컴포넌트는 로그 로테이션을 자동으로 관리할 수 있어서, 큰 로그를 더 작은 로그 파일로 쪼개기 쉽게 해줘요. --log_rotate 옵션으로 로테이션에 사용할 기본 파일 이름을 지정할 수 있고, 개별 로그 파일에는 파생된 이름이 사용돼요.
--log_rotate_max_age 옵션으로 파일 로테이션이 일어나기 전까지의 최대 일수를, --log_rotate_max_size 옵션으로 로테이션이 일어나기 전까지의 최대 크기(메가바이트)를 지정할 수 있어요. 마지막으로 --log_rotate_max_backups 옵션으로 보관할 로테이션 파일의 최대 개수를 제어할 수 있고, 더 오래된 파일은 자동으로 삭제돼요.
컴포넌트 디버깅 (Component debugging)
--log_caller와 --log_stacktrace_level 옵션을 사용하면 로그 정보에 프로그래머 레벨 정보를 포함할지 제어할 수 있어요. 이는 컴포넌트의 버그를 추적할 때 유용하지만, 일상적인 운영에서는 보통 사용하지 않아요.
See also
Istiod 인트로스펙션 (Istiod Introspection) — ControlZ를 사용해 실행 중인 istiod 컴포넌트에 대한 인사이트를 얻는 방법.