概要
客户应用在容器化上 Openshift的时候日志方面做了些改造,容器化之前在虚拟机的某个路径下读取日志进行故障分析,容器化后通过在web-console查看实时日志和通过EFK查看日志;在这里客户有个需求,主要还是金融行业有这种需求,需要做日志审计,说白了就是把明文的日志文件打包好交给审计部门去审计,这样的话就要求需要单独生成这么一份日志,也方便有问题的时候查看,有些开发与运维人员不喜欢看kibana。我的思路就是将宿主机的路径挂载到容器内,容器将日志打到某个路径下,日志文件就映射到了宿主机的路径下,宿主机配置个定时任务,晚上的时候去收集日志,发送到某个地方去归档。
关于日志文件名称的问题,一般情况下日志文件的名称都是 app.log什么的,如何做到日志文件都一样呢?比如有多个pod,默认生成的日志文件名称是一样的,这时候写日志就会冲突,我的做法是在容器启动的时候,去替换 app.log为pod的名称,比如一个pod的名称叫做ABC,那么日志的名称就叫ABC.log,具体的方法下面会说明。
1、在node节点创建目录
mkdir /APP_LOGS/demo/demo
2、修改目录权限
chmod -R 775 demo
3、登录openshift命令行,oc project切换到指定项目
oc project demo-test
4、给sa分配权限
oc adm policy add-scc-to-user privileged -z default
5、编辑DC yaml文件,与 volumeMounts 同一级,添加以下内容:
securityContext:
privileged: true
6、编辑DC yaml文件,添加volume
volumes:
- hostPath:
path: /APP_LOGS/demo/demo
type: ''
name: logs
7、编辑DC yaml文件,将volume进行mount
volumeMounts:
- mountPath: /projects/logs
name: logs
8、修改应用日志相关配置文件(configmap),将configmap内的文件名修改为application-bak.yaml文件,并且把日志文件名称使用一个大写单词进行替换,如demoLOG
logging:
level:
root: info
file: demoLOG.log
path: /projects/logs/
9、编辑DC yaml文件,将application.yml相关的修改为bak
volumeMounts:
- mountPath: /projects/configs/application-bak.yml
name: application-bak-yml
subPath: application-bak.yml
volumes:
- configMap:
defaultMode: 511
name: demo-application.yml-v1
name: application-bak-yml
10、在应用启动脚本里面添加一个sed替换文件,将默认的application-bak.yml内容中的demoLOG修改为pod的主机名,并生成一个新的文件
sed "s#demoLOG#${HOSTNAME}#g" /projects/configs/application-bak.yml >>/projects/configs/application.yml
11、这时候在pod内的/projects/logs/路径下就能看到日志,并且在node宿主机的/APP_LOGS/demo/demo路径下也能看到
pod内:
sh-4.2$ pwd
/projects/logs
sh-4.2$ ls
demo-66-qv92q.log demo-66-tm9j9.log demo-67-6xkqm.log demo-67-8l4sr.log demo-67-bh87t.log daily
node宿主机内:
[root@node01 demo]# pwd
/APP_LOGS/demo/demo
[root@node01 demo]# ls
demo-66-qv92q.log demo-66-tm9j9.log demo-67-6xkqm.log demo-67-8l4sr.log demo-67-bh87t.log daily
网友评论