본문 바로가기

개발하자

실행 중인 kubernetes 포드의 로그를 표시하는 단일 명령

반응형

실행 중인 kubernetes 포드의 로그를 표시하는 단일 명령

특정 포드에서 로그 스트리밍을 계속하려면 단일 명령을 사용해야 합니다. 현재 나는 해야 한다

  • (실행 중인 모든 포드를 나열합니다.)
  • 목록에서 실행 중인 포드를 확인하고 포드 이름을 복사합니다
  • (팟에서 로그를 동시에 스트리밍)

보너스 포인트: 다음과 같은 특정 단어로 시작하는 포드를 나열합니다. 자산으로 시작하는 이름의 포드를 표시합니다




당신은 모든 결과를 얻을 수 있고 나머지 일을 할 수 있다.

[root@k8s-m1 ~]# kubectl get pods | grep httpd*-app
httpd-app-66cb7d499b-4nfl4   1/1     Running   0          6m39s
httpd-app-66cb7d499b-c2blq   1/1     Running   0          6m39s
httpd-app-66cb7d499b-dt4tr   1/1     Running   0          6m39s



당신은 그것을 얻기 위해 몇 가지 bash 트릭을 사용할 수 있다:

예:

kube-system 네임스페이스에서 이름 패턴으로 시작하는 포드의 로그를 가져옵니다.

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep core)

또는 단순:

kubectl logs --namespace=kube-system $(kubectl get pods -o=name --all-namespaces | grep core)

그러나 프로덕션에서는 fluentbit를 사용하여 로그를 ELK로 스트리밍한 다음 키바나 UI의 필터를 사용하여 각 포드/배포/이름 공간 등에 대한 로그를 가져와야 합니다.

https://github.com/fluent/fluent-bit-kubernetes-logging




마침내 해결책을 알아낼 수 있었다. 이것은 다소 까다로울 것이지만, 나는 기본적으로 깃발이 있는 이름을 사용하고 얻을 것이다. 나의 마지막 명령은 다음과 같다

kubectl logs -f $(kubectl get pods --field-selector=status.phase=Running -o=name | awk '/asset/ {print $1;exit}')

링크:




를 사용하여 이 작업을 수행할 수 있습니다. 다음을 사용할 수 있습니다:

kubectl logs -n <namespace> $(kubectl get pod -n <namespace> |  awk '/<pattern>/{print $1}') -f

여기서 필드에 regex를 지정할 수 있습니다. 는 일치하는 개체의 첫 번째 열만 인쇄합니다. 우리의 경우, 그것은 포드 이름이다.

예:

kubectl logs -n kube-system $(kubectl get pod -n kube-system |  awk '/kube-proxy*/{print $1}') -f



"실행 중인 쿠버네티스 포드의 로그를 표시하는 단일 명령"을 위해 한 라이너 아래로 실행하면 됩니다

kubectl get pods -n default|grep Running|awk '{print $1}'|while read pods;do echo "Pod name is $pods" ;kubectl logs $pods;echo;done

반응형