클러스터에 대한 로깅
IBM Cloud® Kubernetes Service의 로깅을 설정하면 문제점을 해결하고 Kubernetes 클러스터 및 앱의 상태와 성능을 향상시킬 수 있습니다.
지속적 모니터링과 로깅은 클러스터에 대한 공격을 감지하고 이의 발생 시에 문제를 해결하는 열쇠입니다. 클러스터를 지속적으로 모니터링함으로써 사용자는 클러스터의 용량은 물론 앱에 사용 가능한 리소스의 가용성을 보다 잘 파악할 수 있습니다. 이 인사이트를 사용하면 가동 중단 시에 앱을 보호할 수 있도록 준비할 수 있습니다.
로깅 솔루션 선택
기본적으로 IBM Cloud Kubernetes Service 클러스터 컴포넌트(작업자 노드, 컨테이너, 애플리케이션, 지속적 스토리지, 수신 애플리케이션 로드 밸런서, Kubernetes API 및 kube-system 네임스페이스 모두)에 대한 로그가 생성되고 로컬에 작성됩니다. 이러한 로그를 수집, 전달 및 볼 수 있는 여러 가지 로깅 솔루션을 사용할 수 있습니다.
- IBM Cloud Logs
- IBM Cloud Logs의 인스턴스를 배치하고 Kubernetes Service에서 사용자의 클러스터에 맞게 이 인스턴스를 구성하여 팟(Pod) 컨테이너 로그를 관리하십시오. 로깅 에이전트는
*.log확장자와/var/log을 포함한 모든 네임스페이스에서 팟(Pod)의kube-system디렉토리에 저장되는 확장 파일을 사용하여 로그를 수집합니다. 그런 다음 에이전트가 해당 로그를 귀하의 서비스 인스턴스로 전달합니다. 또한 클러스터에서 사용자 주도 관리 활동을 추적할 수 있습니다. Kubernetes Service 클러스터 관리 이벤트를 자동으로 생성하고 이러한 이벤트 로그를 IBM Cloud Logs 전달합니다. 자세한 정보는 IBM Cloud Logs 시작하기를 참조하십시오. 로깅 에이전트를 클러스터에 배포하려면 Red Hat OpenShift on IBM Cloud 용 로깅 에이전트 관리 또는 IBM Cloud Kubernetes Service 클러스터용 로깅 에이전트 관리를 참조하십시오. - 외부 서버를 사용하는 Fluentd
- 클러스터 컴포넌트의 로그를 수집, 전달 및 보기 위해 Fluentd를 사용하여 로깅 구성을 작성할 수 있습니다. 로깅 구성을 생성하면, Fluentd 클러스터 구성 요소는 지정된 소스의 경로에서 로그를 수집합니다. Fluentd 그런 다음 이 로그들을
syslog프로토콜을 지원하는 외부 서버로 전달할 수 있습니다. 시작하려면 외부 서버로의 로그 전달 이해하기를 참조하십시오.
로깅 및 모니터링 에이전트를 Cloud Logs로 마이그레이션하기
통합 가시성 CLI 플러그인 ibmcloud ob 및 v2/observe 엔드포인트는 더 이상 지원되지 않습니다. 직접 대체할 수는 없지만 이제 IBM Cloud Kubernetes Service 확장자를 통해 또는 IBM Cloud Kubernetes Service 로그 데이터를 IBM Cloud Logs로 전송하여 로깅 및 모니터링 통합을 관리할 수 있습니다.
더 이상 ob 플러그인, Terraform 또는 API를 사용하여 클러스터에 통합 가시성 에이전트를 설치하거나 기존 구성을 수정할 수 없습니다. Sysdig 에이전트는 지정된 IBM Cloud Monitoring 인스턴스로 메트릭을 계속 전송합니다. LogDNA 에이전트는 IBM Cloud Log Analysis 로그가 IBM Cloud 로 대체되었으므로 더 이상 로그를 보낼 수 없습니다.
통합 가시성 플러그인 에이전트 제거하기
-
ob plugin지원이 종료된 후에는 각 구성 요소를 개별적으로 삭제해야 합니다.- 데몬셋과 컨피그맵을 정리합니다.
kubectl delete daemonset logdna-agent -n ibm-observe kubectl delete daemonset sysdig-agent -n ibm-observe kubectl delete configmap <logdna-configmap> -n ibm-observe kubectl delete configmap <sysdig-configmap> -n ibm-observe ``` 1. 선택 사항입니다: 네임스페이스를 삭제합니다. 네임스페이스에서 다른 리소스가 실행되고 있지 않은 경우. ```sh {: pre} kubectl delete namespace ibm-observe ```
플러그인을 제거한 후, 클러스터 대시보드, Terraform 또는 수동으로 클러스터에 로깅 및 모니터링 에이전트를 다시 설치하십시오.
자세한 내용은 다음 링크를 참조하십시오.
외부 서버에 클러스터 및 앱 로그 전달
IBM Cloud Kubernetes Service 표준 클러스터에서 외부 서버로의 로그 전달을 구성하십시오.
외부 서버로의 로그 전달 이해
클러스터 내의 소스에 대해 외부 서버로 전달할 로깅 구성을 생성하면, Fluentd 클러스터 내에 해당 구성 요소가 생성됩니다. Fluentd는 소스의 경로에서 로그를 수집하고 외부 서버로 로그를 전달합니다. 소스에서 로깅 서비스로의 트래픽은 유입 포트에서 암호화됩니다.
- 로그 전달을 설정할 수 있는 소스는 무엇인가요?
- 다음 이미지에서, 로깅 설정을 구성할 수 있는 소스 영역을 확인할 수 있습니다.
-
worker: 작업자 노드에 대해 보유하고 있는 인프라 구성에 특정한 정보입니다.syslog에는 작업자 로그가 기록되며, 여기에는 운영 체제 이벤트가 포함됩니다.auth.log에서는 OS에 대해 작성된 인증 요청에 대한 정보를 찾을 수 있습니다.경로
/var/log/syslog/var/log/auth.log
-
container: 실행 중인 컨테이너에 의해 기록되는 정보. 경로:STDOUT또는STDERR에 기록되는 모든 내용. -
application: 애플리케이션 레벨에서 발생하는 이벤트에 대한 정보입니다. 이는 로그인 성공, 저장 공간 관련 경고, 또는 앱 수준에서 수행할 수 있는 기타 작업과 같은 이벤트 발생을 알리는 알림일 수 있습니다. 경로: 로그가 전달될 경로를 설정할 수 있습니다. 그러나 로그를 전송하려면 로깅 구성에서 절대 경로를 사용해야 합니다. 그렇지 않으면 로그를 읽을 수 없습니다. 경로가 워커 노드에 마운트되어 있다면, 심볼릭 링크가 생성되었을 수 있습니다. 예시: 지정된 경로가/usr/local/spark/work/app-0546/0/stderr인데, 실제로 로그가/usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr에 저장되는 경우, 해당 로그를 읽을 수 없습니다. -
storage: 클러스터에서 설정된 지속적 스토리지에 대한 정보. 스토리지 로그를 사용하면 DevOps 파이프라인 및 프로덕션 릴리스의 일부로서 문제점 판별 대시보드 및 경보를 설정하는 데 도움이 될 수 있습니다. 참고: 경로/var/log/kubelet.log및/var/log/syslog에는 스토리지 로그도 포함되어 있지만, 이러한 경로의 로그는kubernetes및worker로그 소스에 의해 수집됩니다.- 경로
-
/var/log/ibmc-s3fs.log/var/log/ibmc-block.log
- 팟(Pod)
-
portworx-***ibmcloud-block-storage-attacher-***ibmcloud-block-storage-driver-***ibmcloud-block-storage-plugin-***ibmcloud-object-storage-plugin-***
-
kubernetes: kubelet, kube-proxy, 그리고 작업자 노드의 kube-system 네임스페이스에서 발생한 기타 Kubernetes 이벤트의 정보입니다.- 경로
-
/var/log/kubelet.log/var/log/kube-proxy.log/var/log/event-exporter/1..log
-
ingress: Ingress ALB를 통해 클러스터로 들어오는 네트워크 트래픽에 대한 정보입니다.- 경로
-
/var/log/alb/ids/*.log/var/log/alb/ids/*.err/var/log/alb/customerlogs/*.log/var/log/alb/customerlogs/*.err
-
kube-audit: 시간, 사용자 및 영향을 받은 리소스를 포함하여 Kubernetes API 서버로 전송된 클러스터 관련 조치에 대한 정보입니다.kube-audit소스는 Webhook로 구성할 수 있습니다. 자세한 정보는 외부 서버에 Kubernetes API 감사 로그 전달을 참조하십시오.
- Fluentd 를 최신 상태로 유지하는 것은 제 책임인가요?
- 로깅 또는 필터 구성을 변경하려면 Fluentd 로깅 컴포넌트가 최신 버전이어야 합니다. 기본적으로는 추가 기능에 대한 자동 업데이트가 사용됩니다. 자동 업데이트를 사용하지 않으려면 클러스터 컴포넌트 업데이트: 로깅을 위한 Fluentd를 참조하십시오.
- 클러스터 내의 한 소스에서 일부 로그만 전달하고 다른 로그들은 전달하지 않도록 설정할 수 있나요?
- 예. 예를 들어, 특별히 로그가 많이 생성되는 팟(Pod)이 있는 경우에는 해당 팟(Pod)이 로그 스토리지 공간을 차지하지 않도록 하면서 다른 팟(Pod)의 로그는 전달되도록 할 수 있습니다. 특정 팟(Pod)의 로그가 전달되지 않도록 하려면 로그 필터링을 참조하십시오.
클러스터 및 앱 로그 전달
클러스터 및 앱 로깅에 대한 구성을 작성하십시오. options를 사용하면 다양한 로깅 옵션을 구분할 수 있습니다.
다음 표는 로깅을 구성할 때 이용할 수 있는 다양한 옵션과 이에 대한 설명을 보여줍니다.
| 매개변수 | 설명 |
|---|---|
<cluster_name_or_ID> |
클러스터의 이름 또는 ID입니다. |
--logsource |
로그를 전달할 소스입니다. 허용되는 값은 container, application, worker, kubernetes, ingress 및 storage입니다. 이 옵션은 구성에 적용할 로그 소스 목록을 쉼표로 구분하여 지정할 수 있도록 지원합니다. 로그 소스를 제공하지 않으면
container 및 ingress 로그 소스에 대해 로깅 구성이 작성됩니다. |
--type syslog |
값 syslog는 로그를 외부 서버로 전달합니다. |
--namespace |
선택사항: 로그를 전달할 Kubernetes 네임스페이스입니다. ibm-system 및 kube-system Kubernetes 네임스페이스의 경우 로그 전달이 지원되지 않습니다. 이 값은 container 로그 소스에 대해서만 유효합니다. 네임스페이스를 지정하지 않으면 클러스터의 모든 네임스페이스에서 이 구성을 사용합니다. |
--hostname |
로그 콜렉터 서비스의 호스트 이름 또는 IP 주소를 지정하십시오. |
--port |
수집 포트입니다. 포트를 지정하지 않으면 표준 포트 9091이(가) 사용됩니다. syslog의 경우 로그 콜렉터 서버의 포트를 지정하십시오. 포트를 지정하지 않으면 표준 포트 514이(가) 사용됩니다. |
--app-containers |
선택사항: 앱에서 로그를 전달하기 위해 앱이 포함된 컨테이너의 이름을 지정할 수 있습니다. 쉼표로 구분된 목록을 사용하여 두 개 이상의 컨테이너를 지정할 수 있습니다. 컨테이너가 지정되지 않은 경우 사용자가 제공한 경로가 포함된 모든 컨테이너에서 로그가 전달됩니다. |
--app-paths |
앱이 로그를 기록하는 컨테이너 상의 경로입니다. 소스 유형이 application인 로그를 전달하려면 경로를 제공해야 합니다. 둘 이상의 경로를 지정하려면 쉼표로 구분된 목록을 사용하십시오(예: /var/log/myApp1/*,/var/log/myApp2/*). |
--syslog-protocol |
로깅 유형이 syslog<이면 전송 계층 프로토콜입니다. udp, tls 또는 tcp 프로토콜을 사용할 수 있습니다. udp 프로토콜을 사용하여 rsyslog 서버로 전달할 때, 1KB 를 초과하는 로그 항목은 잘립니다. |
--ca-cert |
필수: 로깅 유형이 syslog이고 프로토콜이 tls인 경우, 인증 기관 인증서가 포함된 Kubernetes 시크릿 이름입니다. |
--verify-mode |
로깅 유형이 syslog이고 프로토콜이 tls인 경우, 확인 모드입니다. 지원되는 값은 verify-peer 및 기본값 verify-none입니다. |
--skip-validation |
선택사항: 조직 및 영역 이름을 지정할 때 이러한 항목의 유효성 검증을 건너뜁니다. 유효성 검증을 건너뛰면 처리 시간이 줄어들지만 올바르지 않은 로깅 구성은 로그를 올바르게 전달하지 않습니다. |
udp 또는 tcp 프로토콜을 통해 고유 서버에 로그 전달
-
편집자 또는 관리자 IBM Cloud IAM 플랫폼 액세스 역할이 있는지 확인하십시오.
-
로그 소스가 있는 클러스터의 경우 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
다음 두 가지 방법 중 하나를 사용하여
syslog프로토콜을 지원하는 서버를 설정합니다: : 자체 서버를 설정하여 관리하거나 제공자가 관리하도록 하십시오. 제공자가 사용자 대신 서버를 관리하는 경우 로깅 제공자로부터 로깅 엔드포인트를 가져오십시오.: 컨테이너에서
syslog을 실행합니다. 예를 들어, 이 배포.yaml 파일을 사용하면 클러스터 내에서 컨테이너를 실행하는 Docker 공개 이미지를 가져올 수 있습니다. 이미지는 공용 클러스터 IP 주소에 포트514를 공개하고 이 공용 클러스터 IP 주소를 사용하여 syslog 호스트를 구성합니다.syslog접두사를 제거하면 로그를 유효한 JSON 형식으로 확인할 수 있습니다. 이를 위해,rsyslog서버가 실행되는 위치의etc/rsyslog.conf파일 맨 앞에 다음 코드를 추가하십시오:$template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat -
로그 전달 구성을 작성하십시오. 매개변수에 대한 자세한 정보는 로깅 구성 옵션 테이블 이해를 참조하십시오.
ibmcloud ks logging config create --cluster CLUSTER_NAME_OR_ID --logsource LOG_SOURCE --namespace KUBERNETES_NAMESPACE --hostname LOG_SERVER_HOSTNAME_OR_IP --port LOG_SERVER_PORT --type syslog --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS --syslog-protocol PROTOCOL
tls 프로토콜을 통해 고유 서버에 로그 전달
-
다음 IBM Cloud IAM 역할을 보유하고 있는지 확인하십시오.
- 클러스터에 대한 편집자 또는 관리자 플랫폼 액세스 역할
- ** 네임스페이스에 대한 작성자 또는 **관리자
kube-system서비스 액세스 역할
-
로그 소스가 있는 클러스터의 경우 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
다음 두 가지 방법 중 하나를 사용하여
syslog프로토콜을 지원하는 서버를 설정합니다:-
자체 서버를 설정하여 관리하거나 제공자가 관리하도록 하십시오. 제공자가 사용자 대신 서버를 관리하는 경우 로깅 제공자로부터 로깅 엔드포인트를 가져오십시오.
-
컨테이너에서
syslog을 실행합니다. 예를 들어, 이 배포.yaml 파일을 사용하면 클러스터에서 컨테이너를 실행하는 Docker 공개 이미지를 가져올 수 있습니다. 이 이미지는 공용 클러스터 IP 주소에514포트를 공개하며, 이 공용 클러스터 IP 주소를 사용하여syslog호스트를 구성합니다. 사용자는 관련 인증 기관 및 서버 측 인증서를 삽입하고 서버에서syslog.conf를 사용할 수 있도록tls를 업데이트해야 합니다.
-
-
인증 기관 인증서를
ca-cert(이)라는 파일에 저장하십시오. 이름이 정확해야 합니다. -
kube-system파일에 대해ca-cert네임스페이스에서 시크릿을 작성하십시오. 로깅 구성을 생성할 때, ‘--ca-cert’ 옵션에 시크릿 이름을 사용하십시오.kubectl -n kube-system create secret generic --from-file=ca-cert -
로그 전달 구성을 작성하십시오. 매개변수에 대한 자세한 정보는 로깅 구성 옵션 테이블 이해를 참조하십시오.
ibmcloud ks logging config create --cluster <cluster name or id> --logsource <log source> --type syslog --syslog-protocol tls --hostname <ip address of syslog server> --port <port for syslog server, 514 is default> --ca-cert <secret name> --verify-mode <defaults to verify-none>
전달되는 로그 필터링
일정 기간 동안 특정 로그를 필터링하여 외부 서버에 전달할 로그를 선택할 수 있습니다. options를 사용하면 다양한 필터링 옵션을 구분할 수 있습니다.
| 매개변수 | 설명 |
|---|---|
<cluster_name_or_ID> |
필수: 해당 로그를 필터링할 클러스터의 이름 또는 ID입니다. |
<log_type> |
필터를 적용할 로그의 유형입니다. 현재는 all, container 및 host가 지원됩니다. |
<configs> |
선택사항: 로깅 구성 ID의 쉼표로 구분된 목록입니다. 제공되지 않은 경우 필터는 필터에 전달되는 모든 클러스터 로깅 구성에 적용됩니다. --show-matching-configs 옵션을 사용하여 필터와 일치하는 로그 구성을 볼 수 있습니다. |
<kubernetes_namespace> |
선택사항: 로그를 전달할 Kubernetes 네임스페이스입니다. 이 옵션은 로그 유형이 ‘ container ’인 경우에만 적용됩니다. |
<container_name> |
선택사항: 로그를 필터링할 컨테이너의 이름입니다. |
<logging_level> |
선택사항: 지정된 레벨 이하의 로그를 필터링합니다. 허용 가능한 값은 규범적 순서대로 fatal, error, warn/warning, info, debug 및 trace입니다. 예를 들어, info 레벨에서 로그를 필터링한 경우에는 debug 및 trace 또한 필터링됩니다. 참고: 이 옵션은 로그 메시지가 JSON 형식이며 ‘level’ 필드를 포함하는 경우에만 사용할 수 있습니다. 메시지를 JSON 형식으로 표시하려면 명령어 끝에 --output json 옵션을 추가하세요. |
<message> |
선택사항: 정규식으로 작성된 지정된 메시지가 포함되어 있는 로그를 필터링합니다. |
<filter_ID> |
선택사항: 로그 필터의 ID입니다. |
--show-matching-configs |
선택사항: 각 필터가 적용되는 로깅 구성을 보여줍니다. |
--all |
선택사항: 모든 로그 전달 필터를 삭제하십시오. |
-
로깅 필터를 작성하십시오.
ibmcloud ks logging filter create --cluster CLUSTER_NAME_OR_ID --type LOG_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE -
작성한 로그 필터를 보십시오.
ibmcloud ks logging filter get --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --show-matching-configs -
작성한 로그 필터를 업데이트하십시오.
ibmcloud ks logging filter update --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --type SERVER_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE -
작성한 로그 필터를 삭제하십시오.
ibmcloud ks logging filter rm --cluster CLUSTER_NAME_OR_ID --id FILTER_ID [--all]
로그 전달 확인, 업데이트 및 삭제
로그 전달 확인
구성이 다음 두 가지 방법 중 하나로 올바르게 설정되었는지 확인할 수 있습니다.
- 클러스터의 모든 로깅 구성을 나열하려면 다음을 수행하십시오.
ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID - 로그 소스의 한 가지 유형에 대한 로깅 구성을 나열하려면 다음을 실행하십시오.
ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID --logsource SOURCE
로그 전달 업데이트
이미 작성된 로깅 구성을 업데이트할 수 있습니다.
ibmcloud ks logging config update --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID --namespace NAMESPACE --type SERVER_TYPE --syslog-protocol PROTOCOL --logsource SOURCE --hostname HOSTNAME_OR_INGESTION_URL --port PORT --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS
로그 전달 삭제
클러스터에 대한 로깅 구성을 하나 또는 모두 삭제하여 로그 전달을 중지할 수 있습니다.
- 하나의 로깅 구성을 삭제하려면 다음을 수행하십시오.
ibmcloud ks logging config rm --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID - 네임스페이스의 모든 로깅 구성을 삭제하려면:
ibmcloud ks logging config rm --cluster MY_CLUSTER --namespace KUBERNETES_NAMESPACE