Como rastrear todas as chamadas de gravação (para stdout / stderr) de todos os processos filhos dentro de um contêiner docker?

1

Estou executando este comando:

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

(Então você vê que estou executando o parâmetro -f )

O que me permite ver os comandos stdout / stderr write do processo pai:

[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>

O que eu quero ver são os outros comandos de gravação.

Isso está sendo executado em um contêiner do Docker sendo executado com:

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

Minha pergunta é: Como rastrear todas as chamadas de gravação (para stdout / stderr) de todos os processos filhos dentro de um contêiner docker?

EDITAR: Note que este aplicativo inicia e pára em aproximadamente 2 segundos. strace pode seguir seu ciclo de aplicação. Mas as ferramentas que esperam que ele funcione como um processo de servidor não funcionarão. (Talvez sysdig possa ser usado para isso - mas ainda não vi um exemplo desse modelo).

    
por hawkeye 27.01.2018 / 08:56

1 resposta

0

Acontece que strace trunca a saída da string - você tem que explicitamente dizer que você quer mais do que os primeiros caracteres da string n (10?). Você faz isso com -s 800 .

strace -s 800 -ff  ./myprogram

Você também pode obter todos os comandos write solicitando strace explicitamente com -e write .

strace -s 800 -ff -e write  ./myprogram
    
por 03.02.2018 / 04:08

Tags