如何为TFS Code Search Server(Elastic Search)配置索引保留策略
嘿,针对你遇到的TFS 2017.3独立Code Search服务器磁盘很快被占满的问题,我整理了一套实操的旧索引保留策略配置方法,都是适配这个版本的有效方案,你可以照着一步步来:
核心思路
TFS的Code Search底层是基于Elasticsearch搭建的,所以我们要通过配置Elasticsearch的索引生命周期管理(ILM)或者磁盘使用率阈值规则,让系统自动删除超出保留期限或触发磁盘阈值的旧索引,从根源上避免磁盘耗尽。
具体操作步骤
登录Code Search服务器并打开命令行
以管理员身份打开命令提示符,导航到Code Search的Elasticsearch bin目录,默认路径是:C:\Program Files\Microsoft Team Foundation Server 15.0\Search\elasticsearch\bin
如果你的安装路径不同,替换成实际路径即可。查看当前索引配置(可选但推荐)
先执行命令查看现有索引的设置,确认有没有已存在的保留规则:curl -X GET "http://localhost:9200/_all/_settings?pretty"执行后会返回所有索引的详细配置,方便后续对比修改效果。
配置基于时间的索引保留策略
如果你想保留最近N天的索引,自动删除更早的,比如设置保留90天,执行以下两个命令:
首先给所有索引绑定生命周期策略:curl -X PUT "http://localhost:9200/_all/_settings" -H "Content-Type: application/json" -d '{ "index": { "lifecycle": { "name": "tfs_search_retention_policy", "rollover_alias": "tfs_search" } } }'然后创建对应的生命周期规则,定义90天后自动删除:
curl -X PUT "http://localhost:9200/_ilm/policy/tfs_search_retention_policy" -H "Content-Type: application/json" -d '{ "policy": { "phases": { "delete": { "min_age": "90d", "actions": { "delete": {} } } } } }'你可以把
90d换成自己需要的天数,比如60天就写60d。配置基于磁盘大小的阈值规则(可选,推荐搭配使用)
为了更保险,你可以设置磁盘使用率阈值,当磁盘用到指定比例时自动删除旧索引。比如设置磁盘使用率到80%时触发预警,90%时强制删除:curl -X PUT "http://localhost:9200/_cluster/settings" -H "Content-Type: application/json" -d '{ "persistent": { "cluster.routing.allocation.disk.watermark.low": "80%", "cluster.routing.allocation.disk.watermark.high": "85%", "cluster.routing.allocation.disk.watermark.flood_stage": "90%", "indices.lifecycle.poll_interval": "10m" } }'这里的百分比可以根据你的700GB磁盘调整,比如把
low设为75%(对应525GB),留足缓冲空间;indices.lifecycle.poll_interval是系统检查策略的间隔,10分钟一次比较合理。验证配置是否生效
执行以下命令查看生命周期策略的状态,确认配置成功:curl -X GET "http://localhost:9200/_ilm/status?pretty"也可以再次执行步骤2的命令,对比索引配置的变化。
关键注意事项
- 执行所有命令前,确保Code Search服务处于运行状态,否则curl命令会连接失败。
- 如果你不确定保留天数,可以先设置一个短周期测试(比如7天),观察几天确认旧索引正常被删除后,再调整到合适的期限。
- 磁盘阈值不要设置得太满,比如不要把flood_stage设到95%以上,避免磁盘突然耗尽导致服务崩溃。
内容的提问来源于stack exchange,提问作者Shayki Abramczyk

