Außerdem fand ich es nützlich, einige Begriffe hervorzuheben, nach denen ich in den Protokollen suche. Besonders bei produktiven Installationen, bei denen viel Protokollausgabe generiert wird. In meinem Fall möchte ich COUNT(*)
Aussagen hervorheben . Aber mit einem einfachen grep kann ich nicht die gesamte SQL-Anweisung sehen, da es sich um eine mehrzeilige Anweisung handelt. Dies ist mit -E
switch und etwas Regex möglich :
Zum Beispiel Schnipsel folgende für alle Fragen suchen , die enthalten COUNT(*)
sowie count(*)
:
docker logs <containerName> -f | grep --line-buffered -i -E --color "select count\(\*\)|$"
Einige Erklärungen:
docker logs -f
sagen Docker zu f ollow die Protokolle, so auch die Filter applys neue Einträge wie beim Betrachten sie mittail -f
- greps
--line-buffered
schalten spült die Ausgabe auf jeder Zeile, die in Echtzeit erforderlich ist , wenn grep docker logs -f
verwendet wird
-E
eine ist e Xtended RegexMuster, benötigt unser Muster anzuwenden , die uns auch die nicht passenden Ergebnisse erlauben Rückkehr
--color
hebt die übereinstimmenden Teile hervor (scheint das Standardverhalten auf meinem Ubuntu 16.04 LTS zu sein, aber möglicherweise nicht auf anderen Distributionen, daher habe ich es aus Sicherheitsgründen hier aufgenommen)
*
entkam seine abzuschalten spezielle glob Funktionalität , wo (
und )
maskiert ihre regex zu vermeiden , als Gruppe bedeutet, die durch aktiviert -E
Schalter
Wenn sich der Container bei stderr anmeldet, können Sie sie weiterleiten, wie Edoardo bereits für einen einfachen grep geschrieben hat :
docker logs <containerName> -f 2>&1 | grep --line-buffered -i -E --color "select count\(\*\)|$"
Der -f
Schalter kann weggelassen werden, wenn kein Live-Grep gewünscht wird. In beiden Fällen wird das gesamte Protokoll mit einem hervorgehobenen Suchbegriff wie folgt angezeigt: