kubernetes 日志收集方案_EFK 一、EFK 1.1 EFK介绍 EFK为elasticsearch、fluentd、kibana的简称,本案例主要对kubernetes集群日志收集。 1….
kubernetes日志收集方案 EFK kubernetes 日志收集方案_EFK 一、EFK 1.1 EFK介绍 EFK为elasticsearch、fluentd、kibana的简称,本案例主要对kubernetes集群日志收集。
1.2 Fluentd介绍 fluentd是一款开源的日志收集工具,其于2016年11月8日被云原生计算基金会录取,并于2019年毕业。
Fluentd优势:
使用 JSON 进行统一日志记录
其尽可能地把数据结构化为JSON,让下游数据处理容易。
可插拔架构
对计算机资源要求少
其使用c语言和ruby结合编写,需要少量系统资源即可运行。
内置可靠性
支持基于内存和文件的缓冲,防止节点间数据丢失
支持强大故障转移并可设置为高可用性
二、EFK部署 2.1 获取EFK部署资源清单文件 1 2 把EFK部署资源清单文件复制到本地主机,本次本地主机主要指k8s master节点
1 2 3 4 5 6 7 进入目录并查看目录内容 api cluster docs LICENSE Makefile.generated_files plugin SUPPORT.md build cmd go.mod LICENSES OWNERS README.md test CHANGELOG code-of-conduct .md go.sum logo OWNERS_ALIASES SECURITY_CONTACTS third_party CHANGELOG.md CONTRIBUTING.md hack Makefile pkg staging vendor
1 2 3 4 5 6 7 进入目录并查看目录内容 create-logging-namespace .yaml es-statefulset .yaml fluentd-es-image OWNERS es-image fluentd-es-configmap .yaml kibana-deployment .yaml podsecuritypolicies es-service .yaml fluentd-es-ds .yaml kibana-service .yaml README.md
2.2 安装ES 2.2.1 创建命名空间 1 2 应用资源清单文件创建命名空间,非必须,可使用资源清单中默认的命名空间 kube-system
2.2.2 部署ES
1 2 应用前,请注释此文件中ClusterIP:None,并修改type 类型为:NodePort,再执行
2.2.3 查看安装情况 1 2 3 4 5 查看ES部署的pod是否运行 NAME READY STATUS RESTARTS AGE elasticsearch-logging -0 1 /1 Running 0 8 m elasticsearch-logging -1 1 /1 Running 1 5 m50s
1 2 3 4 查看ES部署后的SVC,验证其访问的方法 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE elasticsearch-logging NodePort 10.107 .97.124 <none> 9200 :31885 /TCP,9300 :32214 /TCP 68 s
2.2.4 验证集群是否健康 1 2 3 查看ES集群是否健康,下面状态为健康。1640939218 08 :26 :58 kubernetes-logging green 2 2 6 3 0 0 0 0 - 100.0 %
2.3 部署fluentd 2.3.1 部署fluentd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 部署前对fluentd configmap进行配置,主要修改其连接ES的地址及对应的端口,此两项根据使用环境的不同,配置也不相同。456 output.conf: |-457 <match **>458 @id elasticsearch459 @type elasticsearch460 @log_level info461 type_name _doc462 include_tag_key true463 host elasticsearch-logging 修改此处为es主机地址464 port 9200 使用NodePort时,此处也需要修改对应映射端口465 logstash_format true466 <buffer>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 修改资源清单文件 55 selector: 56 matchLabels: 57 k8s-app : fluentd-es 58 version: v3.1.1 59 template: 60 metadata: 61 labels: 62 k8s-app : fluentd-es 63 version: v3.1.1 64 spec: 65 66 67
2.3.2 查看部署状态
1 2 3 4 5 6 输出结果: NAME READY STATUS RESTARTS AGE elasticsearch-logging -0 1 /1 Running 0 20 m elasticsearch-logging -1 1 /1 Running 1 18 m fluentd-es-v3 .1.1 -2chjb 1 /1 Running 0 64 s fluentd-es-v3 .1.1 -5gpmd 1 /1 Running 0 64 s
2.4 部署Kibana 2.4.1 部署Kibana 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 修改资源清单文件 18 spec: 以下三行注释掉 19 20 21 22 containers: 23 - name: kibana-logging 24 image: docker.elastic.co/kibana/kibana-oss :7.10 .2 25 resources: 26 27 limits: 28 cpu: 1000 m 29 requests: 30 cpu: 100 m 31 env: 32 - name: ELASTICSEARCH_HOSTS 33 value: http://elasticsearch-logging .logging.svc.cluster.local.:9200 34 - name: SERVER_NAME 35 value: kibana-logging 以下两行注释掉 36 37
1 2 3 4 5 6 7 8 9 10 11 12 修改kibana service资源清单文件,以NodePort类型暴露服务,供K8S集群外用户访问 spec: ports: - port: 5601 protocol: TCP targetPort: ui selector: k8s-app : kibana-logging type : NodePort 添加此行内容
2.4.2 查看Kibana部署状态 1 2 3 4 5 6 7 8 查看已部署组件pod运行状态 NAME READY STATUS RESTARTS AGE elasticsearch-logging -0 1 /1 Running 0 25 m elasticsearch-logging -1 1 /1 Running 1 22 m fluentd-es-v3 .1.1 -2chjb 1 /1 Running 0 5 m45s fluentd-es-v3 .1.1 -5gpmd 1 /1 Running 0 5 m45s kibana-logging-c46f6b9c5-g9fsl 1 /1 Running 0 11 s
1 2 3 4 5 6 获取kibana对外提供的主机地址及对应的端口 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE elasticsearch-logging NodePort 10.107 .97.124 <none> 9200 :31885 /TCP,9300 :32214 /TCP 15 m kibana-logging NodePort 10.99 .171.38 <none> 5601 :31739 /TCP 7 s
1 2 3 4 在K8S集群任意主机查看是否打开kibana对外的端口(服务类型为NodePort) tcp LISTEN 0 4096 *:31739 *:* users:(("kube-proxy" ,pid=4569 ,fd=23 ))
通过浏览器访问kibana web界面。