
Portanto, podemos executar um contêiner docker como um daemon:
docker run -d --name foo foo
e depois leia os logs:
docker logs -f foo
mas estou me perguntando como escrever apenas em stdout/stderr, para poder enviar os logs para splunk ou cloudwatch etc.
(
docker run --name foo foo &| capture_logs
) & disown
qual é a maneira oficial de fazer isso?
Responder1
Você pode usar opções de registro como @Michael apontou e conforme descrito a seguirdocumentos
De modo geral, existem pelo menos duas maneiras de fazer isso, que serão discutidas brevemente a seguir.
- Usando
splunk
o driver conforme mostrado emaqui.
Comece criando um token coletor de eventos conforme descrito nodocumentos. O token será usado na configuração do driver splunk.
exemplo do docker cli
docker run -d \
--log-driver=splunk \
--log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
--log-opt splunk-url=https://splunkhost:8088 \
--log-opt tag=foo-logs \
--name foo foo
exemplo docker-compose
version: '3.7'
services:
foo_app:
...
logging:
driver: splunk
options:
tag: foo-logs
splunk-token: 176FCEBF-4CF5-4EDF-91BC-703796522D20
splunk-url: https://splunkhost:8088
...
- Usando
syslog
o driver conforme mostrado emaqui.
exemplo do docker cli:
docker run \
-–log-driver syslog –-log-opt tag=foo-logs \
--name foo foo
exemplo docker-compose:
version: '3.7'
services:
foo_app:
...
logging:
driver: syslog
options:
tag: foo-logs
...
Isso enviará todos os logs do contêiner para o syslog local, você pode retirá-los de lá e encaminhá-los para a porta udp externa, onde o splunk está pronto para receber seus logs.
Então, digamos que o servidor Splunk receberá os logs na porta, 514
então você precisa adicionar isso à rsyslogd
configuração e reiniciar o serviço rsyslogd
# /etc/rsyslog.d/20-splunk.conf
:syslogtag, contains, "foo-logs" @splunk_url:514;RSYSLOG_SyslogProtocol23Format
Alternativamente, se você pretende torná-lo global para todos os contêineres, você pode configurar o log através do /etc/docker/daemon.json
próprio arquivo como abaixo (e não se esqueça de reiniciar o serviço docker):
No caso desyslog
{
"log-driver": "syslog"
}
No caso desplunk
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "176FCEBF-4CF5-4EDF-91BC-703796522D20",
"splunk-url": "https://splunkhost:8088",
...
}
}
Confira a lista dedriver de registro compatível