실행 kubectl logs
하면 Kubernetes 컨테이너 하나의 stderr / stdout이 표시됩니다.
가급적 특정 복제 컨트롤러에 의해 생성 된 포드 집합의 집계 된 stderr / stdout을 얻으려면 어떻게해야합니까?
답변
레이블을 사용할 수 있습니다.
kubectl logs -l app=elasticsearch
답변
kubetail
이것을 가능하게 하는 작은 bash 스크립트를 만들었습니다 . 예를 들어 “app1″이라는 포드의 모든 로그를 테일링하려면 다음을 수행 할 수 있습니다.
kubetail app1
여기 에서 스크립트를 찾을 수 있습니다 .
답변
Adrian Ng가 제안한대로 레이블을 사용하여 여러 컨테이너에서 로그를 가져올 수 있습니다.
kubectl logs --selector app=yourappname
컨테이너가 여러 개인 포드가있는 경우 위 명령이 실패하고 컨테이너 이름을 지정해야합니다.
kubectl logs --selector app=yourappname --container yourcontainername
참고 : 사용할 수있는 레이블을 확인하려면 다음 명령을 사용하여 모두 나열합니다.
kubectl get pod <one of your pods> -o template --template='{{.metadata.labels}}'
… 출력은 다음과 같이 보일 것입니다.
map [app : yourappname controller-revision-hash : 598302898 pod-template-generation : 1]
일부 라벨은 다른 포드에서 공유 할 수 없습니다. “앱”을 선택하는 것이 가장 쉬운 것 같습니다.
답변
추가 -f
하면 이전 답변을 바탕으로 로그를 추적 할 수 있습니다.
kubectl logs -f deployment/app
답변
이전에 제공된 솔루션은 최적이 아닙니다. kubernetes 팀 자체는 얼마 전에 stern이라는 솔루션을 제공했습니다.
stern app1
또한 정규식과 일치하며 기본적으로 tail 및 -f (follow)를 수행합니다. 좋은 이점은 로그를 생성 한 포드도 표시된다는 것입니다.
app1-12381266dad-3233c foobar log
app1-99348234asd-959cc foobar log2
Linux 용 go-binary를 가져 오거나 OSX 용 brew를 통해 설치합니다.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
답변
이 간단한 스크립트를 사용하여 배포 포드에서 로그를 가져옵니다.
#!/usr/bin/env bash
DEPLOYMENT=$1
for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do
echo ---------------------------
echo $p
echo ---------------------------
kubectl logs $p
done
사용법 : log_deployment.sh “deployment-name”.
그러면 스크립트는 해당 “배포 이름”으로 시작하는 모든 포드의 로그를 표시합니다.
답변
한 가지 옵션은 https://kubernetes.io/docs/user-guide/logging/elasticsearch/에 설명 된대로 Fluentd / ElasticSearch를 통해 클러스터 로깅을 설정하는 것 입니다. 로그가 ES에 있으면 Kibana에서 필터를 적용하여 특정 컨테이너의 로그를 쉽게 볼 수 있습니다.