在 Kubernetes 上部署 EFK 日志收集系统

阅读时长 9 分钟读完

前言

EFK 日志收集系统是指使用 Elasticsearch、Fluentd、Kibana 三个开源工具组合而成的系统,用于采集和分析应用程序的日志数据。这个系统非常适合在 Kubernetes 集群中部署,因为 Kubernetes 本身就是一个分布式系统,并且部署 EFK 日志收集系统可以帮助开发者更好地了解应用程序的运行情况,快速定位问题。

本文将详细介绍如何在 Kubernetes 上部署 EFK 日志收集系统,包括如何安装和配置 Elasticsearch、Fluentd、Kibana,并提供示例代码以供读者参考。

配置 Elasticsearch

Elasticsearch 是一个基于 Lucene 的搜索引擎,用于存储和查询日志数据。在 Kubernetes 上部署 Elasticsearch 可以使用官方提供的 Helm 工具。下面是部署 Elasticsearch 的示例代码:

-- -------------------- ---- -------
---- ------- ------------- --------------------- -
    ----- -------------------------------------------------------------- -
    ----- ---------- -
    ----- ---------------------------- -
    ----- ----------------------------- -
    ----- -------------------------- -
    ----- --------------------------- -
    ----- ---------------------------------- ------ ------- -
    ----- ------------------------- -
    ----- ---------------------- -
    ----- ----------------- -
    --------- -----------------------

在上述代码中,我们使用了 helm install 命令来安装 Elasticsearch,并通过 --set 参数来指定一系列配置参数,包括存储类型、副本数量、资源需求、集群名称、服务类型和端口号等。下面是一些可以配置的参数列表:

  • volumeClaimTemplate.storageClassName: 存储类型名称
  • replicas: 副本数量
  • resources.requests.cpu: 分配的 CPU 量
  • resources.requests.memory: 分配的内存量
  • resources.limits.cpu: 最大 CPU 量
  • resources.limits.memory: 最大内存量
  • esJavaOpts: Elasticsearch 的 JVM 参数
  • clusterName: Elasticsearch 集群名称
  • service.type: 服务类型
  • service.port: 服务使用的端口号
  • version: Elasticsearch 版本号

配置 Fluentd

Fluentd 是一个用于采集、转换和发送日志数据的开源工具,它可以将日志数据发送到 Elasticsearch 中进行储存和查询。在 Kubernetes 上部署 Fluentd 需要编写一个 YAML 文件,并通过 kubectl 命令进行部署。下面是部署 Fluentd 的示例代码:

-- -------------------- ---- -------
----------- --
----- ---------
---------
  ----- --------------
  ---------- ----------------
-----
  ------------ -
    --------
      ----- ----
      ---- -----------------
      -------- ---------------------------
      ------ ----
      --- --------
      -------------- ----
    ---------

    ------ ----------
      ----- -------------
      ----- ---------------------------------------------------
      ---- -----------------------------
      -------- -----------------------------
      --------------- ----
      ------- ---------
      -------------- --
    --------
---
----------- -------
----- ---------
---------
  ----- -------
-----
  ---------
    ------------
      ---- -------
  ---------
    ---------
      -------
        ---- -------
    -----
      -----------
        - ----- -------
          ------ ---------------------------------
          ----
            - ----- -------------------------
              ------ -------------------------
            - ----- -------------------------
              ------ ---------------------------
            - ----- -------------------------
              ------ -----------------------------
            - ----- -----------------------------
              ------ -----------------------------
          -------------
            - ----- -------------
              ---------- -------------
      --------
        - ----- -------------
          ----------
            ----- --------------

在上述代码中,我们创建了一个 ConfigMap 对象 fluentd-config,并将 Fluentd 的配置文件 fluent.conf 保存在其中。同时,我们创建了一个 DaemonSet 对象 fluentd,将容器镜像设置为 Fluentd 的官方镜像 fluent/fluentd:v1.10.4-debian-1.0,并从 ConfigMap 中挂载了配置文件。

Fluentd 配置文件 fluent.conf 中包含了两个部分:一个是输入部分 <source>,用于从日志文件中读取数据;另一个是输出部分 <match>,用于将数据发送到 Elasticsearch 中。在 <source> 部分中,我们指定了要采集的日志文件的路径、格式和标签;在 <match> 部分中,我们指定了发送到 Elasticsearch 的地址和用户认证信息。

配置 Kibana

Kibana 是一个基于 Web 的用户界面,用于查询和可视化 Elasticsearch 中的数据。在 Kubernetes 上部署 Kibana 需要编写一个 YAML 文件,并通过 kubectl 命令进行部署。下面是部署 Kibana 的示例代码:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- ------
  ---------- ----------------
  -------
    ---- ------
-----
  --------- -
  ---------
    ------------
      ---- ------
  ---------
    ---------
      -------
        ---- ------
    -----
      -----------
      - ----- ------
        ------ -----------------------
        ----
          - ----- -----------------
            ------ ----------------------------------------------------------
          - ----- ----------------------
            ----------
              -------------
                ----- --------------------
                ---- --------
        ------
        - -------------- ----

在上述代码中,我们创建了一个 Deployment 对象 kibana,将容器镜像设置为 Kibana 的官方镜像,并指定了 Elasticsearch 的地址和认证信息。我们还在 env 中将 Elasticsearch 的密码从 Kubernetes 的 Secret 中引入,并在 ports 中指定了 Kibana 的使用端口号。

总结

通过本文的介绍,我们了解了如何在 Kubernetes 上部署 EFK 日志收集系统,并详细介绍了如何配置 Elasticsearch、Fluentd 和 Kibana。在实际使用过程中,我们还可以根据需要进行一些修改和调整,例如更改存储类型、增加副本数量、更改日志文件路径等。希望本文对读者能够有一定的学习和指导意义。

参考资料

  1. Elastic Stack on Kubernetes - https://www.elastic.co/guide/en/cloud-on-k8s/current/index.html
  2. Fluentd documentation - https://docs.fluentd.org/
  3. Kibana User Guide - https://www.elastic.co/guide/en/kibana/current/index.html

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e94a9df6b2d6eab349f70b

纠错
反馈