
Итак, мы можем запустить Docker-контейнер как демон:
docker run -d --name foo foo
а затем прочитайте логи:
docker logs -f foo
но мне интересно, как писать только в stdout/stderr, чтобы можно было отправлять логи в splunk или cloudwatch и т. д. Что-то вроде:
(
docker run --name foo foo &| capture_logs
) & disown
как официально это сделать?
решение1
Вы можете использовать параметры ведения журнала, как указал @Michael и как описано ниже.документы
Вообще говоря, есть как минимум два способа сделать это, которые будут кратко рассмотрены ниже.
- Используя
splunk
драйвер, как показано на рисункездесь.
Начните с создания токена сборщика событий, как описано вдокументы. Токен будет использоваться в конфигурации драйвера splunk.
пример 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
пример 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
...
- Используя
syslog
драйвер, как показано на рисункездесь.
Пример docker cli:
docker run \
-–log-driver syslog –-log-opt tag=foo-logs \
--name foo foo
Пример docker-compose:
version: '3.7'
services:
foo_app:
...
logging:
driver: syslog
options:
tag: foo-logs
...
Это отправит все журналы контейнера в локальный системный журнал, оттуда вы можете переслать их на внешний UDP-порт, где Splunk будет готов принять ваши журналы.
Допустим, сервер Splunk будет получать журналы на порту, 514
тогда вам нужно добавить это в rsyslogd
конфигурацию, а затем перезапустить службу rsyslogd.
# /etc/rsyslog.d/20-splunk.conf
:syslogtag, contains, "foo-logs" @splunk_url:514;RSYSLOG_SyslogProtocol23Format
В качестве альтернативы, если вы собираетесь сделать его глобальным для всех контейнеров, то вы можете настроить ведение журнала через /etc/docker/daemon.json
сам файл, как показано ниже (и не забудьте перезапустить службу Docker):
В случаеsyslog
{
"log-driver": "syslog"
}
В случаеsplunk
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "176FCEBF-4CF5-4EDF-91BC-703796522D20",
"splunk-url": "https://splunkhost:8088",
...
}
}
Проверьте списокподдерживаемый драйвер регистрации