我在Tomcat容器/ pod中部署了一个微服务。容器中生成了四个不同的文件 - access.log,tomcat.log,catalina.out和application.log(log4j输出)。将这些日志发送到Elasticsearch(或类似平台)的最佳方法是什么。
我阅读了有关此page日志记录架构的信息 - Kubernetes 5.“带有日志代理的Sidecar容器”是我用例的最佳选择吗?
是否可以获取pod标签(例如:version)并将其添加到每一行?如果可行,请使用像流利的日志代理? (我只是想知道我应该采取的方向)。
答案 0 :(得分:2)
是的,您的用例的最佳选择是每个日志文件必须有一个tail -f
边车,然后安装一个fluentd
或fluent-bit
守护进程来处理运输和丰富日志事件。
该链接提供fluentd elasticsearch群集插件。它将安装一个流畅的守护进程和一个最小的ES集群。 ES群集未准备好生产,因此请参阅自述文件以获取有关必须更改的内容的详细信息。
答案 1 :(得分:1)
是否可以获取pod标签(例如:version)并将其添加到每个标签 线?
您可以将Pod元数据描述中的信息挂载到其文件系统,之后您可以将代理配置为使用此数据。这是一个例子:
apiVersion: v1
kind: Pod
metadata:
name: volume-test
spec:
containers:
- name: container-test
image: busybox
volumeMounts:
- name: all-in-one
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: all-in-one
projected:
sources:
- secret:
name: mysecret
items:
- key: username
path: my-group/my-username
- downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "cpu_limit"
resourceFieldRef:
containerName: container-test
resource: limits.cpu
- configMap:
name: myconfigmap
items:
- key: config
path: my-group/my-config
如果可行,请使用像流利的日志代理?
Tomcat无法自动将日志发送到Elasticsearch,它需要一个代理(例如,Fluentd,Logstash)。因此,如果要使用直接从应用程序公开日志选项,则需要使用其中的代理构建Tomcat映像。它似乎与使用带有日志代理的边车容器选项几乎相同,并且配置更难。 直接从应用程序公开日志选项与您开发的应用程序更相关。