延安市住建建设网站,外贸seo营销ppt,天津网站建设公司推荐,京山网站建设一、背景
前文采集的日志是来源于虚拟机#xff0c;在云原生下的容器化部署时#xff0c;需要采集Pod里的jvm日志。
二、术语
1、临时存储emptyDir
emptyDir在Pod被分配到Node时创建的#xff0c;它的初始内容为空#xff0c;并且无须指定宿主机上对应的目录文件#…一、背景
前文采集的日志是来源于虚拟机在云原生下的容器化部署时需要采集Pod里的jvm日志。
二、术语
1、临时存储emptyDir
emptyDir在Pod被分配到Node时创建的它的初始内容为空并且无须指定宿主机上对应的目录文件因为kubernetes会自动分配一个目录当Pod销毁时EmptyDir中的数据也会被永久删除所以也被称为临时存储。
2、ConfigMap
filebeat.yml保存在配置存储ConfigMap里filebeat进程加载该文件。
filebeat -c /etc/filebeat.yml三、整体设计
在同一个pod里使用sidecar模式再部署一个filebeat容器由它读取jvm容器输出的日志文件。
filebeat本身启动的时候配置文件filebeat.yml挂载到configMap供我们方便修改。
filebeat要读取jvm容器的日志文件通过emptyDir共享日志文件前者负责读取后者负责写入。
四、deployment.yaml
1、增加filebeat容器 containers:- name: filebeat-containerenv:- name: APPNAMEvalue: {{ .Values.appName }}image: docker.elastic.co/beats/filebeat:8.0.1args:- -c- /etc/filebeat.ymlvolumeMounts:- name: storage-logsmountPath: /opt/{{ .Values.appName }}/logs- name: filebeat-volumemountPath: /etc/filebeat.ymlreadOnly: truesubPath: filebeat.yml创建一个名称为storage-logs的临时存储emptyDir volumes:- name: storage-logsemptyDir: {}jvm容器把日志文件挂载到storage-logs volumeMounts:- mountPath: /opt/{{ .Values.appName }}/logsname: storage-logs2、ConfigMap配置存储
新增一个名称为filebeat-volume的ConfigMap volumes:- name: storage-logsemptyDir: {}#################- configMap:name: filebeat-configname: filebeat-volume配置存储新增一个名称为filebeat-config的配置
下面的截图可以看出key值对应上文的“subPath: filebeat.yml” yaml详情
kind: ConfigMap
apiVersion: v1
metadata:name: filebeat-confignamespace: java-service
data:#对应上文 subPath: filebeat.ymlfilebeat.yml: |filebeat.inputs:- type: logenabled: truebackoff: 1stail_files: falsepaths:- /opt/*/logs/*.logmultiline.pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}multiline.negate: falsemultiline.match: afterdocument_type: jvmfields:app: ${APPNAME}output.logstash:enabled: truehosts: [192.168.8.29:5044]
3、jvm容器修改日志的存储
由nfs调整为emptyDir
修改前 - name: {{ .Values.appName }}volumeMounts:- mountPath: /opt/{{ .Values.appName }}/logsname: volume-resourcessubPath: logsvolumes:- name: volume-resourcespersistentVolumeClaim:claimName: application-resources
修改后 - name: {{ .Values.appName }}volumeMounts:- mountPath: /opt/{{ .Values.appName }}/logsname: storage-logsvolumes:- name: storage-logsemptyDir: {}
五、总结
1、一定要让filebeat能够读取到被采集的日志比如本文就是采用emptydir临时文件的方式共享。 2、filebeat容器本身启动的时候注意需加载filebeat,yml配置。这里使用了args的方式指定配置文件所在路径。 args:- -c- /etc/filebeat.yml而/etc/filebeat.yml是挂载到configMap。
这一块踩过的坑就是没有启动filebeat进程。所以这个必不可少再次提醒。
3、由于整个deployment.yaml比较大我就不详细贴出来其内容。而且不同的公司不一需要你基于原本的配置修改。 下面仅以截图示意
这就是k8s的边车模式除了适用于本文的日志采集方案还可以被用来做监控、证书管理等。