本节介绍如何为 Kubernetes 原生事件和 Kubernetes/KubeSphere 审计事件定义告警规则。

前提条件

  • 您需要在 KubeSphere 企业版平台具有 platform-admin 角色。

  • KubeSphere 企业版平台需要安装并启用 WhizardTelemetry 事件告警扩展组件。

操作步骤

  1. 在任意集群节点上,创建一个 yaml 文件,为该集群定义事件和审计的告警规则。

    点击此处查看完整的告警规则示例。简单示例如下:

    1. apiVersion: logging.whizard.io/v1alpha1
    2. kind: ClusterRuleGroup
    3. metadata:
    4. name: example-auditing-rule
    5. namespace: kubesphere-logging-system
    6. spec:
    7. type: auditing
    8. rules:
    9. - desc: all action not need to be audit
    10. expr:
    11. kind: list
    12. list:
    13. - get
    14. - list
    15. - watch
    16. name: ignore-action
    17. - desc: all operator need to be audit
    18. expr:
    19. kind: list
    20. list:
    21. - create
    22. - delete
    23. - update
    24. - patch
    25. name: action
    26. - desc: pod
    27. expr:
    28. kind: macro
    29. macro: ObjectRef.Resource="pods"
    30. name: pod
    31. - desc: service
    32. expr:
    33. kind: macro
    34. macro: ObjectRef.Resource="services"
    35. name: service
    36. - desc: the alias of the user related to audit event
    37. expr:
    38. alias: User.username
    39. kind: alias
    40. name: user

    告警规则目前支持两种类型:审计和事件。在 spec.type 下配置不同类型的告警规则,如 type: auditingtype: events

    告警规则的设置项如下:

    参数描述

    name

    规则名称。

    desc

    规则描述。

    expr.kind

    规则类型,取值可以为 rule, macro, list, 或 alias

    expr.condition

    日志的过滤表达式,以检查日志是否与规则匹配。可使用比较运算符(=,!=,<,⇐,>,>=,contains,in,like,regexp)、布尔运算符(and,or 和 not)以及括号进行组合。

    expr.macro

    macro 的条件。

    expr.list

    list 的值。

    expr.alias

    alias 的值。

    enable

    如果为 false,规则将不生效。

    alerts.output

    指定在匹配事件发生时输出的消息。

    alerts.annotations

    规则的注解,包含在匹配事件发生时输出的告警消息。

    alerts.annotations.summary

    指定在匹配事件发生时输出的摘要消息。

    alerts.annotations.summaryCn

    指定在匹配事件发生时输出的中文摘要消息。

    alerts.severity

    规则的告警级别,取值可以为 INFO、WARNING、ERROR、或 CRITICAL。

    Macro

    宏(Macro)是规则条件片段,可以在规则内部甚至其他宏中重复使用。宏提供了一种命名常见模式和消除规则冗余的方法。以下是一个宏的示例:

    1. apiVersion: logging.whizard.io/v1alpha1
    2. kind: ClusterRuleGroup
    3. metadata:
    4. name: macro-rule
    5. spec:
    6. type: auditing
    7. rules:
    8. - desc: pod
    9. expr:
    10. kind: macro
    11. macro: ObjectRef.Resource="pods"
    12. name: pod
    说明

    宏可以在规则或其他宏中使用,例如 ${pod}${alerting-rule.pod} 。这两种方法的区别在于 ${pod} 只能用于 alerting-rule,而 ${alerting-rule.pod} 可以用于所有实例。宏也可用于 list 和 alias。

    list

    列表(List)是可以包含在规则、宏或其他列表中的项目集合。与规则和宏不同,列表不能被解析为过滤表达式。以下是一个列表的示例:

    1. apiVersion: logging.whizard.io/v1alpha1
    2. kind: ClusterRuleGroup
    3. metadata:
    4. name: list-rule
    5. spec:
    6. type: alerting
    7. rules:
    8. - desc: all action not need to be audit
    9. expr:
    10. kind: list
    11. list:
    12. - get
    13. - list
    14. - watch
    15. name: ignore-action

    Alias

    别名(Alias)是过滤字段的缩写名称,它可以包含在规则、宏、列表和输出字符串中。以下是一个别名的示例:

    1. apiVersion: logging.whizard.io/v1alpha1
    2. kind: ClusterRuleGroup
    3. metadata:
    4. name: alias-rule
    5. spec:
    6. type: alerting
    7. rules:
    8. - desc: the alias of the user related to audit event
    9. expr:
    10. alias: User.username
    11. kind: alias
    12. name: user
  2. 执行以下命令,创建 CRD(定制资源定义)。

    1. kubectl apply -f xxx.yaml # 注意替换 yaml 文件的名称
  3. 运行成功后,在集群管理 > 定制资源定义页面搜索 ClusterRuleGroup

  4. 点击 ClusterRuleGroup 进入详情页,在右侧页面查看、编辑或删除告警规则。