🗒️阿里sls采集logstash处理过的日志
2023-3-2
| 2023-4-10
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password

1. 背景

某项目技术方案是docker,且文本日志未格式化处理,直接用sls采集无法有效利用索引,即只能采集日志,无分析利用价值。此项目部署了logstash,投递到某dev的es集群,供研发排查问题,之前未注意其处理逻辑,只是“能用就行”。
近期不胜其烦,不想搞两套采集方案了,检查es的日志,发现已经处理成了JSON格式,计划利用JSON的部分key生成sls索引 ps.logstash镜像只要不是太古早应该都行

2. 步骤

2.1 容器安装阿里的logstash-output-logservice插件

阿里的范例是Windows的,且非docker版本,此次用的是容器安装插件下载
随便run一个容器,挂载插件目录 docker run -itd --name tmp -v /home/logstash-output-logservice-0.4.0:/usr/share/logstash/logstash-output-logservice-0.4.0 logstash:6.6.0
进入容器,离线安装
sed -i 's/rubygems.org/gems.ruby-china.com/' /usr/share/logstash/Gemfile echo 'gem "logstash-output-logservice", :path => "/usr/share/logstash/logstash-output-logservice-0.4.0"' >>/usr/share/logstash/Gemfile logstash-plugin install --no-verify //安装命令
installation successful是安装成功

2.2 重新生成docker镜像

docker commit -a "author" -m "含ali sls采集插件" 镜像ID logstash-sls:v2

2.3 修改logstash投递配置,启动服务

output { stdout { codec => rubydebug } logservice { //此处的logservice用的是前面安装的插件logstash-output-logservice codec => "json" endpoint => "cn-shanghai-intranet.log.aliyuncs.com" //根据具体的日志地域修改 project => "你的project" logstore => "你的具体日志项目" topic => "" source => "" access_key_id => "自定义" access_key_secret => "自定义" max_send_retry => 10 max_buffer_items => 4000 max_buffer_bytes => 2097152 max_buffer_seconds => 3 } }
推荐的LogStore ram权限,只能写入
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":[ "log:PostLogStoreLogs" ], "Resource":[ "acs:log:*:*:project/<指定的Project名称>/logstore/<指定的Logstore名称>" ] } ] }

2.4 优化阿里sls索引

前面几步做好后sls已经可以看到日志,那索引如何选择? 建议:
  • 先用属性的“自动生成索引”
  • 关闭如time之类的无序值字段的“开启统计”,无异常后删除此字段。海量的无序值字段构成的索引毫无意义,且浪费性能
 
 
技术
  • 公有云
  • 监控
  • awk实现类VLOOKUP的功能(取交集)Prometheus pushgateway采集shell脚本获取的指标
    目录