
So können wir einen Docker-Container als Daemon ausführen:
docker run -d --name foo foo
und lesen Sie dann die Protokolle:
docker logs -f foo
aber ich frage mich, wie ich nur in stdout/stderr schreiben kann, damit ich die Protokolle an Splunk oder Cloudwatch usw. senden kann. So etwas wie:
(
docker run --name foo foo &| capture_logs
) & disown
wie geht das offiziell?
Antwort1
Sie können Protokollierungsoptionen verwenden, wie von @Michael hervorgehoben und im Folgenden beschrieben.Dokumente
Grundsätzlich gibt es hierfür mindestens zwei Möglichkeiten, die im Folgenden kurz erläutert werden.
- Verwenden Sie
splunk
den Treiber wie in gezeigtHier.
Beginnen Sie mit der Erstellung eines Ereignissammler-Tokens, wie imDokumente. Das Token wird innerhalb der Splunk-Treiberkonfiguration verwendet.
Docker-CLI-Beispiel
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-Beispiel
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
...
- Verwenden Sie
syslog
den Treiber wie in gezeigtHier.
Docker-CLI-Beispiel:
docker run \
-–log-driver syslog –-log-opt tag=foo-logs \
--name foo foo
Docker-Compose-Beispiel:
version: '3.7'
services:
foo_app:
...
logging:
driver: syslog
options:
tag: foo-logs
...
Dadurch werden alle Containerprotokolle an das lokale Syslog gesendet. Von dort können Sie sie an den externen UDP-Port weiterleiten, wo Splunk bereit ist, Ihre Protokolle zu empfangen.
Nehmen wir also an, dass der Splunk-Server die Protokolle auf Port empfängt. 514
Dann müssen Sie dies zur rsyslogd
Konfiguration hinzufügen und dann den rsyslogd-Dienst neu starten.
# /etc/rsyslog.d/20-splunk.conf
:syslogtag, contains, "foo-logs" @splunk_url:514;RSYSLOG_SyslogProtocol23Format
Wenn Sie es alternativ global für alle Container festlegen möchten, können Sie die Protokollierung /etc/docker/daemon.json
wie unten beschrieben über die Datei selbst konfigurieren (und vergessen Sie nicht, den Docker-Dienst neu zu starten):
Im Falle vonsyslog
{
"log-driver": "syslog"
}
Im Falle vonsplunk
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "176FCEBF-4CF5-4EDF-91BC-703796522D20",
"splunk-url": "https://splunkhost:8088",
...
}
}
Schauen Sie sich die Liste derunterstützter Protokollierungstreiber