簡體   English   中英

將日志從 kubernetes 轉發到 splunk

[英]Forwarding logs from kubernetes to splunk

我對 Kubernetes 還很陌生,沒有實際操作經驗。

我的團隊面臨有關推送的日志格式的問題

應用程序正在以這種格式將日志推送到標准輸出

{"logname" : "app-log", "level" : "INFO"}

Splunk 最終得到這個格式(使用了 splunkforwarder)

{
  "log" : "{\"logname\": \"app-log\", \"level\": \"INFO \"}",
  "stream" : "stdout",
  "time" : "2018-06-01T23:33:26.556356926Z" 
 }

這種格式使 Splunk 中的事情更難基於屬性進行查詢。

Kubernetes是否有任何選項可以從應用程序轉發raw logs而不是分組到另一個 json 中?

我在 Splunk 中遇到過這篇文章,但配置是在 Splunk 端完成的

請讓我知道我們是否可以從Kubernetes方面選擇從應用程序發送原始日志

Kubernetes 架構提供了三種收集日志的方式:

1. 使用在每個節點上運行的節點級日志代理。

您可以通過在每個節點上包含一個節點級別的日志代理來實現集群級別的日志記錄。 日志代理是一種專用工具,用於公開日志或將日志推送到后端。 通常,日志代理是一個容器,它可以訪問包含來自該節點上所有應用程序容器的日志文件的目錄。

日志格式取決於 Docker 設置。 您需要在每個節點上的/etc/docker/daemon.json設置log-driver參數。

例如,

{
  "log-driver": "syslog"
}

或者

{
  "log-driver": "json-file"
}
  • none - 沒有可用於容器的日志,並且 docker 日志不返回任何輸出。
  • json-file - 日志格式為 JSON。 Docker 的默認日志驅動程序。
  • syslog - 將日志消息寫入 syslog 工具。

有關更多選項,請查看鏈接

2. 包含一個專用的 sidecar 容器,用於登錄應用程序 pod。

您可以通過以下方式之一使用邊車容器:

  • Sidecar 容器將應用程序日志流式傳輸到它自己的標准輸出。
  • Sidecar 容器運行一個日志代理,它被配置為從應用程序容器中獲取日志。

通過讓您的 sidecar 容器流式傳輸到它們自己的 stdout 和 stderr 流,您可以利用已經在每個節點上運行的 kubelet 和日志代理。 Sidecar 容器從文件、套接字或日志中讀取日志。 每個單獨的 sidecar 容器將日志打印到自己的 stdout 或 stderr 流。

3. 將日志從應用程序內直接推送到后端。

您可以通過直接從每個應用程序公開或推送日志來實現集群級別的日志記錄。

更多信息可以查看Kubernetes 官方文檔

本周我們遇到了同樣的問題。

  1. 使用 splunk 轉發器 DaemonSet

  2. 在 splunk 上安裝https://splunkbase.splunk.com/app/3743/這個插件將解決您的問題。

只想用我們嘗試過的解決方案更新,這對我們的日志結構有效

SEDCMD-1_unjsonify = s/{"log":"(?:\\u[0-9]+)?(.*?)\\n","stream.*/\1/g
SEDCMD-2_unescapequotes = s/\\"/"/g
BREAK_ONLY_BEFORE={"logname":

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM