Como adicionar um prefixo / rótulo para serviços à saída do stdout do supervisor

6

Estou usando o supervisor em imagens do docker quando preciso executar vários serviços em uma imagem, por exemplo, postfix e outros serviços de correio. Quando eu redirecionar o stdout / stderr de todos os serviços para o supervisor e o supervisor também registra para stdout / stderr eu preferiria ter um prefixo / rótulo na frente da saída do log real no console para saber qual log está vindo de qual serviço. Não consigo encontrar nenhuma configuração para isso, mas talvez você conheça um jeito.

Aqui está um exemplo de como parece com o Foreman:

    
por Konstantin 09.02.2016 / 13:31

1 resposta

0

Eu estava tendo o mesmo problema recentemente e não consegui descobrir supervisor-stdout . Aqui está o que eu fiz:

No bash, você pode usar o redirecionamento de E / S e Process Substitution para encaminhar stdout , stderr através de outro processo.

    #!/usr/bin/env bash
    # setup fd-3 to point to the original stdout
    exec 3>&1
    # setup fd-4 to point to the original stderr
    exec 4>&2

    # get the prefix from SUPERVISOR_PROCESS_NAME environement variable
    printf -v PREFIX "%-10.10s" ${SUPERVISOR_PROCESS_NAME}

    # reassign stdout and stderr to a preprocessed and redirected to the original stdout/stderr (3 and 4) we have create eralier
    exec 1> >( perl -ne '$| = 1; print "'"${PREFIX}"' | $_"' >&3)
    exec 2> >( perl -ne '$| = 1; print "'"${PREFIX}"' | $_"' >&4)
    # from here on everthing that outputs to stdout/stderr will be go through the perl script
    echo "I will be prefixed"
    # don't forget to use exec 

Agora você pode configurar o supervisor para usar stdout e stderr para registro:

    stdout_logfile=/dev/stdout
    stdout_logfile_maxbytes=0
    stderr_logfile=/dev/stderr
    stderr_logfile_maxbytes=0

e como comando, use um script bash que configure o redirecionamento de E / S.

    
por 22.02.2018 / 10:47