请教 logstash 一个问题,如果配置了多个 output,如果其中一个 output 出了问题,如何保证其他的 output 正常工作呢

2019-06-26 10:29:28 +08:00
 sr0miao
比如:output{redis1, redis2, redis3}
reids1 无法连接,如何保证数据能到 redis2 和 redis3 上,logstash 里是如何设置呢
3146 次点击
所在节点    问与答
22 条回复
PriestTomb
2019-06-26 15:45:56 +08:00
作为没用过 logstash-output-redis 插件但用过 Logstash 的人。。你这个问题的描述有比较大的分歧

你这三个 redis 是同时配置在一个 redis 插件里( 例如 host => ["redis1", "redis2", "redis3"]),还是同时配置了三个 redis 插件,每个插件的 host 配置了一个 redis ?

Logstash 的 output 配置是可以多个的,数据经过 input -> filter 之后是同时传递给多个 output 插件的,不是说第一个 output 插件失败就不继续执行后面的 output 插件了(不是串行)

所以你如果配置多个 redis 插件,就不用纠结这个问题

如果你是第一种配法,可能要看下插件的处理逻辑,一个 redis 写入失败的时候会不会自动重连到另一个 redis 重试写入,还是具体什么逻辑
PriestTomb
2019-06-26 15:59:21 +08:00
PriestTomb
2019-06-26 16:00:46 +08:00
没怎么写过回复。。V 站的回复不是 markdown 么。。抱歉上条的链接有点炸,单发下

https://github.com/logstash-plugins/logstash-output-redis/blob/92203ab42c97d83ff46414a99dbf271b8e8dd531/lib/logstash/outputs/redis.rb#L227
sr0miao
2019-06-26 18:41:15 +08:00
@PriestTomb 抱歉描述不完整,今天我试了下,试过多个 output,像这样
output {
redis1{}
}
output {
redis2{}
}
也试过 output{
redis1{}
redis2{}
}
还试过写两个 config,用-f 去执行,但是都不行,我故意写错其中一个 redis,但是另一个的正常的 redis 也没了数据。
sr0miao
2019-06-26 18:43:59 +08:00
@PriestTomb 官方文档说有 logstash.yml 使用隔离管道,但是我在我用的版本中没有看到,我用的 docker 集成的 logstash,可能版本比较低。

https://www.elastic.co/guide/en/logstash/current/logstash-settings-file.html
PriestTomb
2019-06-26 19:04:11 +08:00
@sr0miao
output{
redis1{}
redis2{}
}
正常的配置是这样

所以你的需求是 Logstash 采集的数据同时往多个 redis 去写么?我在用的是 6.4 版本,可以实现 output 模块配置多个插件,你用的是哪个版本?

比较新的版本有一个 pipelines.yml 配置文件,根据配置的 pipeline.id 不同可以实现同一个 Logstash 进程启动多个 pipeline 实例,每个实例根据不同的配置文件做不同的日志采集处理
sr0miao
2019-06-26 19:05:50 +08:00
@PriestTomb https://elasticsearch.cn/article/6176,这是 elastic 中文社区的帖子,上面说单管道的 output 是“相依为命”的,和你说的不同,是否能详细解答一下呢,先谢谢了
sr0miao
2019-06-26 19:11:31 +08:00
@PriestTomb 现在想要 Logstash 采集的数据同时往多个 redis 去写,但是环境是一个多 docker 集成的环境,其中一个 docker 容器里的 logstash 收集其他 docker 应用生成的日志文件,然后将相同的数据推送到不同的终端。

因为 docker 容器里的应用不是我写的,所以想尽量在那个有 logstash 的 docker 容器里更改 config 文件,它上面的 logstash 可能版本比较老了,但我也不清楚具体版本
PriestTomb
2019-06-26 19:28:17 +08:00
@sr0miao 回想了一下我这边使用的一些场景,确实还没有遇到过“某一个 output 出问题”的情况,一会儿我测试一下

另外,Logstash 在启动的时候输出的日志里是能看到版本的
PriestTomb
2019-06-26 21:13:48 +08:00
@sr0miao [捂脸] 我测试了一下,还真的是这样,配置多个插件仿佛是有个先后顺序,前一个失败或卡住,就不会走到下一个。。是我的锅,我之前还真没测过这种场景。。这几天我再研究下 Logstash 的逻辑

不过配置多 pipeline 实例一起运行的情况,官方说过一个比较推荐的场景,就是这些 pipeline 处理的数据来源最好是不一样的,比如一个 pipeline 接收 Filebeat 的数据,输出到本地文件;另一个 pipeline 接收 http 传入的数据,而输出到 es 等等。

我看了下你发的文章,你目前的场景用输出隔离模式貌似是能完美解决,只是会带来一定的性能开销
jianzhao123
2019-06-26 21:23:07 +08:00
歪楼问下 geoip 无法生成 geoip.location 怎么回事,其他坐标,地区 code 都可以
PriestTomb
2019-06-26 21:42:05 +08:00
@jianzhao123 没用过这个哈哈哈 抱歉帮不上忙
jianzhao123
2019-06-26 23:24:04 +08:00
@PriestTomb 没事儿,自己在折腾下
jianzhao123
2019-06-26 23:24:25 +08:00
@PriestTomb 没事儿,自己再折腾下
iyaozhen
2019-06-27 00:22:49 +08:00
这就是 logstash 的问题,其实也不算问题吧

多个 output 会影响速度,每个必须多个 output 都执行成功,好像还是串行的,第一个有失败第二个就歇菜了。
mansurx
2019-06-27 08:05:08 +08:00
@jianzhao123 好像是数据类型问题,去谷歌搜一下看看
sr0miao
2019-06-27 09:22:19 +08:00
@PriestTomb 我也看了官方的说明,用管道还要给 logstash 升级,这样就得重做 docker 了,还想心存侥幸地找简单的方法,看来没有阿。
PriestTomb
2019-06-27 09:33:52 +08:00
@sr0miao 你的输入源如果是日志文件( file 插件采集?),其实更粗暴一点的方法就是同时启动三个 Logstash,每个 Logstash 进程对应的配置文件 input 环节一样,output 环节配不同的 redis
jianzhao123
2019-06-27 09:41:08 +08:00
@mansurx Google 了,Elas ticsearch 的索引也改了,也重启了😂😂
mansurx
2019-06-27 10:55:42 +08:00
@jianzhao123 索引名是不是要改成 logstash-xxxxx 才行,我记得这个名字的索引是有那个类型的字段的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/577552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX