Loggie Sidecar方式采集日志¶
虽然默认不推荐使用Sidecar方式采集容器日志,但是在某些受限场景下只能选择使用Sidecar的方式采集容器日志,这里我们给出一个参考的示例。
总体思路¶
如下图所示:
Loggie和业务container部署在同一个Pod里,同时需要挂载相同的日志文件volume,另外Loggie的配置可通过configMap的方式挂载到容器中,Loggie根据提供的configMap配置文件,采集容器的日志,并发送到后端。
注入Loggie sidecar¶
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tomcat
name: tomcat
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat
volumeMounts:
- mountPath: /usr/local/tomcat/logs
name: log
- name: loggie
args:
- -config.system=/opt/loggie/loggie.yml
- -config.pipeline=/opt/loggie/pipeline.yml
image: loggieio/loggie:main
volumeMounts:
# loggie和业务container挂载相同的log volume
- mountPath: /usr/local/tomcat/logs
name: log
# 挂载日志配置configMap
- mountPath: /opt/loggie
name: loggie-config
# 挂载loggie自身持久化的数据
- mountPath: /data
name: registry
volumes:
- emptyDir: {}
name: log
- emptyDir: {}
name: registry
- name: loggie-config
configMap:
name: tomcat-loggie-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: tomcat-loggie-config
namespace: default
data:
loggie.yml: |
loggie:
reload:
enabled: true
period: 10s
monitor:
logger:
period: 30s
enabled: true
listeners:
filesource: ~
filewatcher: ~
reload: ~
sink: ~
http:
enabled: true
port: 9196
pipeline.yml: |
pipelines:
- name: "tomcat"
sources:
- type: "file"
name: "tomcatlog"
paths:
- "/usr/local/tomcat/logs/*.log"
fields:
namespace: default
deployment: tomcat
fieldsFromEnv:
podname: HOSTNAME
sink:
type: "dev"
printEvents: true
codec:
pretty: true
可以参考以上的部署方式通过loggie sidecar采集容器日志。
需要注意的是:
- 目前不建议在配置文件中enable kubernetes discovery,由于打开后会请求Kubernetes,在Pods比较多的时候,会对Kubernetes造成一定压力,所以无法使用LogConfig CRD,需要使用configMap挂载配置文件。
- 由于不使用Kubernetes discovery,这里的fields并不会被自动加上Pod的元信息,需要使用fieldsFromEnv的方式从Pod的环境变量里获取。
Tips
- namespace等固定信息可以配置到fields里,也可以通过使用downward API的方式引用到env里
- fieldsFromEnv获取到的Env环境变量不仅仅局限在Pod yaml里配置的env字段,Loggie容器里任意的环境变量均可,我们可以在容器里执行
env
命令查看。
- 修改configMap中的参数,需要经过一段时间后才会被刷新到Pod里,如果希望立即生效,需要重建Pod,请注意是否影响业务
Info
Loggie后续会支持自动Sidecar注入和通过LogConfig自动生成ConfigMap挂载的方式,从而达到和使用DaemonSet一致的体验。