본문 바로가기

개발하자

루프에서 Kubernetes 포드 로그 가져오기

반응형

루프에서 Kubernetes 포드 로그 가져오기

나는 이름에 "test"가 포함된 여러 포드의 로그를 수집하는 데 관심이 있지만 json과 jq를 사용한다. 첫 번째 단계는 특정 문자열을 포함하는 이름을 찾는 것이었습니다. 제 경우 "test":

kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'

Stack overflow에 대한 누군가의 도움으로 이 답을 얻었습니다.

이제 "test" 이름이 포함된 각 포드의 로그를 가져오는 명령을 알아보려고 합니다. 다음과 같은 명령어를 사용하고 싶지만, 불행히도 첫 번째 명령어가 모든 포드를 한 번에 여러 줄로 반환하기 때문에 이 방법이 작동하지 않습니다:

kubectl logs ``kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'`` -n test

이런 식으로 로그를 가져오려면 몇 가지 추가 인수를 사용하는 방법이 있습니까?

감사해요.




모든 포드 로그를 찾을 에 포함한 경우 앱 이름별로 로그를 가져올 수도 있습니다.

kubectl logs -l app=test -n test

enter image description here




루프를 사용하여 모든 포드의 로그를 가져오고 다음을 시도하십시오:

for pod in `kubectl get po -o json |  jq '.items[] | select(.metadata.name|contains("test"))| .metadata.name' | sed 's/"//g'` ; do
  echo $pod
  kubectl logs $pod 
done



모든 옵션을 요약합니다

@Kun answer는 출력할 로그를 모두 제공하는 작업 솔루션입니다. +1. 그의 솔루션을 사용하면 원하는 것을 달성할 수 있지만, 개인적으로는 편리함을 위해 로그를 파일로 리디렉션하는 것을 고려할 것입니다. 로그는 크기가 클 수 있으며 대부분 그럴 수 있습니다. 로그를 별도로 볼 수 있는 옵션이 옵션이 있어야 합니다.

이를 위해 @Eduardo 팁을 사용하여 설치할 수 있습니다

현재 kubectl 컨텍스트를 사용하여 대화식으로 네임스페이스와 로그를 다운로드할 여러 포드를 선택하는 bash 스크립트입니다. 기본적으로 모든 컨테이너에 대해 루프에서 큐벡틀 로그를 실행하여 로그를 로컬 파일로 리디렉션합니다.

때로는 로그를 라이브로 시청하는 것이 좋을 수도 있습니다

여러 포드의 로그를 하나의 스트림으로 집계(테일링/팔로우)할 수 있는 Bash 스크립트입니다. 이것은 여러 포드에 대해 "kubectl logs -f"를 실행하는 것과 같다.

또한 고급 요구사항을 위한 유료 솔루션도 있습니다(어떤 이유로 ELK를 사용하지 않는 경우):

SolarWinds® Papertrail™은 중앙 위치에서 로그를 실시간으로 추적할 수 있는 클라우드 호스팅 로그 관리 솔루션입니다. Papertrail을 사용하면 단일 브라우저 창에서 전체 Kubernetes 클러스터의 실시간 로그 이벤트를 볼 수 있습니다.

로그 이벤트가 Kubernetes에서 Papertrail로 전송되면 Papertrail은 로그의 내용을 타임스탬프 및 오리진 포드와 함께 기록합니다. Papertrail 이벤트 뷰어와 Papertrail CLI 클라이언트 또는 Papertrail HTTP API를 사용하여 브라우저의 연속 스트림에서 이러한 로그를 볼 수 있습니다. Papertrail은 기본적으로 모든 로그를 표시하지만 유연한 검색 구문을 사용하여 특정 포드, 노드 또는 배포로 제한할 수 있습니다.

다음은 사용 방법에 대한 훌륭한 기사입니다. 사용해보고 싶은 이유가 있습니다:




당신은 또한 다음과 같은 것을 할 수 있다

for i in $(kubectl get pod --no-headers |awk '{print $1}'); do kubectl logs $i; done

jq보다 쉬울지도 몰라.


반응형