背景情况
日志服务存储量较大,费用明显增高
查看费用账单,可以看到日志服务费用为7万5千块钱,费用较高。
分析
首先在账单明细中查看日志服务详细的计量计费信息,包括请求次数、存储空间、索引流量、活跃Shard租用等。
表格排序后看到存储量较大的project和logstore信息。
费用优化
费用和两方面因素相关:
- 数据量:用户的数据量是业务决定的,无法优化。
- 配置:使用和数据量相匹配的配置,选择最优的解决方案,才能使成本最小化。
优化配置
配置可以从以下两个方面进行优化:
其他优化建议
- 使用Logtail:有 Batch 与断点续传功能,在保障实时性的同时以最优算法传输数据。Logtail 消耗资源是开源软件(Logstash,FluentD)的1/4,减少CPU消耗。
- API写入用户尽量使用64KB~1MB大包写入,减少请求次数。
- 索引关键字段,例如UserID,Action等,对无用字段不配置索引。
脚本优化方案:
通过脚本实现批量修改logstore数据保存周期
1、获取北京区域日志服务所有logstore的ttl保留时间配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from aliyun.log import LogClient endpoint = 'cn-beijing.log.aliyuncs.com'
accessKeyId = '' accessKey = ''
client = LogClient(endpoint, accessKeyId, accessKey)
projectsList = client.list_project().get_body()['projects']
for project in projectsList: projectName = project['projectName'] logstoresList=client.list_logstore(projectName).get_body()['logstores'] for logstoreName in logstoresList: ttl = client.get_logstore(projectName,logstoreName).get_body()['ttl'] if int(ttl) not in (3,7): print('%s,%s,%s' % (projectName,logstoreName,ttl))
|
2、统一修改ttl
首先要确定数据保留的规则,我们目前的规范为:
生产数据保留7天,非生产保留3天,nginx日志长期保留,特殊日志、有指定需求的日志长期保留。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from aliyun.log import LogClient endpoint = 'cn-beijing.log.aliyuncs.com'
accessKeyId = '' accessKey = ''
client = LogClient(endpoint, accessKeyId, accessKey)
projectsList = ['k8s-log-cb16adeacafeb4b9b988ae5d7e8bf0fc1','k8s-log-c2ab41eea4b8143efa03879fb49a9a282','k8s-log-c502d303ba7fb4fd5b01aa091f9cc79fe','proj-xtrace-eb2cce493ffc5c6328dfd9e39e9f38c-cn-beijing','k8s-log-c37c707c4b45b4b7ab09265f449492802']
for projectName in projectsList: logstoresList=client.list_logstore(projectName).get_body()['logstores'] for logstoreName in logstoresList: ttl = client.get_logstore(projectName,logstoreName).get_body()['ttl'] if int(ttl) != 3: print('%s,%s,%s' % (projectName,logstoreName,ttl)) if logstoreName in ['internal-diagnostic_log','internal-operation_log']: pass else: client.update_logstore(projectName,logstoreName,ttl=3)
|