热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ELKDefineMutilplePipelinesForLogstash

Logstash有一个对初学者来说很大的坑,就是安装之后直接运行,它将默认只使用一个pipeline,把conf.d下面的配置文件一次全加

Logstash有一个对初学者来说很大的坑,就是安装之后直接运行,它将默认只使用一个pipeline,把conf.d下面的配置文件一次全加载了。

如果不同配置文件的输入输出有冲突,比如缺少必要的条件判断,就会发生意想不到的结果。

使用多管道,势在必行。


Default Pipeline


pipeline.yml

默认的pipeline配置是这样子的。

# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html- pipeline.id: mainpath.config: "/etc/logstash/conf.d/*.conf"

conf.d/app.conf

然后配置里需要一大堆ifelse,来区分来自不用的应用。

比如单说处理Filebeat的log,就需要在filter里根据不同的关键字分别进行处理。

input {beats {port => 5044}
}filter {if [fields][type] == "aaaa" {grok {...}date {...}} else if [fields][type] == "bbbb" {grok {...}date {...}} else if [fields][type] == "cccc" {grok {...}if "_grokparsefailure" in [tags] {drop{}}date {...}}
}output {if [fields][type] in ["aaaa", "bbbb", "cccc"] {elasticsearch {hosts => ["http://192.168.0.888:9200"]index => "%{[@metadata][beat]}-%{[fields][type]}-%{+YYYY.MM}"}}
}

输出其实也一样,不过这里用了些适配的技巧。

增加其他类型,一样要增加ifelse的判断。


Multiple Pipelines


pipeline.yml

在pipeline里按App分流。

每个App分别定义一个pipeline,再放到独立的配置文件里。

- pipeline.id: beatsconfig.string: |input { beats { port => 5044 } }output {if [fields][type] == "aaaa" { pipeline { send_to => aaaa_addr }} else if [fields][type] == "bbbb" { pipeline { send_to => bbbb_addr }} else if [fields][type] == "cccc" { pipeline { send_to => cccc_addr }}}- pipeline.id: aaaapath.config: "/etc/logstash/conf.d/{aaaa,beats_out}.conf"- pipeline.id: bbbbpath.config: "/etc/logstash/conf.d/{bbbb,beats_out}.conf"- pipeline.id: ccccpath.config: "/etc/logstash/conf.d/{cccc,beats_out}.conf"

配置文件路径支持适配的写法。每个App分别加载两个文件。

这里这样处理主要是因为他们的output配置刚好可以是一样的。


beats_out.conf

虽然共享同一个配置,但是因为在不同管道,所以不需要加ifelse也不会混乱。

output {elasticsearch {hosts => ["http://192.168.0.888:9200"]index => "%{[@metadata][beat]}-%{[fields][type]}-%{+YYYY.MM}"}
}

aaaa.conf

从上游管道地址接收输入。

直接处理log不需要再判断。

input { pipeline { address => aaaa_addr } }filter {grok {...}if "_grokparsefailure" in [tags] {drop{}}date {...}
}

调试

可以先用最简单的例子来调试,一个一个添加。

- pipeline.id: upstreamconfig.string: input {file { path => "/etc/logstash/iiii.log" }} output { pipeline { send_to => [myVirtualAddress] } }
- pipeline.id: downstreamconfig.string: input { pipeline { address => myVirtualAddress } } output {file { path => "/etc/logstash/oooo.log" }}

我就是太心急了,直接刷刷一大堆,结果总是有错。

半天才发现,原来只是删除ifelse的时候,有些文件没有删掉多余的缩进,空格有些混乱,肉眼又很难看出来。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
360691894_8a5c48
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有