
# 配置索引级监控
在维护大型OpenSearch集群时，运维人员常面临"集群整体资源（如CPU、内存）正常，但特定业务却出现读写延迟"的困境。由于传统的集群级监控仅反映平均水位，无法深入颗粒度精准定位是哪个索引成为了性能瓶颈，导致故障排查耗时费力。为此，CSS服务提供了精细化的索引级监控功能，通过自动采集每个索引的实时读写流量、延迟及存储变化趋势，并结合预置的OpenSearch Dashboards仪表盘进行可视化展示，帮助用户在无需编写复杂脚本的情况下，迅速锁定异常索引，从而进行针对性的性能优化或资源调整，保障业务稳定运行。
#### 功能介绍
索引监控用于实时监控OpenSearch集群中各个索引的状态和性能，帮助运维人员及时发现和解决问题。索引监控的运作原理：
1. 采集：后台任务定期（默认10秒，可配置）抓取目标索引的stats信息（如文档数量、存储大小、分片状态等）。
2. 存储：采集的数据被写入名为"monitoring-eye-css-\[yyyy-mm-dd\]"的专用监控索引中。
3. 展示：OpenSearch Dashboards读取监控索引数据，通过预置Dashboard或自定义Visualizations实现数据可视化，支持时间序列分析、趋势对比、异常检测等。
 
#### 约束限制
- 仅当OpenSearch集群版本号为2.19.0或3.4.0（镜像版本不低于3.4.0_26.6.0_xxx）时，才支持索引监控功能。
- 请勿创建以"monitoring-eye-css-\*"开头的业务索引，否则可能干扰监控数据采集逻辑。
- 禁止删除"monitoring-eye-css-\[yyyy-mm-dd\]"索引及其关联的Index Pattern，否则监控图表将因数据缺失而显示异常。
 
#### 登录OpenSearch Dashboards
登录OpenSearch Dashboards进入命令执行页面。OpenSearch集群支持多种客户端访问，本文仅以CSS服务集成的OpenSearch Dashboards为例介绍配置指导。
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，选择目标集群，单击操作列的"Dashboards"，登录OpenSearch Dashboards。
4. 在OpenSearch Dashboards左侧导航栏选择"Dev Tools"，进入操作页面。 控制台左侧是命令输入框，其右侧的三角形图标为执行按钮，右侧区域则显示执行结果。
   
 
#### 开启索引监控
- 执行如下命令，开启所有索引的监控，以全面监控集群状态。
  ```
  PUT _cluster/settings
  {
    "persistent": {
      "css.monitoring.index.enabled": "true"
    }
  }
  ```
  
- 执行如下命令，开启核心业务索引的监控，以确保关键业务的性能和稳定性。
  ```
  PUT _cluster/settings
  {
    "persistent": {
      "css.monitoring.index.enabled": "true",
      "css.monitoring.index.interval": "30s",
      "css.monitoring.index.indices": ["index_name"],
      "css.monitoring.history.duration": "3d"
    }
  }
  ```
  
表1开启索引监控的参数说明 
| 参数                              | 类型      | 默认值          | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| css.monitoring.index.enabled    | Boolean | false        | 索引监控的功能开关。 取值范围： - true：开启索引监控功能。  - false：关闭索引监控功能。                                                                                                                                                                                                                               |
| css.monitoring.index.indices    | String  | \*（表示监控所有索引） | 索引监控的目标范围。指定监控的索引名称。 - 单个索引：直接输入索引名称（如"my_index"）。  - 多个索引：用英文逗号分隔多个索引（如"my_index1,my_index2"）。  - 通配符：支持通配符 \*（匹配任意字符），如"myindex\*"表示匹配所有以myindex开头的索引。   默认监控所有索引。如果索引数量大，建议仅监控核心业务索引以降低负载。       |
| css.monitoring.index.interval   | Time    | 10s          | 索引监控的采集频率，即采集索引监控数据的时间间隔。 取值格式：数字+单位 - 数字：自然数  - 单位：nanos(纳秒)、micros（微秒）、ms（毫秒）、s（秒）、m（分钟）、h（小时）、d（天）   最小值：1s 建议根据业务需求和集群负载调整采集频率，避免过高频率导致性能下降。                                                             |
| css.monitoring.history.duration | Time    | 7d           | 索引监控的数据保留时长，即"monitoring-eye-css-\[yyyy-mm-dd\]"监控索引的存储时长，过期后自动清理且数据不可恢复。 取值格式：数字+单位 - 数字：自然数  - 单位：nanos(纳秒)、micros（微秒）、ms（毫秒）、s（秒）、m（分钟）、h（小时）、d（天）   最小值：1d 建议根据业务需求和存储成本调整数据保留时长，避免过长保留时长导致存储成本增加。 |
   
#### 查看索引读写流量
当集群开启索引监控后，可以使用API查询索引的实时读写流量。
![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/caution_3.0-zh-cn.png)
系统索引（以"."开头的索引）通常包含内部管理和维护信息，因此不支持查看其读写流量，以保护系统安全。
- 执行如下命令，获取集群中所有索引的实时读写流量信息。
  ```
  GET /_cat/monitoring
  ```
  
- 执行如下命令，获取指定索引的实时读写流量信息。
  ```
  GET /_cat/monitoring/{index_name}
  ```
  
- 执行如下命令，获取指定时间段内索引的读写流量信息。
  ```
  GET _cat/monitoring?begin=1650099461000
  GET _cat/monitoring?begin=2022-04-16T08:57:41
  GET _cat/monitoring?begin=2022-04-16T08:57:41&end=2022-04-17T08:57:41
  ```
  
表2查看索引流量的参数说明 
| 参数         | 类型     | 默认值   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| index_name | String | 无     | 指定索引名称。 - 单个索引：直接输入索引名称（如"my_index"）。  - 多个索引：用英文逗号分隔多个索引（如"my_index1,my_index2"）。  - 通配符：支持通配符 \*（匹配任意字符），如"myindex\*"表示匹配所有以myindex开头的索引。   |
| begin      | String | 最近5分钟 | 指定监控的起始时间。 必须使用UTC时间。 取值格式： - 标准日期格式（yyyy-MM-dd或yyyy-MM-ddTHH:mm:ss）。  - 毫秒级时间戳。                                                                      |
| end        | String | 当前时间  | 指定监控的结束时间。 必须使用UTC时间。 取值格式： - 标准日期格式（yyyy-MM-dd或yyyy-MM-ddTHH:mm:ss）。  - 毫秒级时间戳。                                                                       |
   
返回示例：
```
index   begin               end                 status pri rep init unassign docs.count docs.deleted store.size pri.store.size delete.rate indexing.rate search.rate
test 2022-03-25T09:46:53.765Z 2022-03-25T09:51:43.767Z yellow  1   1  0    1     9         0      5.9kb        5.9kb         0/s           0/s         0/s
```
表3返回参数说明 
| 参数             | 说明                |
|:---|:---|
| index          | 索引名称。             |
| begin          | 监控数据的起始时间。        |
| end            | 监控数据的结束时间。        |
| status         | 监控时间间隔内的索引状态。     |
| pri            | 监控时间间隔内的索引的主分片数量。 |
| rep            | 监控时间间隔内的索引副本数量。   |
| init           | 监控时间间隔内的索引的初始化数量。 |
| unassign       | 监控时间间隔内的索引的未分配数量。 |
| docs.count     | 监控时间间隔内的文档数量。     |
| docs.deleted   | 监控时间间隔内的文档删除数量。   |
| store.size     | 监控时间间隔内存储的索引大小。   |
| pri.store.size | 监控时间间隔内的索引主分片的大小。 |
| delete.rate    | 监控时间间隔内的索引每秒删除数量。 |
| indexing.rate  | 监控时间间隔内的索引每秒写入数量。 |
| search.rate    | 监控时间间隔内的索引每秒查询数量。 |
   
#### 通过OpenSearch Dashboards图表可视化分析索引监控数据
使用OpenSearch Dashboards图表可更高效地进行时间序列分析、趋势对比、异常检测等索引监控数据分析，提升监控效率。
CSS服务的索引监控功能已预置了开箱即用的Dashboard，便于用户快速查看索引监控信息。同时，支持通过Visualizations工具自定义可视化图表。
- 通过**预置Dashboard** 查看索引监控
  1. 在OpenSearch Dashboards左侧导航栏选择"Dashboard"，打开Dashboard界面。
  
  2. 搜索并单击 "\[Monitoring\] Index monitoring Dashboard"，查看预置Dashboard图表。 图表展示了集群的每秒读写数量和每秒读写数量前10的索引情况。
     图1预置dashboard图表   
     ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002425782581.png "点击放大")
     表4预置图表说明 
     | 图表名称                                                              | 说明                             |
     |:---|:---|
     | \[monitoring\] markdown                                           | Markdown图表，简单说明dashboard表达的内容。 |
     | \[monitoring\] Indexing Rate (/s)                                 | 集群每秒写入文档数。                     |
     | \[monitoring\] Search Rate (/s)                                   | 集群每秒查询次数。                      |
     | \[monitoring\] indexing rate of index for top10                   | 每秒写入文档数最多的Top10索引。             |
     | \[monitoring\] search rate of index for top10                     | 每秒查询次数最多的Top10索引。              |
     | \[monitoring\] total docs count                                   | 集群总文档数量变化。                     |
     | \[monitoring\] total docs delete                                  | 集群总的删除文档数量变化。                  |
     | \[monitoring\] total store size in bytes                          | 集群总文档所占用的存储空间变化。               |
     | \[monitoring\] indices store_size for top10                       | 占用存储空间最多的Top10索引。              |
     | \[monitoring\] indices docs_count for top10                       | 文档数量最多的Top10索引。                |
     | \[monitoring\] indexing time in millis of index for top10(ms)     | 单位时间内文档写入时延最大的Top10索引（ms）。     |
     | \[monitoring\] search query time in millis of index for top10(ms) | 单位时间内索引查询时间最大的Top10索引（ms）。     |
     | \[monitoring\] segment count of index for top10                   | 索引Segment数量最多的Top10索引。         |
     | \[monitoring\] segment memory in bytes of index for top10         | 索引Segment占用堆内存最大的Top10索引。      |
        
     
   
- 通过**Visualizations自定义图表** 查看索引监控
  下面以文档数据为例介绍通过Visualizations工具自定义可视化图表查看文档数量变化趋势的操作步骤。
  1. 在OpenSearch Dashboards左侧导航栏选择"Visualize"，进入图形列表。
  
  2. 单击"Create visualization"，选择"TSVB" ，进入TSVB绘图页面。
  
  3. 设置图表参数，查看文档数量变化趋势。 如[图2]所示，在"Data"页签，配置参数。
     - "Aggregation"选择"Max"，"Field"选择"index_stats.primaries.docs.count"表示主分片的文档数量。
     
     - "Aggregation"选择"Derivative"表示聚合桶之间的差异，"Units"设置为"1s"表示使用每秒代替速率。
     
     - "Aggregation"选择"Positive Only"避免数字重置后出现负数。
     
     - 当需要区分不同索引的情况时，则将"Group by"设置为"Terms"，"By"设置为"index_stats.index"，最终得到的聚合结果将按照索引名称区分。
     
     
     图2TSVB绘图页面   
     ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002392342598.png "点击放大")
     当需要查看不同时间段的数据时，则需要将时间聚合间隔设置好，否则将导致数据显示不完整。如[图3]所示，在"Panel options"页签，将"Interval"设置为"1m"或"30m"，即可调整"timestamp"的时间间隔。
     图3设置时间间隔   
     ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002425862433.png "点击放大") 
   
 
#### 常见问题：索引监控图表不显示时怎么办？
**现象**：集群无法查看到预置的Dashboard和Visualizations图表。
**解决方案**：
1. 在集群列表确认集群是否启用安全模式。
   图4确认集群是否启用安全模式   
   ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002480060242.png)
   
   - "安全模式"为"启用"，则切换为Global空间。 在OpenSearch Dashboards页面，单击右上方用户名，选择"Switch tenants"，在Select your tenant页面切换空间，单击"Confirm"，查看图表是否正常显示，如果依旧没有显示则继续执行下一步。
     
   
   - "安全模式"为"未开启"，则执行下一步。
    
2. 在集群列表确认集群的镜像版本号是否大于或等于2.19.0_25.9.0_xxx。
   - 集群的镜像版本号不低于2.19.0_25.9.0_xxx，则执行下一步重启索引监控开关。
   
   - 集群的镜像版本号低于2.19.0_25.9.0_xxx，则先重启集群（所有节点）再执行下一步重启索引监控开关。重启操作指导请参见[重启集群](https://support.huaweicloud.com/usermanual-css/css_01_0286.html)。
    
3. 重启索引监控开关。
   先将"css.monitoring.index.enabled"配置为"false"，再配置为"true"，等待5分钟左右，索引监控图表即可自动显示。
   ```
   PUT _cluster/settings
   {
     "persistent": {
       "css.monitoring.index.enabled": "true"
     }
   }
   ```
   如果图表依旧未显示，则联系技术支持定位处理。
   
 
