OpenFunction 应用系列之一: 以 Serverless 的方式实现 Kubernetes 日志告警

2023年 7月 9日 33.8k 0

概述

当我们将容器的日志收集到消息服务器之后,我们该如何处理这些日志?部署一个专用的日志处理工作负载可能会耗费多余的成本,而当日志体量骤增、骤降时亦难以评估日志处理工作负载的待机数量。本文提供了一种基于 Serverless 的日志处理思路,可以在降低该任务链路成本的同时提高其灵活性。

我们的大体设计是使用 Kafka 服务器作为日志的接收器,之后以输入 Kafka 服务器的日志作为事件,驱动 Serverless 工作负载对日志进行处理。据此的大致步骤为:

  • 搭建 Kafka 服务器作为 Kubernetes 集群的日志接收器
  • 部署 OpenFunction 为日志处理工作负载提供 Serverless 能力
  • 编写日志处理函数,抓取特定的日志生成告警消息
  • 配置 Notification Manager 将告警发送至 Slack
  • 在这个场景中,我们会利用到 OpenFunction 带来的 Serverless 能力。

    OpenFunction 是 KubeSphere 社区开源的一个 FaaS(Serverless)项目,旨在让用户专注于他们的业务逻辑,而不必关心底层运行环境和基础设施。该项目当前具备以下关键能力:

    • 支持通过 dockerfile 或 buildpacks 方式构建 OCI 镜像
    • 支持使用 Knative Serving 或 OpenFunctionAsync ( KEDA + Dapr ) 作为 runtime 运行 Serverless 工作负载
    • 自带事件驱动框架

    使用 Kafka 作为日志接收器

    首先,我们为 KubeSphere 平台开启 logging 组件(可以参考 启用可插拔组件 获取更多信息)。然后我们使用 strimzi-kafka-operator 搭建一个最小化的 Kafka 服务器。

  • 在 default 命名空间中安装 strimzi-kafka-operator :

    helm repo add strimzi https://strimzi.io/charts/
    helm install kafka-operator -n default strimzi/strimzi-kafka-operator
    
  • 运行以下命令在 default 命名空间中创建 Kafka 集群和 Kafka 主题,该命令所创建的 Kafka 和 Zookeeper 集群的存储类型为 ephemeral,使用 emptyDir 进行演示。

    注意,我们此时创建了一个名为 “logs” 的 topic,后续会用到它

    cat

  • 相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论