绊脚石乃是进身之阶。

logstash json filter 偶發性的發生jsonparsefailure

Logstash | 作者 KenOrz | 发布于2020年05月09日 | 阅读数:3567

請教大家有人發生過logstash json filter 偶發性的發生jsonparsefailure 看_source json資料被截斷了

系統架構是k8s 掛filebeat -> redis -> logstash -> elasticsearch

有確認過k8s裡面的/var/log/containers裡面的log是沒有被截斷的,單獨放入logstash也都可以正常parse

log大小大約700k

k8s裡的filebeat是照官方給的這份下去修改
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: kube-system
labels:
k8s-app: filebeat
data:
filebeat.yml: |-
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_kubernetes_metadata:
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: "/var/log/containers/"

processors:
- add_cloud_metadata:
- add_host_metadata:
output.redis:
hosts: ["redis:6379"]
key: "key"
db: 0
timeout: 5

 
軟件版本: 7.6.2
已邀请:

medcl - 今晚打老虎。

赞同来自:

有可能是截断,也有可能是里面包含了特殊字符,如果可以复现的话,在 Logstash 里面的终端输出调试一下,看看document长什么样?

KenOrz

赞同来自:

再進去追k8s的log發現會有截斷
k8s stdout log好像會把過長的log分段輸出
end:之後就中斷了
...\\\"end\\\":","stream":"stdout","time":"2020-05-15T08:14:19.184223981Z"}
但是時候時壞不知道為什麼!
 
 

KenOrz

赞同来自:

後來發現是因為k8s的log stdout過長會分段輸出,又剛好碰到log rotation 好像會漏掉其中一部分目前還不知道怎麼在filebeat設定解決這個問題

KenOrz

赞同来自:

測試一個超過16k的log

只有發生在日誌超過10M log rotation

截圖_2020-05-22_上午11.38_.19_.png
4b3038ce270f799222edbca70efbd85b8d36752e42058fd9e45af920963a9701-json.log.1 content
{"log":"testtest...tes","stream":"stderr","time":"2020-05-22T03:35:35.632371865Z"}


4b3038ce270f799222edbca70efbd85b8d36752e42058fd9e45af920963a9701-json.log content
{"log":"ttesttest...test\",\"time\":\"2020-05-22T03:35:35Z\"}\n","stream":"stderr","time":"2020-05-22T03:35:35.632371865Z"}



elasticsearch 索引裡面只看到下半段!前半段的內容不見了
"_source": {
"message": "ttesttest...test\",\"time\":\"2020-05-22T03:35:35Z\"}",...

"tags": [
"_jsonparsefailure"
],

要回复问题请先登录注册