Graylog Extended Format 日誌驅動程式

gelf 日誌驅動程式是一種方便的格式,許多工具都支援它,例如 GraylogLogstashFluentd。許多工具都使用這種格式。

在 GELF 中,每個日誌訊息都是一個包含以下欄位的字典

  • 版本
  • 主機(最初發送訊息的實體)
  • 時間戳
  • 訊息的短版本和長版本
  • 您自己配置的任何自定義欄位

用法

要將 gelf 驅動程式用作預設日誌驅動程式,請在 daemon.json 檔案中將 log-driverlog-opt 鍵設定為相應的值。此檔案位於 Linux 主機上的 /etc/docker/ 或 Windows Server 上的 C:\ProgramData\docker\config\daemon.json 中。有關使用 daemon.json 配置 Docker 的更多資訊,請參閱 daemon.json

以下示例將日誌驅動程式設定為 gelf 並設定 gelf-address 選項。

{
  "log-driver": "gelf",
  "log-opts": {
    "gelf-address": "udp://1.2.3.4:12201"
  }
}

重新啟動 Docker 以使更改生效。

注意

daemon.json 配置檔案中的 log-opts 配置選項必須以字串形式提供。因此,布林值和數字值(例如 gelf-tcp-max-reconnect 的值)必須用引號 (") 括起來。

您可以透過使用 docker container createdocker run 時設定 --log-driver 標誌來為特定容器設定日誌驅動程式

$ docker run \
      --log-driver gelf --log-opt gelf-address=udp://1.2.3.4:12201 \
      alpine echo hello world

GELF 選項

gelf 日誌驅動程式支援以下選項

選項必需描述示例值
gelf-address必需GELF 伺服器的地址。tcpudp 是唯一支援的 URI 指定符,您必須指定埠。--log-opt gelf-address=udp://192.168.0.42:12201
gelf-compression-type可選UDP 僅限 GELF 驅動程式用於壓縮每個日誌訊息的壓縮型別。允許的值為 gzipzlibnone。預設值為 gzip。請注意,啟用壓縮會導致 CPU 使用率過高,因此強烈建議將其設定為 none--log-opt gelf-compression-type=gzip
gelf-compression-level可選UDP 僅限gelf-compression-typegzipzlib 時,壓縮級別。介於 -19 (BestCompression) 之間的整數。預設值為 1 (BestSpeed)。級別越高,壓縮率越高,但速度越慢。-10 將停用壓縮。--log-opt gelf-compression-level=2
gelf-tcp-max-reconnect可選TCP 僅限 連線斷開時的最大重新連線嘗試次數。正整數。預設值為 3。--log-opt gelf-tcp-max-reconnect=3
gelf-tcp-reconnect-delay可選TCP 僅限 重新連線嘗試之間等待的秒數。正整數。預設值為 1。--log-opt gelf-tcp-reconnect-delay=1
tag可選附加到 gelf 訊息中的 APP-NAME 的字串。預設情況下,Docker 使用容器 ID 的前 12 個字元來標記日誌訊息。有關自定義日誌標籤格式的資訊,請參閱 日誌標籤選項文件--log-opt tag=mailer
labels可選在啟動 Docker 守護程式時應用。此守護程式接受的與日誌相關的標籤的逗號分隔列表。在 extra 欄位中新增一個額外的鍵,並在其前面加上下劃線 (_)。用於高階 日誌標籤選項--log-opt labels=production_status,geo
labels-regex可選類似於 labels 且與之相容。用於匹配與日誌相關的標籤的正則表示式。用於高階 日誌標籤選項--log-opt labels-regex=^(production_status|geo)
env可選在啟動 Docker 守護程式時應用。此守護程式接受的與日誌相關的環境變數的逗號分隔列表。在 extra 欄位中新增一個額外的鍵,並在其前面加上下劃線 (_)。用於高階 日誌標籤選項--log-opt env=os,customer
env-regex可選類似於 env 且與之相容。用於匹配與日誌相關的環境變數的正則表示式。用於高階 日誌標籤選項--log-opt env-regex=^(os|customer)

注意

gelf 驅動程式不支援 TCP 連線的 TLS。傳送到 TLS 保護的輸入的訊息可能會靜默失敗。

示例

此示例配置容器以使用在 192.168.0.42 上埠 12201 執行的 GELF 伺服器。

$ docker run -dit \
    --log-driver=gelf \
    --log-opt gelf-address=udp://192.168.0.42:12201 \
    alpine sh