Docker 컨테이너 내의 모든 하위 프로세스에 대한 모든 쓰기 호출(stdout/stderr에 대한)을 추적하는 방법은 무엇입니까?

Docker 컨테이너 내의 모든 하위 프로세스에 대한 모든 쓰기 호출(stdout/stderr에 대한)을 추적하는 방법은 무엇입니까?

나는 다음 명령을 실행하고 있습니다 :

strace -f -e trace=desc ./my-program

(그래서 내가 -f매개변수를 실행하고 있다는 것을 알 수 있습니다)

write이를 통해 상위 프로세스의 stdout/stderr 명령을 볼 수 있습니다 .

[pid    10] 07:36:46.668931 write(2, "..\n"..., 454 <unfinished ...>

<stdout of ..>

<stdout other output - but I don't see the write commands - so probably from a child process>

[pid    10] 07:36:46.669684 write(2, "My final output\n", 24 <unfinished ...>

<stdout of My final output>

내가 보고 싶은 것은 다른 쓰기 명령입니다.

이는 도커 컨테이너에서 실행되며 다음과 같이 실행됩니다.

docker run --privileged=true my-label/my-container

내 질문은 다음과 같습니다Docker 컨테이너 내의 모든 하위 프로세스에 대한 모든 쓰기 호출(stdout/stderr에 대한)을 추적하는 방법은 무엇입니까?

편집: 이 애플리케이션을 시작하고 중지하는 데 약 2초가 소요됩니다. strace적용주기를 따를 수 있습니다. 그러나 서버 프로세스처럼 작동할 것으로 예상하는 도구는 작동하지 않습니다. (어쩌면 sysdig이를 위해 사용될 수도 있지만 아직 이 모델의 예를 본 적이 없습니다.)

답변1

문자열 출력이 잘리는 것으로 나타났습니다 strace. 처음 n(10?) 문자열 문자 이상을 원한다고 명시적으로 알려야 합니다. 당신은 이런 일을 하곤 해요 -s 800.

strace -s 800 -ff  ./myprogram

명시적 요청을 write사용하여 모든 명령을 얻을 수도 있습니다 .strace-e write

strace -s 800 -ff -e write  ./myprogram

관련 정보