当前位置: 首页 > article >正文

三十二、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 集群即可:


http://www.kler.cn/a/570315.html

相关文章:

  • 2月28日,三极管测量,水利-51单片机
  • C# 数据转换
  • 【easy视频 | day03】客户端获取视频分类 + 上传投稿
  • LeetCode 热题 100_最小栈(70_155_中等_C++)(栈)(辅助栈)(栈中的push和emplace对比)
  • 讲一下Spark的shuffle过程
  • 最节省成本的架构方案:无服务器架构
  • Redis存储⑮Redis的应用_分布式锁_Lua脚本/Redlock算法
  • 【FPGA】——verilog实现四位全加器和三八译码器
  • 使用shell脚本读elasticsearch,写msyql
  • 系统架构设计师—计算机基础篇—计算机网络
  • 对比 ThinkPHP 中间件 和 Java AOP
  • 《论云原生架构及其应用》审题技巧 - 系统架构设计师
  • Django 5实用指南(十三)安全性与防护
  • 字符串--子串匹配
  • 【Linux学习笔记】Linux基本指令及其发展史分析
  • 人工智能大模型在物联网应用层上的应用
  • MCP与RAG:增强大型语言模型的两种路径
  • 【星云 Orbit • STM32F4】04.一触即发:GPIO 外部中断
  • 网络问题排查基本命令
  • Android Studio 新版本Gradle通过JitPack发布Maven仓库示例