[英]Forwarding logs from kubernetes to splunk
我對 Kubernetes 還很陌生,沒有實際操作經驗。
我的團隊面臨有關推送的日志格式的問題 kubernetes到splunk 。
{"logname" : "app-log", "level" : "INFO"}
{
"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"
}
有關更多選項,請查看鏈接
2. 包含一個專用的 sidecar 容器,用於登錄應用程序 pod。
您可以通過以下方式之一使用邊車容器:
通過讓您的 sidecar 容器流式傳輸到它們自己的 stdout 和 stderr 流,您可以利用已經在每個節點上運行的 kubelet 和日志代理。 Sidecar 容器從文件、套接字或日志中讀取日志。 每個單獨的 sidecar 容器將日志打印到自己的 stdout 或 stderr 流。
3. 將日志從應用程序內直接推送到后端。
您可以通過直接從每個應用程序公開或推送日志來實現集群級別的日志記錄。
更多信息可以查看Kubernetes 官方文檔
本周我們遇到了同樣的問題。
使用 splunk 轉發器 DaemonSet
在 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.