当前位置:   article > 正文

Kubernetes运维之使用ELK Stack收集K8S平台日志

elk收集ingress日志

kubernetes运维之使用elk Stack收集k8s平台日志
目录:

  1. 收集哪些日志
  2. elk Stack日志方案
  3. 容器中的日志怎么收集
  4. k8S平台中应用日志收集

一、收集哪些日志
• k8s系统的组件日志 比如kubectl get cs下面的组件
master节点上的controller-manager,scheduler,apiserver
node节点上的kubelet,kube-proxy
• k8s Cluster里面部署的应用程序日志

  • 标准输出
  • 日志文件
    elk Stack日志方案,改怎么去收集这些日志?
    Kubernetes运维之使用ELK Stack收集K8S平台日志
    Elasticsearch是一个基于JSON的分布式搜索和分析引擎,它能快速的检索
    kibban主要是用来展示ES的数据的
    Beats是一个面向轻量型采集器的平台,也就是这个里面有很多的组件,面对不同的应用场景去采集
    Logstach是动态数据收集的管道,主要对数据的过滤分析,格式化到ES里面

这里就形成一个数据流,首选呢就是Beats,后面是Logstach,后面是ES,后面是kibana,所以这个技术栈是非常完善的。而beats系列的组件也很多,比如对网络数据的采集,对日志文件的采集,对windos事件的采集,运行时间的采集,而elk这个栈呢,不仅仅可以采集数据日志,还能采集性能资源的指标,比如CPU,内存,网络,这里呢主要使用Filebeat收集日志文件。监控呢就找专业的去做,比如prometheus。

话说回来,容器的日志怎么收集?

方案一:Node上部署一个日志收集程序
• DaemonSet方式部署日志收集程序
• 对本节点/var/log和 /var/lib/docker/containers/
两个目录下的日志进行采集
• Pod中容器日志目录挂载到宿主机统一目录上

也就是my-pod是容器,然后标准输入输出到控制台了,时间上这里是被docker接管了,落地到一个具体的文件中了,docker会接管标准输出与标准错误输出,然后写到一个日志里,这里会起一个日志采集的agent,去采集这个日志,而这个张图,大概意思就是在你每个的node上部署一个日志采集器,然后采集pod日志,标准输入输出的目录,默认是在 /var/lib/docker/containers/ 下面,这个下面是运行当前的容器的读写层,里面就包含了一个日志,一般就是挂载到分布式存储上,要是挂载到宿主机的目录,也不是很太方便,还要去区别所有的容器。要是使用分布式存储,比如器一个pod,直接让存储专门存储日志这个卷,
挂载到容器中的启动容器中,每起一个都挂这个卷,最终都会落到上面去,这样会好一点。

Kubernetes运维之使用ELK Stack收集K8S平台日志
方案二:Pod中附加专用日志收集的容器
• 每个运行应用程序的Pod中增加一个日志
收集容器,使用emtyDir共享日志目录让
日志收集程序读取到。

第二种呢就是一种sidecar的模式,就是在你sidecar模式中再增加一个专门去处理那就想要的事情的容器,这就称为一个旁路,也就是当前你业务旁边,给你增加一个容器,处理你业务的日志的,也就是使用emtyDir让容器A写日志目录,给共享到这个目录里,也就是共享目录,也就是在宿主机的目录里,然后容器B读取也是挂载这个数据卷,它也能自然读取当前数据卷内的内容,所以这种情况呢就附加个Pod就能获取到日志了。

Kubernetes运维之使用ELK Stack收集K8S平台日志
方案三:应用程序直接推送日志
• 超出Kubernetes范围
Kubernetes运维之使用ELK Stack收集K8S平台日志
这个小公司会有些,不过也不多,就是应用程序在代码里去修改,直接推送到你远程的存储上,不再输出到控制台,本地文件了,直接推,这个就不再k8s范围之内了,这种方案用的有不多,用的最多的就是前两种

这两种方案有什么优缺点?
Kubernetes运维之使用ELK Stack收集K8S平台日志
像方案一就是需要在每台node节点上去部署一个日志采集的agent,资源消耗少,一般不需要应用程序的介入,但是它需要通过应用程序写到标准输出和标准错误输出,比如tomcat,日志里面都是很多行,需要合并成一行才能进行采集,需要转换成json格式,json在docker方面已经多行分开了,所以不能使用多行匹配了,所以很尴尬。

像方案二就是在pod中附加专用日志收集的容器,附加到每个应用里面,每个pod再加一个容器,就加一个镜像,这种方式低耦合,缺点呢,显而易见,你部署一个应用,加一个采集器,部署又一个又加一个采集器,就是你要启动一套项目,需要加一个容器,就是需要资源的消耗了,并增加运维的维护成本,不过运维维护成本也还好,主要增加资源的消耗比较大一点。

第三种方案,就是让开发去改就行了。
我们使用的是方案二的,附加一个,这个还是比较好实现的
目前呢我们使用fileBeat去做日志的采集,早期呢都是使用logstach去采集,logstach采集呢占用资源也比较大,本身呢是java写的,filebeat是Go写的,资源占用比较小,java它采集的量一大了,之后消耗杠杠的,所以后面官方将logstach采集功能剥离出来,使用GO重写了一个filebeat,所有现在用建议使用fileBeat。
这个fek里面是filebeat,就是部署filebeat,这里面启动用对k8s的支持,目前这个适合比较小的数据量,自己写的yaml,如果你的数据量达到20-30g以上,这个单机的es肯定是很难满足的,如果你的日志量比较大,不建议你把elk部署到k8s中,建议把你的logstack,es,存储部署到k8s之外,特别是es,建议部署到集群之外,物理机去组件集群,kibana可以部署在k8s 中,但是es是有状态的部署

  1. [root@k8s-master elk]# ls
  2. fek k8s-logs.yaml nginx-deployment.yaml tomcat-deployment.yaml
  3. [root@k8s-master elk]# ls
  4. fek k8s-logs.yaml nginx-deployment.yaml tomcat-deployment.yaml
  5. [root@k8s-master elk]# cd fek/
  6. [root@k8s-master fek]# ls
  7. elasticsearch.yaml filebeat-kubernetes.yaml kibana.yaml
  1. [root@k8s-master fek]# cat filebeat-kubernetes.yaml
  2. ---
  3. apiVersion: v1
  4. kind: ConfigMap
  5. metadata:
  6. name: filebeat-config
  7. namespace: kube-system
  8. labels:
  9. k8s-app: filebeat
  10. data:
  11. filebeat.yml: |-
  12. filebeat.config:
  13. inputs:
  14. path: ${path.config}/inputs.d/*.yml
  15. reload.enabled: false
  16. modules:
  17. path: ${path.config}/modules.d/*.yml
  18. reload.enabled: false
  19. output.elasticsearch:
  20. hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']
  21. ---
  22. apiVersion: v1
  23. kind: ConfigMap
  24. metadata:
  25. name: filebeat-inputs
  26. namespace: kube-system
  27. labels:
  28. k8s-app: filebeat
  29. data:
  30. kubernetes.yml: |-
  31. - type: docker
  32. containers.ids:
  33. - "*"
  34. processors:
  35. - add_kubernetes_metadata:
  36. in_cluster: true
  37. ---
  38. apiVersion: extensions/v1beta1
  39. kind: DaemonSet
  40. metadata:
  41. name: filebeat
  42. namespace: kube-system
  43. labels:
  44. k8s-app: filebeat
  45. spec:
  46. template:
  47. metadata:
  48. labels:
  49. k8s-app: filebeat
  50. spec:
  51. serviceAccountName: filebeat
  52. terminationGracePeriodSeconds: 30
  53. containers:
  54. - name: filebeat
  55. image: elastic/filebeat:7.3.1
  56. args: [
  57. "-c", "/etc/filebeat.yml",
  58. "-e",
  59. ]
  60. env:
  61. - name: ELASTICSEARCH_HOST
  62. value: elasticsearch
  63. - name: ELASTICSEARCH_PORT
  64. value: "9200"
  65. securityContext:
  66. runAsUser: 0
  67. resources:
  68. limits:
  69. memory: 200Mi
  70. requests:
  71. cpu: 100m
  72. memory: 100Mi
  73. volumeMounts:
  74. - name: config
  75. mountPath: /etc/filebeat.yml
  76. readOnly: true
  77. subPath: filebeat.yml
  78. - name: inputs
  79. mountPath: /usr/share/filebeat/inputs.d
  80. readOnly: true
  81. - name: data
  82. mountPath: /usr/share/filebeat/data
  83. - name: varlibdockercontainers
  84. mountPath: /var/lib/docker/containers
  85. readOnly: true
  86. volumes:
  87. - name: config
  88. configMap:
  89. defaultMode: 0600
  90. name: filebeat-config
  91. - name: varlibdockercontainers
  92. hostPath:
  93. path: /var/lib/docker/containers
  94. - name: inputs
  95. configMap:
  96. defaultMode: 0600
  97. name: filebeat-inputs
  98. - name: data
  99. hostPath:
  100. path: /var/lib/filebeat-data
  101. type: DirectoryOrCreate
  102. ---
  103. apiVersion: rbac.authorization.k8s.io/v1beta1
  104. kind: ClusterRoleBinding
  105. metadata:
  106. name: filebeat
  107. subjects:
  108. - kind: ServiceAccount
  109. name: filebeat
  110. namespace: kube-system
  111. roleRef:
  112. kind: ClusterRole
  113. name: filebeat
  114. apiGroup: rbac.authorization.k8s.io
  115. ---
  116. apiVersion: rbac.authorization.k8s.io/v1beta1
  117. kind: ClusterRole
  118. metadata:
  119. name: filebeat
  120. labels:
  121. k8s-app: filebeat
  122. rules:
  123. - apiGroups: [""] # "" indicates the core API group
  124. resources:
  125. - namespaces
  126. - pods
  127. verbs:
  128. - get
  129. - watch
  130. - list
  131. ---
  132. apiVersion: v1
  133. kind: ServiceAccount
  134. metadata:
  135. name: filebeat
  136. namespace: kube-system
  137. labels:
  138. k8s-app: filebeat
  139. ---
  1. [root@k8s-master fek]# cat elasticsearch.yaml
  2. apiVersion: apps/v1
  3. kind: StatefulSet
  4. metadata:
  5. name: elasticsearch
  6. namespace: kube-system
  7. labels:
  8. k8s-app: elasticsearch
  9. spec:
  10. serviceName: elasticsearch
  11. selector:
  12. matchLabels:
  13. k8s-app: elasticsearch
  14. template:
  15. metadata:
  16. labels:
  17. k8s-app: elasticsearch
  18. spec:
  19. containers:
  20. - image: elasticsearch:7.3.1
  21. name: elasticsearch
  22. resources:
  23. limits:
  24. cpu: 1
  25. memory: 2Gi
  26. requests:
  27. cpu: 0.5
  28. memory: 500Mi
  29. env:
  30. - name: "discovery.type"
  31. value: "single-node"
  32. - name: ES_JAVA_OPTS
  33. value: "-Xms512m -Xmx2g"
  34. ports:
  35. - containerPort: 9200
  36. name: db
  37. protocol: TCP
  38. volumeMounts:
  39. - name: elasticsearch-data
  40. mountPath: /usr/share/elasticsearch/data
  41. volumeClaimTemplates:
  42. - metadata:
  43. name: elasticsearch-data
  44. spec:
  45. storageClassName: "managed-nfs-storage"
  46. accessModes: [ "ReadWriteOnce" ]
  47. resources:
  48. requests:
  49. storage: 20Gi
  50. ---
  51. apiVersion: v1
  52. kind: Service
  53. metadata:
  54. name: elasticsearch
  55. namespace: kube-system
  56. spec:
  57. clusterIP: None
  58. ports:
  59. - port: 9200
  60. protocol: TCP
  61. targetPort: db
  62. selector:
  63. k8s-app: elasticsearch
  1. [root@k8s-master fek]# cat kibana.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: kibana
  6. namespace: kube-system
  7. labels:
  8. k8s-app: kibana
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. k8s-app: kibana
  14. template:
  15. metadata:
  16. labels:
  17. k8s-app: kibana
  18. spec:
  19. containers:
  20. - name: kibana
  21. image: kibana:7.3.1
  22. resources:
  23. limits:
  24. cpu: 1
  25. memory: 500Mi
  26. requests:
  27. cpu: 0.5
  28. memory: 200Mi
  29. env:
  30. - name: ELASTICSEARCH_HOSTS
  31. value: http://elasticsearch:9200
  32. ports:
  33. - containerPort: 5601
  34. name: ui
  35. protocol: TCP
  36. ---
  37. apiVersion: v1
  38. kind: Service
  39. metadata:
  40. name: kibana
  41. namespace: kube-system
  42. spec:
  43. ports:
  44. - port: 5601
  45. protocol: TCP
  46. targetPort: ui
  47. selector:
  48. k8s-app: kibana
  49. ---
  50. apiVersion: extensions/v1beta1
  51. kind: Ingress
  52. metadata:
  53. name: kibana
  54. namespace: kube-system
  55. spec:
  56. rules:
  57. - host: kibana.ctnrs.com
  58. http:
  59. paths:
  60. - path: /
  61. backend:
  62. serviceName: kibana
  63. servicePort: 5601
  1. [root@k8s-master fek]# kubectl create -f .
  2. [root@k8s-master fek]# kubectl get pod -n kube-system
  3. NAME READY STATUS RESTARTS AGE
  4. alertmanager-5d75d5688f-xw2qg 2/2 Running 0 6h32m
  5. coredns-bccdc95cf-kqxwv 1/1 Running 2 6d6h
  6. coredns-bccdc95cf-nwkbp 1/1 Running 2 6d6h
  7. elasticsearch-0 1/1 Running 0 7m15s
  8. etcd-k8s-master 1/1 Running 1 6d6h
  9. filebeat-8s9cx 1/1 Running 0 7m14s
  10. filebeat-xgdj7 1/1 Running 0 7m14s
  11. grafana-0 1/1 Running 0 21h
  12. kibana-b7d98644-cmg9k 1/1 Running 0 7m15s
  13. kube-apiserver-k8s-master 1/1 Running 1 6d6h
  14. kube-controller-manager-k8s-master 1/1 Running 2 6d6h
  15. kube-flannel-ds-amd64-dc5z9 1/1 Running 1 6d6h
  16. kube-flannel-ds-amd64-jm2jz 1/1 Running 1 6d6h
  17. kube-flannel-ds-amd64-z6tt2 1/1 Running 1 6d6h
  18. kube-proxy-9ltx7 1/1 Running 2 6d6h
  19. kube-proxy-lnzrj 1/1 Running 1 6d6h
  20. kube-proxy-v7dqm 1/1 Running 1 6d6h
  21. kube-scheduler-k8s-master 1/1 Running 2 6d6h
  22. kube-state-metrics-6474469878-lkphv 2/2 Running 0 8h
  23. prometheus-0 2/2 Running 0 5h6m
  24. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  25. service/elasticsearch ClusterIP None <none> 9200/TCP 46m
  26. service/kibana ClusterIP 10.1.185.95 <none> 5601/TCP 46m
  27. service/kube-dns ClusterIP 10.1.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d7h
  28. NAME HOSTS ADDRESS PORTS AGE
  29. ingress.extensions/kibana kibana.ctnrs.com 80 46m

然后我们去访问一下,这里我是做的测试所以把它的域名写到了本地的hosts文件进行解析
Kubernetes运维之使用ELK Stack收集K8S平台日志
这里选择Explore导入自己的数据
Kubernetes运维之使用ELK Stack收集K8S平台日志
现在数据已经收集到了,看一下它的索引有没有写入成功
Kubernetes运维之使用ELK Stack收集K8S平台日志
也就是创建的三个yaml文件之后,默认的创建filebeat索引,这就像数据库,索引呢查询到ES里面的数据库,索引匹配呢就是让kibana拿这个索引匹配查看里面的数据。
创建索引的匹配filebeat,这里会帮你去匹配所以有filebeat开头的,因为它是按每天去存储这个索引的,也就是每一天都有一个命名,所以打个星就能匹配所有,你访问这个模式就能查看以这个开头的数据这里还要点一下保存
Kubernetes运维之使用ELK Stack收集K8S平台日志
这里添加一个过滤时间的字段,一般使用这个时间戳
Kubernetes运维之使用ELK Stack收集K8S平台日志
Kubernetes运维之使用ELK Stack收集K8S平台日志
然后点最上面的按钮就能看到数据了。这里默认的就是使用这个filebeat,要是多个的话,这里会有一个选择框,下面的输出是所有控制台输出的
Kubernetes运维之使用ELK Stack收集K8S平台日志
这里会可以看一些相关的日志,比如命名空间,很多
Kubernetes运维之使用ELK Stack收集K8S平台日志
比如看容器的保存路径下的容器的日志
Kubernetes运维之使用ELK Stack收集K8S平台日志
还有messages输出整体的日志内容,能看出它采用的哪个命名空间,能看出pod的名称,node的名称,也能看出采集的日志
Kubernetes运维之使用ELK Stack收集K8S平台日志

比如单独看一些想要的日志,通过过滤条件去筛选
Kubernetes运维之使用ELK Stack收集K8S平台日志
我们现在要收集k8s的日志,也就是你的ELK平台部署起来了,它是一个独立的系统部署起来了,要是使用set car方式去收集这个日志。
要是采集k8s日志,需要采集
[root@k8s-master elk]# tail /var/log/messages
这个文件,收集这个,我们先编写一个filebeat,这里就指定你要收集那些文件,这个filebeat这个pod,是不能访问到宿主机的,所以我们要通过数据卷挂载这个文件,es的索引相当于mysql 的db,所以要根据es里要创建不同的索引,也就是按天,记录某一个日志,这一天产生的日志放到这个索引中,这个索引呢要自定义名称,根据你当前部署的业务写一个名称,这样为了方面后面做查询,做一定的分类,别到时候几个项目了,k8s项目了,php项目了,Tomcat项目了,都在一个索引里面,当去查询也比较困难,所以把他们分成不同的索引,要指定这些的话就需要加这三个参数

  1. setup.ilm.enabled: false
  2. setup.template.name: "k8s-module"
  3. setup.template.pattern: "k8s-module-*"

下面是通过deemonset部署的filebeat到每个节点上,通过hostpath将宿主机上的/var/log/messages/挂载到容器中的/var/log/messages,这样容器中就有这个日志文件了,就能读取到了,这就是收集k8s的日志。

  1. [root@k8s-master elk]# cat k8s-logs.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: k8s-logs-filebeat-config
  6. namespace: kube-system
  7. data:
  8. filebeat.yml: |
  9. filebeat.inputs:
  10. - type: log
  11. paths:
  12. - /var/log/messages
  13. fields:
  14. app: k8s
  15. type: module
  16. fields_under_root: true
  17. setup.ilm.enabled: false
  18. setup.template.name: "k8s-module"
  19. setup.template.pattern: "k8s-module-*"
  20. output.elasticsearch:
  21. hosts: ['elasticsearch.kube-system:9200']
  22. index: "k8s-module-%{+yyyy.MM.dd}"
  23. ---
  24. apiVersion: apps/v1
  25. kind: DaemonSet
  26. metadata:
  27. name: k8s-logs
  28. namespace: kube-system
  29. spec:
  30. selector:
  31. matchLabels:
  32. project: k8s
  33. app: filebeat
  34. template:
  35. metadata:
  36. labels:
  37. project: k8s
  38. app: filebeat
  39. spec:
  40. containers:
  41. - name: filebeat
  42. image: elastic/filebeat:7.3.1
  43. args: [
  44. "-c", "/etc/filebeat.yml",
  45. "-e",
  46. ]
  47. resources:
  48. requests:
  49. cpu: 100m
  50. memory: 100Mi
  51. limits:
  52. cpu: 500m
  53. memory: 500Mi
  54. securityContext:
  55. runAsUser: 0
  56. volumeMounts:
  57. - name: filebeat-config
  58. mountPath: /etc/filebeat.yml
  59. subPath: filebeat.yml
  60. - name: k8s-logs
  61. mountPath: /var/log/messages
  62. volumes:
  63. - name: k8s-logs
  64. hostPath:
  65. path: /var/log/messages
  66. - name: filebeat-config
  67. configMap:
  68. name: k8s-logs-filebeat-config
  1. [root@k8s-master elk]# kubectl create -f k8s-logs.yaml
  2. [root@k8s-master elk]# kubectl get pod -n kube-system
  3. NAME READY STATUS RESTARTS AGE
  4. coredns-bccdc95cf-kqxwv 1/1 Running 2 6d8h
  5. coredns-bccdc95cf-nwkbp 1/1 Running 2 6d8h
  6. elasticsearch-0 1/1 Running 0 94m
  7. etcd-k8s-master 1/1 Running 1 6d8h
  8. filebeat-8s9cx 1/1 Running 0 94m
  9. filebeat-xgdj7 1/1 Running 0 94m
  10. k8s-logs-5s9kl 1/1 Running 0 37s
  11. k8s-logs-txz4q 1/1 Running 0 37s
  12. kibana-b7d98644-cmg9k 1/1 Running 0 94m
  13. kube-apiserver-k8s-master 1/1 Running 1 6d8h
  14. kube-controller-manager-k8s-master 1/1 Running 2 6d8h
  15. kube-flannel-ds-amd64-dc5z9 1/1 Running 1 6d7h
  16. kube-flannel-ds-amd64-jm2jz 1/1 Running 1 6d7h
  17. kube-flannel-ds-amd64-z6tt2 1/1 Running 1 6d8h
  18. kube-proxy-9ltx7 1/1 Running 2 6d8h
  19. kube-proxy-lnzrj 1/1 Running 1 6d7h
  20. kube-proxy-v7dqm 1/1 Running 1 6d7h
  21. kube-scheduler-k8s-master 1/1 Running 2 6d8h

还是原来的步骤,最后的一个按钮索引管理这里
Kubernetes运维之使用ELK Stack收集K8S平台日志
这是我们自定义采集的日志
Kubernetes运维之使用ELK Stack收集K8S平台日志
然后在创建一个索引
Kubernetes运维之使用ELK Stack收集K8S平台日志
选择这个然后保存
Kubernetes运维之使用ELK Stack收集K8S平台日志
创建索引
Kubernetes运维之使用ELK Stack收集K8S平台日志

选择module-这里就能看到我们var/log/messages的日志
Kubernetes运维之使用ELK Stack收集K8S平台日志
做一个简单的测试比如这样
[root@k8s-node1 ~]# echo hello > /var/log/messages
Kubernetes运维之使用ELK Stack收集K8S平台日志
然后接收一下tomcat的日志
一般需要看的话,tomcat前面由nginx去做反向代理,而Tomcat需要看的日志是catalina
jc日志主要调试的时候需要看。

  1. [root@k8s-master elk]# cat tomcat-deployment.yaml
  2. apiVersion: apps/v1beta1
  3. kind: Deployment
  4. metadata:
  5. name: tomcat-java-demo
  6. namespace: test
  7. spec:
  8. replicas: 3
  9. selector:
  10. matchLabels:
  11. project: www
  12. app: java-demo
  13. template:
  14. metadata:
  15. labels:
  16. project: www
  17. app: java-demo
  18. spec:
  19. imagePullSecrets:
  20. - name: registry-pull-secret
  21. containers:
  22. - name: tomcat
  23. image: 192.168.30.24/test/tomcat-java-demo:latest
  24. imagePullPolicy: Always
  25. ports:
  26. - containerPort: 8080
  27. name: web
  28. protocol: TCP
  29. resources:
  30. requests:
  31. cpu: 0.5
  32. memory: 1Gi
  33. limits:
  34. cpu: 1
  35. memory: 2Gi
  36. livenessProbe:
  37. httpGet:
  38. path: /
  39. port: 8080
  40. initialDelaySeconds: 60
  41. timeoutSeconds: 20
  42. readinessProbe:
  43. httpGet:
  44. path: /
  45. port: 8080
  46. initialDelaySeconds: 60
  47. timeoutSeconds: 20
  48. volumeMounts:
  49. - name: tomcat-logs
  50. mountPath: /usr/local/tomcat/logs
  51. - name: filebeat
  52. image: elastic/filebeat:7.3.1
  53. args: [
  54. "-c", "/etc/filebeat.yml",
  55. "-e",
  56. ]
  57. resources:
  58. limits:
  59. memory: 500Mi
  60. requests:
  61. cpu: 100m
  62. memory: 100Mi
  63. securityContext:
  64. runAsUser: 0
  65. volumeMounts:
  66. - name: filebeat-config
  67. mountPath: /etc/filebeat.yml
  68. subPath: filebeat.yml
  69. - name: tomcat-logs
  70. mountPath: /usr/local/tomcat/logs
  71. volumes:
  72. - name: tomcat-logs
  73. emptyDir: {}
  74. - name: filebeat-config
  75. configMap:
  76. name: filebeat-config
  77. ---
  78. apiVersion: v1
  79. kind: ConfigMap
  80. metadata:
  81. name: filebeat-config
  82. namespace: test
  83. data:
  84. filebeat.yml: |-
  85. filebeat.inputs:
  86. - type: log
  87. paths:
  88. - /usr/local/tomcat/logs/catalina.*
  89. fields:
  90. app: www
  91. type: tomcat-catalina
  92. fields_under_root: true
  93. multiline:
  94. pattern: '^\['
  95. negate: true
  96. match: after
  97. setup.ilm.enabled: false
  98. setup.template.name: "tomcat-catalina"
  99. setup.template.pattern: "tomcat-catalina-*"
  100. output.elasticsearch:
  101. hosts: ['elasticsearch.kube-system:9200']
  102. index: "tomcat-catalina-%{+yyyy.MM.dd}"

滚动更新一下,一般要是错误日志的话,日志量会增加,肯定需要去解决,又不是访问日志。另外滚动更新需要一分钟时间

  1. [root@k8s-master elk]# kubectl get pod -n test
  2. [root@k8s-master elk]# kubectl get pod -n test
  3. NAME READY STATUS RESTARTS AGE
  4. tomcat-java-demo-7ffd4dc7c5-26xjf 2/2 Running 0 5m19s
  5. tomcat-java-demo-7ffd4dc7c5-lwfgr 2/2 Running 0 7m31s
  6. tomcat-java-demo-7ffd4dc7c5-pwj77 2/2 Running 0 8m50s

我们的日志收集到了
Kubernetes运维之使用ELK Stack收集K8S平台日志

然后在创建一个索引
Kubernetes运维之使用ELK Stack收集K8S平台日志
Kubernetes运维之使用ELK Stack收集K8S平台日志
Kubernetes运维之使用ELK Stack收集K8S平台日志
然后也可以去测试一下去容器,比如访问日志等等,和刚才的测试一样。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/792695
推荐阅读
相关标签
  

闽ICP备14008679号