三十二、K8S容器日志收集-EFK

K8S容器日志收集-EFK

一、概要

在这里插入图片描述

在这里插入图片描述

传统架构ELK

Elasticsearch+ Logstash+Kibanna

新架构EFK技术栈

Elasticsearch+Fleentd+Kibana

Logstash,使用java开发,启动就占用资源,另外语法比较复杂

在这里插入图片描述

在这里插入图片描述

Filebeat也一个直接输入到Elasticsearch,但是需要注意版本,有可能不兼容,所有不推荐。

logstash,只做日志数据的解析,不做采集工作,所以占用资源少。


二、EFK 收集控制台日志

1. 部署Elasticsearch+Fluentd+Kibana

node节点内存要大于4G

下载需要的部署文件:

# git clone https://github.com/dotbalo/k8s.git
# cd k8s/efk-7.10.2/

创建 EFK 所用的命名空间:

[root@k8s-master01 efk-7.10.2]#kubectl create -f create-logging-namespace.yaml
namespace/logging created

创建 Elasticsearch 集群(企业内已有 ELK 平台可以不创建):

[root@k8s-master01 efk-7.10.2]#kubectl create -f es-service.yaml
service/elasticsearch-logging created

[root@k8s-master01 efk-7.10.2]#kubectl create -f es-statefulset.yaml
serviceaccount/elasticsearch-logging created
clusterrole.rbac.authorization.k8s.io/elasticsearch-logging created
clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging created
statefulset.apps/elasticsearch-logging created

创建 Kibana(企业内已有 ELK 平台可以不创建):

[root@k8s-master01 efk-7.10.2]#kubectl create -f kibana-deployment.yaml -f kibana-service.yaml
deployment.apps/kibana-logging created
service/kibana-logging created

由于在 Kubernetes 集群中,我们可能并不需要对所有的机器都采集日志,所以可以更改

Fluentd 的部署文件如下,添加一个 NodeSelector,只部署至需要采集的主机即可:

[root@k8s-master01 efk-7.10.2]#grep "nodeSelector" fluentd-es-ds.yaml -A 3
      nodeSelector:
        fluentd: "true"
      volumes:
      - name: varlog
# 不想用,也可以已注销掉。

之后给需要采集日志的节点打上一个标签,以 k8s-node01 为例:

[root@k8s-master01 efk-7.10.2]#kubectl label node k8s-node01 fluentd=true
node/k8s-node01 labeled

[root@k8s-master01 efk-7.10.2]#kubectl get node -l fluentd=true --show-labels
NAME         STATUS   ROLES    AGE    VERSION   LABELS
k8s-node01   Ready    <none>   252d   v1.28.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,fluentd=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,node.kubernetes.io/node=,region=chaoyang
[root@k8s-master01 efk-7.10.2]#

创建 Fluentd:

[root@k8s-master01 efk-7.10.2]#kubectl create -f fluentd-es-ds.yaml -f fluentd-es-configmap.yaml
serviceaccount/fluentd-es created
clusterrole.rbac.authorization.k8s.io/fluentd-es created
clusterrolebinding.rbac.authorization.k8s.io/fluentd-es created
daemonset.apps/fluentd-es-v3.1.1 created
configmap/fluentd-es-config-v0.2.1 created

Fluentd 的 ConfigMap 有个字段需要注意,在 fluentd-es-configmap.yaml 最后有一个

output.conf:

[root@k8s-master01 efk-7.10.2]#vim fluentd-es-configmap.yaml
......
  output.conf: |-
    <match **>
      @id elasticsearch
      @type elasticsearch
      @log_level info
      type_name _doc
      include_tag_key true
      host elasticsearch-logging
      port 9200
      logstash_format true

2. Kibana 使用

确认创建的 Pod 都已经成功启动:

[root@k8s-master01 efk-7.10.2]#kubectl get po -n logging
NAME                              READY   STATUS    RESTARTS   AGE
elasticsearch-logging-0           1/1     Running   0          12m
fluentd-es-v3.1.1-4bv7p           1/1     Running   0          2m50s
kibana-logging-5d7b68499c-v7c2t   1/1     Running   0          8m39s

接下来查看 Kibana 暴露的端口号,访问 Kibana:

[root@k8s-master01 efk-7.10.2]#kubectl get svc -n logging
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
elasticsearch-logging   ClusterIP   None            <none>        9200/TCP,9300/TCP   13m
kibana-logging          NodePort    10.96.144.216   <none>        5601:32297/TCP      9m1s

使用任意一个部署了 kube-proxy 服务的节点的 IP+32297 端口即可访问 Kibana:

地址:http://10.1.3.31:32297/kibana

点击 Explore on my own,之后再点击 Visualize

在这里插入图片描述
在这里插入图片描述

之后点击 Add your data → Create index pattern:

在这里插入图片描述

在这里插入图片描述

在 Index pattern name 输入索引名 logstash*,然后点击 Next Step:

在这里插入图片描述

再次选择 timestamp,即可创建索引:

在这里插入图片描述

之后点击菜单栏→Discover 即可看到相关日志:

在这里插入图片描述

在这里插入图片描述

核对日志:

[root@k8s-master01 efk-7.10.2]#kubectl get po -n kube-system -owide | grep node01
calico-node-lpwdc                          1/1     Running   2 (146d ago)   251d   10.1.3.34        k8s-node01     <none>           <none>
[root@k8s-master01 efk-7.10.2]#kubectl logs calico-node-lpwdc -n kube-system --tail 5

详细用法需要练习,比如已命名空间查询等。


三、使用 Filebeat 收集自定义文件日志

1. 创建 Kafka 和 Logstash

首先需要部署 Kafka 和 Logstash 至 Kubernetes 集群,如果企业内已经有比较成熟的技术栈,

可以无需部署,直接将 Filebeat 的输出指向外部 Kafka 集群即可:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_Jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值