Kubernetes 监控和日志收集实践

面试官:小伙子,你的代码为什么这么丝滑?

简介

在现代容器化应用中,Kubernetes 已经成为了主流的部署和管理平台。然而,在 Kubernetes 中,监控和日志管理仍然是被广泛讨论和关注的热点话题。如何设置和优化监控和日志收集已经成为了前端开发人员和 DevOps 工程师的必备技能。本文将深入探讨在 Kubernetes 中如何实现优化监控和日志收集的方案。

监控

Kubernetes 应用程序监控的基本原则是收集指标,可视化指标,然后通过控制台查看指标。指标可以是服务器、容器、应用程序或 Kubernetes 自身的指标。以下是一些选择监控解决方案所需考虑的因素:

  • 测量项目-每个监控解决方案都不同
  • 稳定性-它是否能够处理 Kubernetes API 的快速更改
  • 巨大规模-如何减少大规模数据的指标
  • 可视化-是否需要直观的仪表板
  • 安全性-在 IOT 和云中是否安全

Prometheus

Prometheus 是整个 Kubernetes 集群监控和警报系统解决方案。Prometheus 是一个开源的系统,由 SoundCloud 创建。 它利用 HTTP 抓取器和自定义解析器来收集时间序列数据,并提供 HTTP API 与其存储的数据进行查询。Prometheus 具有以下特点:

  • PromQL:Prometheus 查询语言,可用于定期描述数据。
  • 高维度数据:Prometheus 认为度量标准是标签,而不是名称。 例如,一个容器由四个标签识别,即:镜像,名称,命名空间和 Pod 的 UID。
  • 时间序列聚合:Prometheus 支持函数,例如拆分(sum,avg),标准差或百分位数。
  • 灵活的警报逻辑:Prometheus 警报能够使用任意表达语言的任意条件逻辑(组成为称为 Record表达式)来静态地定义警报。

部署

在 Kubernetes 中使用 Prometheus,我们需要安装和配置 Prometheus Operator。 我们可以使用官方库中的 GrafanaDashboards 命名空间和 Operator 创建我们自己的配置。 在下面的命令中,我们将使用默认的 Prometheus Operator 模板。

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

注意,此命令使用 HelmCharts 安装 Prometheus Operator。为了简化此示例,我将开放此 Prometheus Operator 服务端口。

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

运行上述命令后,我们应该看到此类似的输出:

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

我们可以看到 Prometheus 是使用 http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 部署的。访问此 URL,我们将获得 Prometheus 管理界面。

增加监控

我们应该考虑将指标设置为 Prometheus。 这可能是由 Kubernetes 集群提供的,也可能是由应用程序提供的。

  1. 添加 Kubernetes 集群的指标

    集群的指标是由 prometheus-operator-controller 创建的 ServiceMonitors 控制的。 这样就能从 Kubernetes 提供的指标中设置监控。 例如,如果希望收集节点 CPU 和内存使用情况的指标,则需要创建以下存储:

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

    这些指标现在是使用标准 Kubernetes labels 在 Prometheus 中公开的。

  2. 添加应用能力的指标

    应用程序指标是使用 Prometheus 客户端公开的。 如果需要在容器映像中包含 Prometheus 客户端,则可以使用以下 Dockerfile:

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

    它要求将 prometheus-node-exporter 应用程序安装在容器中,并通过 EXPOSE 暴露 9100 端口。

  3. 将指标发布到 Prometheus 中

    稍后,将需要注意如何公开指标。 最基本的方法是使用 KubernetesPod 直接在 YAML 文件中。 这是一个例子:

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

    “args”,“image”和“name”是常规的 Kubernetes 容器属性。 然而,这里的重点是红色字体的两行。 这将 prometheus 客户端与容器中的 metrics 端口联系起来。

Grafana

Grafana 是一个可视化指标和日志的监控和度量平台。 安装步骤如下:

  1. 添加 apt-key

    - ---- -- -- - ------------------------------------ - ---- ------- --- -
  2. 添加 apt-get

    - ---- ---- ------------------------------------ ------ ----- - ---- --- -- ------------------------------------
  3. 更新 apt-get

    - ---- ------- ------
  4. 安装

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

    安装成功后,可以通过 http://localhost:3000 访问。

部署 Grafana 和 Prometheus

第一步是将 Prometheus 的输出链接到 Grafana。 为此,我们需要在 Grafana 中添加 Prometheus 数据源。

  1. 登录到 Grafana

    使用默认凭据 admin/admin 访问。

  2. 创建数据源

    单击加号图标以打开新数据源菜单。

    在远程写入允许的项中,选择 HTTP。

    完成所有必需的值。 需要注意的是,它是为部署 Prometheus 的 Kubernetes 集群而设计的,本地部署需要指定 Prometheus 的地址。

  3. 创建面板

    单击加号图标以打开面板创作工具。

    添加一个面板。

    单击添加 Panel +,然后单击添加 Query。

  4. 添加查询

    在左侧面板菜单中选择一个新图形。

    单击添加查询,并使用 Prometheus 创建查询。

  5. 使用图表进行监控

    在初始化查询的基础上,Grafana 允许在 DataFrame 中添加新查询。 这可以方便地添加新图表,添加样式并自动化小部件在布局中的位置。

日志收集

在容器化环境中,协调日志变得更加困难,因为容器通常不会将日志写入本地磁盘。 而是将其保留在容器的内存或文件系统中。 只有在容器被销毁或重新启动时才会丢失该日志。 为了解决这个问题,需要一个日志收集器以收集所有容器日志并将其转发到供您选择的平台或存储库中。

Fluentd

Fluentd 是一种开源日志传输工具,可用于日志收集和聚合。 它可以从许多数据源收集数据,包括日志文件,消息队列和数据库。 Fluentd 包括数百个输入和输出插件,可以从各种来源和到各种目标转换数据。 它是 kubespray 支持的最受欢迎的日志收集器之一。

部署

在 Kubernetes 中部署 Fluentd,我们可以使用 fluentd-daemonset。 然后在下面的 YAML 文件中定义强制性 Fluentd 配置:

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

从 Fluentd 收集

在 Fluentd 中,可以使用输入插件来配置要收集日志的来源。 目前支持除 KubernetesPods 外的三种输入插件类型:Tail、Forward 和 HTTP。 下面是 Tail 插件示例:

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

在上面的配置中:

  • “@type”:是必需的字段类型。 在此示例中,我们使用 fluentd 的 Tail 插件。
  • “path”:是日志文件的路径名称。
  • “pos_file”:是指向保存文件中的文件位置信息的文件的路径名称。
  • “tag”:这是用于标记日志条目的字段名称。
  • “read_from_head”:此字段告诉 Fluentd 直接读取日志文件的新行。
  • “format”:此字段是指定数据的格式。 在此示例中,我们使用 JSON 格式。
  • “keep_time_key”:将 Fluentd 的时间信息与站点日志指定的时间键相关联。
  • “time_key_format”:这种格式的时间键。

Elasticsearch and Kibana

Elasticsearch 是一个开源的分布式搜索引擎,可以在大量数据的快速排序和分析方面的能力广泛应用于日志和指标分析。 官方提供的 Kibana 工具是一个 Web 应用程序,它通过 Elasticsearch 创建数据可视化和仪表板,并基于 Elasticsearch 中的检索操作提供搜索能力。

部署 Elasticsearch 和 Kibana

在 Kubernetes 中部署 Elasticsearch 和 Kibana,我们可以使用位于官方 Elastic Github 存储库中的部署 YAML 文件。 要开始,我们需要在 Kubernetes 中部署两个容器(Elasticsearch 和 Kibana)以从 Fluentd 中接收日志。 部署可以完成这项工作。

在 Elastic 示例中,我们的 Kibana 部署会话存储在 kibana.yml 中。 我们需要将 Fluentd 容器的 ELASTICSEARCH_HOST 和 ELASTICSEARCH_PORT 环境变量设置为 kibana Elasticsearch 容器的 IP 和 HTTP 端口。

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

最佳实践

  • 高负载应用程序必须及时监视,有利于诊断任何关键问题。
  • 应尽可能自动化操作,使其易于操作 Kubernetes 实例。
  • 将 Fluentd 日志汇聚到 Elasticsearch,并使用 Kibana 搭建实时监测平台。
  • 对于 Prometheus 数据库,必须考虑在使用过程中保持数据准确性。
  • 尽可能使用定义良好的标签,便于在监控和日志收集方案中定位已部署应用程序的容器。
  • 记得定期维护和更新指标,以确保旧指标没有抛出警告。

结论

Kubernetes 监控和日志收集是一个复杂的过程,需要多方面考虑。 但是,掌握它是前端开发人员和 DevOps 工程师的必备技能之一。 正确地监控和收集应用程序和容器日志可以确保 Web 应用程序在高负载下执行良好,并可以快速诊断任何关键问题。 最后,强烈建议任何专业的 Kubernetes 前端开发人员和 DevOps 工程师在实施监视和日志收集解决方案前充分评估它们的制约因素,以免引入新的问题。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67071948d91dce0dc864e6c4


猜你喜欢

  • 如何用 CSS Flexbox 布局实现响应式三栏布局

    在响应式设计中,布局的灵活性是至关重要的。CSS Flexbox 布局是一种强大的工具,可以使我们轻松创建复杂的布局。在本文中,我们将探讨如何使用 CSS Flexbox 布局实现响应式三栏布局。

    11 天前
  • Next.js 的性能分析工具使用方法

    在前端开发中,性能优化是非常重要的一个环节。有了良好的性能,网站的用户体验才能够得到保障。对于使用 React 开发的 Next.js 应用来说,性能优化工具是必不可少的。

    11 天前
  • Headless CMS 如何处理多级菜单?

    在现代网站中,多级菜单是非常常见的。然而,对于Headless CMS,如何处理多级菜单并不是那么容易。在本文中,我们将介绍一些处理多级菜单的方法,并为您提供一些示例代码。

    11 天前
  • 小心使用 RxJS 创建,不允许爬虫

    你是否正在开发一个前端应用或网站,并且需要使用 RxJS 来创建响应式数据流?如果是的话,那么你需要小心使用 RxJS,以免被爬虫利用而导致泄露数据或安全问题。 什么是 RxJS? RxJS 是一个强...

    11 天前
  • 如何让 Web Components 更容易调试?

    Web Components 是一种抽象概念,它使得我们可以创造出可重用的自定义元素。Web Components 由三个技术组合而成:Custom Elements、Shadow DOM 和 HTM...

    11 天前
  • 如何在 SASS 中合并 CSS 属性

    如何在 SASS 中合并 CSS 属性 CSS 属性可以被组合成一个。在 Sass 中,支持类似“mixins” 的功能,这些 mixins 可以简化复杂的样式表并提高代码的可复用性。

    11 天前
  • Fastify 安全指南:如何防止 XSS 攻击

    随着前端技术的快速发展,前端开发变得越来越复杂。在Web应用程序中,安全是一个非常重要的问题,特别是在处理用户输入的数据时。本指南将详细介绍如何在Fastify中防止跨站脚本(XSS)攻击。

    11 天前
  • GraphQL 开发中的最佳实践

    GraphQL 是一种用于 API 开发和数据处理的技术方案,它具有强大而灵活的数据获取和查询功能,可以优化前端应用程序的性能和数据交互。在 GraphQL 开发中,有一些最佳实践可以帮助我们利用它的...

    11 天前
  • Server-Sent Events 实现购物车实时更新的技术方案

    在 Web 应用程序中,实时更新是非常重要的,特别是当涉及到购物车的时候。购物车是电子商务网站中不可或缺的一项功能,因为它允许用户在其选购商品时进行即时调整,并且随时查看其的购物车中的商品详情和总价。

    11 天前
  • 使用 Mocha + Chai + Sinon.js 测试 Node.js 中的网络请求

    在前端开发中,网络请求的测试是非常重要的一项工作。但是如何进行网络请求的测试呢?今天我们来介绍一种利用 Mocha + Chai + Sinon.js 对 Node.js 中的网络请求进行测试的方法。

    11 天前
  • Chai:如何使用 Ecmascript 6 测试代码?

    Chai:如何使用 Ecmascript 6 测试代码? 在前端开发中,测试是不可或缺的一部分。它有助于确保代码质量,减少模块之间的依赖性,以及在改动代码时迅速发现潜在的缺陷。

    11 天前
  • 在 Android 应用程序的 RecyclerView 中添加选择模式:使用 Material Design

    在开发 Android 应用程序时,我们通常需要为用户提供一种选择多个项目的功能,如删除多个文件或选择要分享的多个照片。 在这种情况下,RecyclerView 显示出其强大的功能,因为它提供了一些用...

    11 天前
  • 无障碍技术在 3D 打印中的应用

    3D 打印技术已经成为了现代工业中不可或缺的一部分,但在这个领域也存在一些无障碍性问题。例如,对于视觉受限的人员来说,无法通过视觉来感知并操作 3D 打印机,这就限制了他们参与这个领域的机会。

    11 天前
  • Vue.js 中实现全局 axios 拦截及错误处理

    Vue.js 是一种流行的 JavaScript 框架,它可以通过轻松构建高度响应式的应用程序来提高开发效率。对于与后端交互的应用程序,我们通常使用 axios 实现数据请求。

    11 天前
  • Tailwind CSS 下的媒体查询响应式设计探究

    在现代Web开发中, 响应式设计已经成一种标配。在实现响应式设计时,媒体查询是一个非常重要的工具,借助于媒体查询,我们可以根据设备的不同分辨率或特性来为不同的设备提供不同的CSS样式。

    11 天前
  • 使用 ES10 AsyncGenerator 解决异步调用栈溢出问题

    随着 JavaScript 应用的日益复杂和数据规模的增加,异步调用成为了在前端开发中必须面对的问题。然而,异步调用往往会导致调用栈过深,进而导致性能和可维护性的问题。

    11 天前
  • 如何处理 Web Components 中的类名混淆问题?

    Web Components 是 Web 上的一项新技术,其目的是将 UI 组件封装成独立的、可重用的模块,方便开发者使用和维护。Web Components 最重要的技术之一是 Shadow DOM...

    11 天前
  • Node.js 中集成 Log4js 进行日志管理

    在 Node.js 开发应用程序时,日志管理是一个非常重要的任务。随着应用程序变得越来越复杂,处理日志变得越来越繁琐,我们需要一个好的工具来处理这个问题。Log4js 是一个流行的 Node.js 日...

    11 天前
  • 封装 GraphQL API 调用方法实现更高效率

    GraphQL 是一种 API 查询语言,它能够让我们更加灵活地请求数据,从而提高了 Web 应用程序的开发效率。然而,当需要频繁地发出 GraphQL API 请求时,手动封装每个请求将会变得极其冗...

    11 天前
  • Mocha + Chai + Axe:使用自动化测试工具检测网站无障碍性

    前言 随着互联网的不断发展,越来越多的人通过网络获取信息、娱乐、学习等服务,这其中不乏有视障人士、听障人士、运动障碍人士、老年人等特殊群体。为了确保这些人员能够顺畅地使用网站,我们需要考虑网站的无障碍...

    11 天前

相关推荐

    暂无文章