配置索引级监控
在维护大型OpenSearch集群时,运维人员常面临“集群整体资源(如CPU、内存)正常,但特定业务却出现读写延迟”的困境。由于传统的集群级监控仅反映平均水位,无法深入颗粒度精准定位是哪个索引成为了性能瓶颈,导致故障排查耗时费力。为此,CSS服务提供了精细化的索引级监控功能,通过自动采集每个索引的实时读写流量、延迟及存储变化趋势,并结合预置的OpenSearch Dashboards仪表盘进行可视化展示,帮助用户在无需编写复杂脚本的情况下,迅速锁定异常索引,从而进行针对性的性能优化或资源调整,保障业务稳定运行。
功能介绍
索引监控用于实时监控OpenSearch集群中各个索引的状态和性能,帮助运维人员及时发现和解决问题。索引监控的运作原理:
- 采集:后台任务定期(默认10秒,可配置)抓取目标索引的stats信息(如文档数量、存储大小、分片状态等)。
- 存储:采集的数据被写入名为“monitoring-eye-css-[yyyy-mm-dd]”的专用监控索引中。
- 展示:OpenSearch Dashboards读取监控索引数据,通过预置Dashboard或自定义Visualizations实现数据可视化,支持时间序列分析、趋势对比、异常检测等。
约束限制
- OpenSearch集群仅2.19.0版本支持索引监控功能。
- 请勿创建以“monitoring-eye-css-*”开头的业务索引,否则可能干扰监控数据采集逻辑。
- 禁止删除“monitoring-eye-css-[yyyy-mm-dd]”索引及其关联的Index Pattern,否则监控图表将因数据缺失而显示异常。
登录OpenSearch Dashboards
登录OpenSearch Dashboards进入命令执行页面。OpenSearch集群支持多种客户端访问,本文仅以CSS服务集成的OpenSearch Dashboards为例介绍配置指导。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
- 在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" } }
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| css.monitoring.index.enabled | Boolean | false | 索引监控的功能开关。 取值范围:
|
| css.monitoring.index.indices | String | *(表示监控所有索引) | 索引监控的目标范围。指定监控的索引名称。
默认监控所有索引。如果索引数量大,建议仅监控核心业务索引以降低负载。 |
| css.monitoring.index.interval | Time | 10s | 索引监控的采集频率,即采集索引监控数据的时间间隔。 取值格式:数字+单位
最小值:1s 建议根据业务需求和集群负载调整采集频率,避免过高频率导致性能下降。 |
| css.monitoring.history.duration | Time | 7d | 索引监控的数据保留时长,即“monitoring-eye-css-[yyyy-mm-dd]”监控索引的存储时长,过期后自动清理且数据不可恢复。 取值格式:数字+单位
最小值:1d 建议根据业务需求和存储成本调整数据保留时长,避免过长保留时长导致存储成本增加。 |
查看索引读写流量
当集群开启索引监控后,可以使用API查询索引的实时读写流量。
系统索引(以“.”开头的索引)通常包含内部管理和维护信息,因此不支持查看其读写流量,以保护系统安全。
- 执行如下命令,获取集群中所有索引的实时读写流量信息。
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
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| index_name | String | 无 | 指定索引名称。
|
| begin | String | 最近5分钟 | 指定监控的起始时间。 必须使用UTC时间。 取值格式:
|
| end | String | 当前时间 | 指定监控的结束时间。 必须使用UTC时间。 取值格式:
|
返回示例:
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
| 参数 | 说明 |
|---|---|
| index | 索引名称。 |
| begin | 监控数据的起始时间。 |
| end | 监控数据的结束时间。 |
| status | 监控时间间隔内的索引状态。 |
| pri | 监控时间间隔内的索引的shard数量。 |
| 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查看索引监控
- 在OpenSearch Dashboards左侧导航栏选择“Dashboard”,打开Dashboard界面。
- 搜索并单击 “[Monitoring] Index monitoring Dashboard”,查看预置Dashboard图表。
图表展示了集群的每秒读写数量和每秒读写数量前10的索引情况。
图1 预置dashboard图表
表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工具自定义可视化图表查看文档数量变化趋势的操作步骤。
- 在OpenSearch Dashboards左侧导航栏选择“Visualize”,进入图形列表。
- 单击“Create visualization”,选择“TSVB” ,进入TSVB绘图页面。
- 设置图表参数,查看文档数量变化趋势。
如图2所示,在“Data”页签,配置参数。
- “Aggregation”选择“Max”,“Field”选择“index_stats.primaries.docs.count”表示主分片的文档数量。
- “Aggregation”选择“Derivative”表示聚合桶之间的差异,“Units”设置为“1s”表示使用每秒代替速率。
- “Aggregation”选择“Positive Only”避免数字重置后出现负数。
- 当需要区分不同索引的情况时,则将“Group by”设置为“Terms”,“By”设置为“index_stats.index”,最终得到的聚合结果将按照索引名称区分。
当需要查看不同时间段的数据时,则需要将时间聚合间隔设置好,否则将导致数据显示不完整。如图3所示,在“Panel options”页签,将“Interval”设置为“1m”或“30m”,即可调整“timestamp”的时间间隔。
常见问题:索引监控图表不显示时怎么办?
现象:集群无法查看到预置的Dashboard和Visualizations图表。
解决方案:
- 在集群列表确认集群是否启用安全模式。 图4 确认集群是否启用安全模式
- “安全模式”为“启用”,则切换为Global空间。
在OpenSearch Dashboards页面,单击右上方用户名,选择“Switch tenants”,在Select your tenant页面切换空间,单击“Confirm”,查看图表是否正常显示,如果依旧没有显示则继续执行下一步。
- “安全模式”为“未开启”,则执行下一步。
- “安全模式”为“启用”,则切换为Global空间。
- 在集群列表确认集群的镜像版本号是否大于或等于2.19.0_25.9.0_xxx。
- 集群的镜像版本号不低于2.19.0_25.9.0_xxx,则执行下一步重启索引监控开关。
- 集群的镜像版本号低于2.19.0_25.9.0_xxx,则先重启集群(所有节点)再执行下一步重启索引监控开关。重启操作指导请参见重启集群。
- 重启索引监控开关。 先将“css.monitoring.index.enabled”配置为“false”,再配置为“true”,等待5分钟左右,索引监控图表即可自动显示。
PUT _cluster/settings { "persistent": { "css.monitoring.index.enabled": "true" } }如果图表依旧未显示,则联系技术支持定位处理。

