1
PriestTomb 2019-06-26 15:45:56 +08:00 1
作为没用过 logstash-output-redis 插件但用过 Logstash 的人。。你这个问题的描述有比较大的分歧
你这三个 redis 是同时配置在一个 redis 插件里( 例如 host => ["redis1", "redis2", "redis3"]),还是同时配置了三个 redis 插件,每个插件的 host 配置了一个 redis ? Logstash 的 output 配置是可以多个的,数据经过 input -> filter 之后是同时传递给多个 output 插件的,不是说第一个 output 插件失败就不继续执行后面的 output 插件了(不是串行) 所以你如果配置多个 redis 插件,就不用纠结这个问题 如果你是第一种配法,可能要看下插件的处理逻辑,一个 redis 写入失败的时候会不会自动重连到另一个 redis 重试写入,还是具体什么逻辑 |
2
PriestTomb 2019-06-26 15:59:21 +08:00
看了一下代码里有[retry 逻辑]( https://github.com/logstash-plugins/logstash-output-redis/blob/92203ab42c97d83ff46414a99dbf271b8e8dd531/lib/logstash/outputs/redis.rb#L227),如果是第一种配法,在尝试写入但是连接失败后,如果捕获到异常,会进行重试,而每执行一次都会顺次获取下一个 redis 的连接,所以目前看就算是 redis1 挂了,也会依次把数据写到另外两个 redis 去
|
3
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 |
4
sr0miao OP @PriestTomb 抱歉描述不完整,今天我试了下,试过多个 output,像这样
output { redis1{} } output { redis2{} } 也试过 output{ redis1{} redis2{} } 还试过写两个 config,用-f 去执行,但是都不行,我故意写错其中一个 redis,但是另一个的正常的 redis 也没了数据。 |
5
sr0miao OP @PriestTomb 官方文档说有 logstash.yml 使用隔离管道,但是我在我用的版本中没有看到,我用的 docker 集成的 logstash,可能版本比较低。
https://www.elastic.co/guide/en/logstash/current/logstash-settings-file.html |
6
PriestTomb 2019-06-26 19:04:11 +08:00
@sr0miao
output{ redis1{} redis2{} } 正常的配置是这样 所以你的需求是 Logstash 采集的数据同时往多个 redis 去写么?我在用的是 6.4 版本,可以实现 output 模块配置多个插件,你用的是哪个版本? 比较新的版本有一个 pipelines.yml 配置文件,根据配置的 pipeline.id 不同可以实现同一个 Logstash 进程启动多个 pipeline 实例,每个实例根据不同的配置文件做不同的日志采集处理 |
7
sr0miao OP @PriestTomb https://elasticsearch.cn/article/6176,这是 elastic 中文社区的帖子,上面说单管道的 output 是“相依为命”的,和你说的不同,是否能详细解答一下呢,先谢谢了
|
8
sr0miao OP @PriestTomb 现在想要 Logstash 采集的数据同时往多个 redis 去写,但是环境是一个多 docker 集成的环境,其中一个 docker 容器里的 logstash 收集其他 docker 应用生成的日志文件,然后将相同的数据推送到不同的终端。
因为 docker 容器里的应用不是我写的,所以想尽量在那个有 logstash 的 docker 容器里更改 config 文件,它上面的 logstash 可能版本比较老了,但我也不清楚具体版本 |
9
PriestTomb 2019-06-26 19:28:17 +08:00
|
10
PriestTomb 2019-06-26 21:13:48 +08:00
@sr0miao [捂脸] 我测试了一下,还真的是这样,配置多个插件仿佛是有个先后顺序,前一个失败或卡住,就不会走到下一个。。是我的锅,我之前还真没测过这种场景。。这几天我再研究下 Logstash 的逻辑
不过配置多 pipeline 实例一起运行的情况,官方说过一个比较推荐的场景,就是这些 pipeline 处理的数据来源最好是不一样的,比如一个 pipeline 接收 Filebeat 的数据,输出到本地文件;另一个 pipeline 接收 http 传入的数据,而输出到 es 等等。 我看了下你发的文章,你目前的场景用输出隔离模式貌似是能完美解决,只是会带来一定的性能开销 |
11
jianzhao123 2019-06-26 21:23:07 +08:00 via iPhone
歪楼问下 geoip 无法生成 geoip.location 怎么回事,其他坐标,地区 code 都可以
|
12
PriestTomb 2019-06-26 21:42:05 +08:00
@jianzhao123 没用过这个哈哈哈 抱歉帮不上忙
|
13
jianzhao123 2019-06-26 23:24:04 +08:00 via iPhone
@PriestTomb 没事儿,自己在折腾下
|
14
jianzhao123 2019-06-26 23:24:25 +08:00 via iPhone
@PriestTomb 没事儿,自己再折腾下
|
15
iyaozhen 2019-06-27 00:22:49 +08:00
这就是 logstash 的问题,其实也不算问题吧
多个 output 会影响速度,每个必须多个 output 都执行成功,好像还是串行的,第一个有失败第二个就歇菜了。 |
16
mansurx 2019-06-27 08:05:08 +08:00 via Android
@jianzhao123 好像是数据类型问题,去谷歌搜一下看看
|
17
sr0miao OP @PriestTomb 我也看了官方的说明,用管道还要给 logstash 升级,这样就得重做 docker 了,还想心存侥幸地找简单的方法,看来没有阿。
|
18
PriestTomb 2019-06-27 09:33:52 +08:00
@sr0miao 你的输入源如果是日志文件( file 插件采集?),其实更粗暴一点的方法就是同时启动三个 Logstash,每个 Logstash 进程对应的配置文件 input 环节一样,output 环节配不同的 redis
|
19
jianzhao123 2019-06-27 09:41:08 +08:00 via iPhone
@mansurx Google 了,Elas ticsearch 的索引也改了,也重启了😂😂
|
20
mansurx 2019-06-27 10:55:42 +08:00 via Android
@jianzhao123 索引名是不是要改成 logstash-xxxxx 才行,我记得这个名字的索引是有那个类型的字段的。
|
21
jianzhao123 2019-06-27 14:26:46 +08:00 via iPhone
@mansurx 谢谢,我再看看
|
22
Samuelcc 2019-06-28 01:28:04 +08:00 via Android
就是因为这个问题,我们最后改成了使用多个 consumer 来处理,这样一个失败不会影响另一个
|