Docker环境下实现本地Logstash SNS输出至goaws SNS主题
对接本地Logstash SNS输出到GoAWS主题的实操指南
嘿,你已经把GoAWS和相关Docker组件跑起来了,这基础打得很扎实!接下来要把Logstash的SNS输出连到GoAWS的主题上,其实步骤挺清晰的,我给你一步步拆解:
1. 确保Logstash安装了SNS输出插件
首先得确认你的Logstash有没有装logstash-output-sns插件,要是没装的话,在Logstash的安装目录下跑这条命令:
bin/logstash-plugin install logstash-output-sns
装完之后可以用bin/logstash-plugin list确认插件存在。
2. 配置Logstash的输出规则
接下来要写Logstash的配置文件(比如命名为logstash-goaws.conf),重点是output段的SNS配置。因为GoAWS是AWS SNS的模拟服务,所以我们要指定它的自定义端点,还要跳过AWS的真实认证(毕竟是本地模拟)。
这里给你一个示例配置:
input { # 这里是你的输入源,比如file、beats等,根据实际情况配置 stdin {} # 用标准输入测试的话可以保留这个 } filter { # 你的过滤规则,按需添加 } output { sns { # 替换成你的GoAWS SNS主题ARN,可以通过GoAWS的管理界面或API获取 topic_arn => "arn:aws:sns:us-east-1:123456789012:your-topic-name" # GoAWS的SNS服务地址,Docker映射的本地端口默认是4100 endpoint_url => "http://localhost:4100" # 随便填就行,GoAWS默认不校验AWS认证信息 access_key_id => "dummy-key" secret_access_key => "dummy-secret" # 区域随便填一个AWS的区域标识就行 region => "us-east-1" # 要发送的消息内容,这里用Logstash的message字段,你也可以自定义 message => "%{message}" # 可选:如果需要指定消息结构,比如JSON格式 # message_structure => '{"default": "%{message}"}' } }
怎么获取GoAWS的主题ARN?
你可以通过curl调用GoAWS的API来查看所有主题:
curl "http://localhost:4100/?Action=ListTopics"
返回的XML里会包含每个主题的ARN,直接复制过来用就行。
3. 测试配置并验证
配置好之后,启动Logstash加载这个配置:
bin/logstash -f logstash-goaws.conf
如果是用stdin输入测试的话,直接在控制台输入内容,回车后看Logstash的日志有没有报错。同时可以:
- 打开GoAWS的管理界面(默认是http://localhost:4101),查看主题的消息统计
- 观察你的Python守护进程是否收到了来自SQS的消息,进而确认消息是否流转到了Tomcat应用
可能踩坑的地方
- 网络连通性:确保Logstash所在的本地环境能访问GoAWS容器的4100端口,检查docker-compose里GoAWS的端口映射是否正确(比如
4100:4100) - GoAWS认证配置:如果你给GoAWS开了认证(在GoAWS的配置文件里设置了
AuthEnabled: true),那你需要在Logstash的配置里填对应的密钥,不过默认GoAWS是关闭认证的,所以用dummy值就行 - 消息格式:如果你的Python守护进程期望特定格式的消息,记得在Logstash的output里用
message_structure或者过滤阶段处理好消息格式
内容的提问来源于stack exchange,提问作者Aaron Watkins
相关产品推荐
相关产品推荐

