Hi community,I have a microservice written in Go
deployed on both GKE and EKS that basically fetches the container log, parses it, do some modification, and then saves it to database.
The problem is that it is working on AWS but not on GKE. I looked into the cluster and found that GKE
uses containerd
runtime while AWS
has docker
runtime.Log formatting of these runtimes are different.
AWS cluster
System Info:
Machine ID: ec2295996f20a0sacadcdc7a58695be4
System UUID: EC229599-6Fdavvdv-7FE-4C7A58695BE4
Boot ID: 50132d2b-d2ab-dacacdv-58b0ce259c6
Kernel Version: 4.14.232-176.381.amzn2.x86_64
OS Image: Amazon Linux 2
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://19.3.13. <-------- This is the runtime
Kubelet Version: v1.18.9-eks-d1db3c
Kube-Proxy Version: v1.18.9-eks-d1db3c
GKE cluster
System Info:
Machine ID: b9a3ed3scsakhcasdfef6aeca066a50f
System UUID: b9a3ed30-scacakjk-sf-6aeca066a50f
Boot ID: 6939924d-c5dss45da-9c34-459d513b8a7c
Kernel Version: 5.4.89+
OS Image: Container-Optimized OS from Google
Operating System: linux
Architecture: amd64
Container Runtime Version: containerd://1.4.3. <-------- This is the runtime
Kubelet Version: v1.19.10-gke.1600
Kube-Proxy Version: v1.19.10-gke.1600
Containerd runtime format:
2021-06-22T10:27:25.813799277Z stdout F some log
Docker runtime format ( JSON ) :
{“log”:“some log\n”,“stream”:“stdout”,“time”:“2021-06-22T10:27:25.813799277Z”}
Due to this issue, my service is not able to parse the logs coming from containers from containerd
runtime.
I tried custom function to parse the containerd log to docker json log format but it doesn’t help.Is there any way to fix this issue programmatically using Go
? Thanks!