Logstash 8.6 配置pipelines多管道
背景
在实际使用中,我们希望Logstash能处理各种不同的数据来源,并且各自互相不冲突,同时增删查改Logstash配置而不影响正在运行Logstash实例,实现配置动态重载。
Logstash 单一管道配置
单管道使用单个配置文件,且启动方式比较简单,以下是启动命令:
1 |
|
Logstash 多管道配置
有时我们有N个配置文件需要logstash进行处理,端口实例却只有一个,总不能用docker开N多个logstash服务,并启用不同端口在指向不同文件?这种方式也太过繁琐,我们希望由logstash配置文件去管控不同的管道。如下图:
这个地方遇到坑有两个
1、./config/logstash.yml
需要定义path.config
路径,然后启动logstash服务要不带参数
2、 在1的基础上,使用./bin/logstash -f ./config/logstash.yml
尤其是在文章里写上启动logstash 6.0以后不要带参数的,有些害人不浅,不知瞎抄文章自己有没有去实践过!
使用多管道的核心还是定义pipelines.yml文件,例如:
1 |
|
如果按照我上面警告两项去启动logstash的话,服务会出现以下警告:
1 |
|
logstash 直接忽略pipelines.yml文件,那么在里面定义的配置失去应有的作用,我遇到的问题是,logstash服务是启动了,但是只有my_test_log1.conf
配置能正常过滤处理,其他两个配置文件均过滤失败,哪怕读取到数据源是正确的路径也不行,所有正确启动命令如下:
1 |
|
当然,多管道运行还有其他各种各样的配置,其中就包括模块化配置,这个可以浏览官方文档如何创建易于维护和再利用的 Logstash 管道
pipelines.yml文件必须要跟my_test_log1.conf、my_test_log2.conf、my_test_log3.conf处于同一级目录下,否则启动失败
启动成功后,会打印如下信息
1 |
|
Logstash 配置重载
logstash 在过滤数据时,添加配置或者改配置最不想的是重启服务,以免造成数据丢失风险,
(1) 创建并配置my_test_log4.conf文件
(2) 添加my_test_log4.conf文件到pipelines.yml
1 |
|
(3) 查看logstahs进程号
1 |
|
(4) 发送HUP信号给logstash使其重载配置
1 |
|
其实动态加载还有其他方式,比如在命令行启动服务时,添加--config.reload.automatic
参数,还有一种方式就是通过logstash API服务,默认端口号9600,在命令行执行curl -X POST "localhost:9600/_pipeline/pipeline1/reload"
进行重载,但是,这后两种我没去试过!
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!