Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

36.5.5. Curator

借助 Curator,管理员可以配置调度的 Elasticsearch 维护操作,从而基于每个项目自动执行。它被调度为每天根据其配置执行操作。建议每个 Elasticsearch 集群仅使用一个 Curator Pod。Curator Pod 仅在 cronjob 中声明的时间运行,然后 Pod 在完成后终止。Curator 通过 YAML 配置文件配置,结构如下:

注意

时区是根据运行 curator Pod 的主机节点设置的。

$PROJECT_NAME:
  $ACTION:
    $UNIT: $VALUE

$PROJECT_NAME:
  $ACTION:
    $UNIT: $VALUE
 ...

可用的参数如下:

变量名称描述

PROJECT_NAME

项目的实际名称,例如 myapp-devel。对于 OpenShift Container Platform operations 日志,请使用 .operations 作为项目名称。

操作

当前只支持 delete

UNIT

一整 几个月

VALUE

单元数的整数。

.defaults

使用 .defaults 作为 $PROJECT_NAME,以设置未指定的项目的默认值。

.regex

与项目名称匹配的正则表达式列表。

pattern

有效且正确转义的正则表达式,用单引号括起。

例如,要将 Curator 配置为:

  • 删除 myapp-dev 项目中存在时间超过 1 天的索引
  • 删除 myapp-qe 项目中存在时间超过 1 个星期的索引
  • 删除存在时间超过 8 个星期operations日志
  • 删除所有其他项目中存在时间超过 31 天的索引
  • 删除与 '^project\..+\-dev.*$' regex 匹配的,早于 1 天的索引
  • 删除与 '^project\..+\-test.*$' regex 匹配的,早于 2 天的索引

使用:

config.yaml: |
  myapp-dev:
    delete:
      days: 1

  myapp-qe:
    delete:
      weeks: 1

  .operations:
    delete:
      weeks: 8

  .defaults:
    delete:
      days: 31

  .regex:
    - pattern: '^project\..+\-dev\..*$'
      delete:
        days: 1
    - pattern: '^project\..+\-test\..*$'
      delete:
        days: 2
重要

当您将 months 用作操作的 $UNIT 时,Curator 会从当月的第一天开始计算,而不是当月的当天。例如,如果今天是 4 月 15 日,并且您想要删除今天超过 2 个月的索引(delete: months:2),Curator 不会删除日期超过 2 月 15 的索引,它会删除早于 2 月 1 的索引。也就是说,它会退回到当前月份的第一天,然后从该日期起返回两个整月。如果您想对 Curator 准确,最好使用 days(例如 delete: days):30).

36.5.5.1. 使用 Curator Actions 文件

设置 OpenShift Container Platform 自定义配置文件格式可确保内部索引不会被错误地删除。

要使用 操作文件,请在 Curator 配置中添加 exclude 规则来保留这些索引。您必须手动添加所有所需模式。

actions.yaml: |
actions:

    action: delete_indices
    description: be careful!
    filters:
    - exclude: false
      kind: regex
      filtertype: pattern
      value: '^project\.myapp\..*$'
    - direction: older
      filtertype: age
      source: name
      timestring: '%Y.%m.%d'
      unit_count: 7
      unit: days
    options:
      continue_if_exception: false
      timeout_override: '300'
      ignore_empty_list: true

    action: delete_indices
    description: be careful!
    filters:
    - exclude: false
      kind: regex
      filtertype: pattern
      value: '^\.operations\..*$'
    - direction: older
      filtertype: age
      source: name
      timestring: '%Y.%m.%d'
      unit_count: 56
      unit: days
    options:
      continue_if_exception: false
      timeout_override: '300'
      ignore_empty_list: true

    action: delete_indices
    description: be careful!
    filters:
    - exclude: true
      kind: regex
      filtertype: pattern
      value: '^project\.myapp\..*$|^\.operations\..*$|^\.searchguard\..*$|^\.kibana$'
    - direction: older
      filtertype: age
      source: name
      timestring: '%Y.%m.%d'
      unit_count: 30
      unit: days
    options:
      continue_if_exception: false
      timeout_override: '300'
      ignore_empty_list: true