ログ

ソースコード

log は、標準出力へのクエリログを有効にします。

説明

log を使用するだけで、すべてのクエリ(および応答の一部)が標準出力にダンプされます。出力を少し調整するためのオプションがあります。多忙なサーバーでは、ログ記録によってパフォーマンスが低下することに注意してください。

log プラグインの有効化または無効化は、クエリログのみに影響し、CoreDNSからのその他のログは関係なく表示されます。

構文

log

引数なしの場合、すべての要求に対して共通ログ形式でクエリログエントリがstdoutに書き込まれます。または、もう少し制御が必要な場合

log [NAMES...] [FORMAT]
  • NAMES は、ログに記録するために一致させる必要がある名前のリストです。
  • FORMAT は使用するログ形式です(デフォルトは共通ログ形式)。{common}は共通ログ形式のショートカットとして使用されます。{combined}を使用して、クエリopcode {>opcode}を共通ログ形式に追加する形式を使用することもできます。

ログに記録される応答のクラスをさらに指定できます。

log [NAMES...] [FORMAT] {
    class CLASSES...
}
  • CLASSES は、ログに記録する必要がある応答クラスのスペース区切りのリストです。

応答のクラスには、次の意味があります。

  • success:正常な応答
  • denial:NXDOMAINまたはnodata応答のいずれか(名前が存在し、型が存在しない)。nodata応答は、戻りコードをNOERRORに設定します。
  • error:SERVFAIL、NOTIMP、REFUSEDなど。リモートサーバーが要求を解決できないことを示すもの。
  • all:デフォルト - 何も指定されていません。「all」と組み合わせて使用​​した場合、すべてのメッセージがログに記録されます。

クラスが指定されていない場合、デフォルトはallになります。

ログ形式

任意のプレースホルダー値を使用して、カスタムログ形式を指定できます。ログは、要求と応答の両方のプレースホルダーをサポートしています。

次のプレースホルダーがサポートされています。

  • {type}:要求のqtype
  • {name}:要求のqname
  • {class}:要求のqclass
  • {proto}:使用されるプロトコル(tcpまたはudp)
  • {remote}:クライアントのIPアドレス。IPv6アドレスの場合、角かっこで囲まれます:[::1]
  • {local}:サーバーのIPアドレス。IPv6アドレスの場合、角かっこで囲まれます:[::1]
  • {size}:バイト単位の要求サイズ
  • {port}:クライアントのポート
  • {duration}:応答時間
  • {rcode}:応答RCODE
  • {rsize}:raw(非圧縮)、応答サイズ(クライアントは、より小さい応答を受信する場合があります)
  • {>rflags}:応答フラグ。設定されているフラグはそれぞれ表示されます(例:「aa、tc」)。qrビットも含まれます。
  • {>bufsize}:クエリでアドバタイズされたEDNS0バッファサイズ
  • {>do}:クエリにEDNS0 DO(DNSSEC OK)ビットが設定されているか
  • {>id}:クエリID
  • {>opcode}:クエリOPCODE
  • {common}:デフォルトの共通ログ形式。
  • {combined}:クエリopcodeを含む共通ログ形式。
  • {/LABEL}:任意のメタデータラベルは、{/}で囲まれたプレースホルダーとして受け入れられます。プレースホルダーは、対応するメタデータ値、またはラベルが定義されていない場合はデフォルト値-に置き換えられます。詳細については、metadataプラグインを参照してください。

デフォルトの共通ログ形式は次のとおりです。

`{remote}:{port} - {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`

これらのログのそれぞれはlog.Infofで出力されるため、典型的な例は次のようになります。

[INFO] [::1]:50759 - 29008 "A IN example.org. udp 41 false 4096" NOERROR qr,rd,ra,ad 68 0.037990251s

すべての要求をstdoutにログ記録する

. {
    log
    whoami
}

カスタムログ形式(すべてのゾーン(.))

. {
    log . "{proto} Request: {name} {type} {>id}"
}

たとえば、example.org(およびそれ以下)の拒否(NXDOMAINおよびnodata)のみをログに記録する

. {
    log example.org {
        class denial
    }
}

正常に解決されなかったすべてのクエリを結合ログ形式でログに記録する。

. {
    log . {combined} {
        class denial error
    }
}

エラーが発生しなかったすべてのクエリをログに記録する

. {
    log . {
        class denial success
    }
}

複数のステートメントをORで組み合わせることもできます。たとえば、上記のケースは次のように書き換えることができます。

. {
    log . {
        class denial
        class success
    }
}