什么是Logstash

本文介绍了Logstash的核心概念,如pipeline、LogstashEvent和Codec,详细解释了其数据采集、实时解析、转换和存储的过程,以及如何安装、配置和使用Logstash处理CSV数据并导入Elasticsearch。
摘要由CSDN通过智能技术生成

Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。

logstash官方文档:Logstash:收集、解析和转换日志 | Elastic

1 Logstash核心概念

1.1 Pipeline

  • 包含了input—filter—output三个阶段的处理流程
  • 插件生命周期管理
  • 队列管理

1.2 Logstash Event

  • 数据在内部流转时的具体表现形式。数据在input 阶段被转换为Event,在 output被转化成目标格式数据;
  • Event 其实是一个Java Object,在配置文件中,可以对Event 的属性进行增删改查。

1.3 Codec (Code / Decode)

将原始数据decode成Event;将Event encode成目标数据。

2 Logstash数据传输原理

  1. 数据采集与输入:Logstash支持各种输入选择,能够以连续的流式传输方式,轻松地从日志、指标、Web应用以及数据存储中采集数据。
  2. 实时解析和数据转换:通过Logstash过滤器解析各个事件,识别已命名的字段来构建结构,并将它们转换成通用格式,最终将数据从源端传输到存储库中。
  3. 存储与数据导出:Logstash提供多种输出选择,可以将数据发送到指定的地方。

Logstash通过管道完成数据的采集与处理,管道配置中包含input、output和filter(可选)插件,input和output用来配置输入和输出数据源、filter用来对数据进行过滤或预处理。

3 Logstash安装

logstash官方文档: Installing Logstash | Logstash Reference [7.17] | Elastic

1)下载并解压logstash

下载地址: Past Releases of Elastic Stack Software | Elastic

#下载Logstash
#windows
https://artifacts.elastic.co/downloads/logstash/logstash-7.17.3-windows-x86_64.zip
#linux
https://artifacts.elastic.co/downloads/logstash/logstash-7.17.3-linux-x86_64.tar.gz

2)运行最基本的logstash管道

cd logstash-8.13.0
#linux
#-e选项表示,直接把配置放在命令中,这样可以有效快速进行测试。
bin/logstash -e 'input { stdin { } } output { stdout {} }'
#windows
.\bin\logstash.bat -e "input { stdin { } } output { stdout {} }"

测试结果:

4 Logstash配置文件结构

参考:Configuring Logstash | Logstash Reference [7.17] | Elastic

Logstash的管道配置文件对每种类型的插件都提供了一个单独的配置部分,用于处理管道事件。

input {
  stdin { }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch { hosts => ["localhost:9200"]}  
  stdout { codec => rubydebug }
}

每个配置部分可以包含一个或多个插件。例如,指定多个filter插件,Logstash会按照它们在配置文件中出现的顺序进行处理。

bin/logstash -f logstash-demo.conf

4.1 输入插件(Input Plugins)

Input plugins | Logstash Reference [7.17] | Elasticicon-default.png?t=N7T8https://www.elastic.co/guide/en/logstash/7.17/input-plugins.html

一个 Pipeline可以有多个input插件

  • Stdin / File
  • Beats / Log4J /Elasticsearch / JDBC / Kafka /Rabbitmq /Redis
  • JMX/ HTTP / Websocket / UDP / TCP
  • Google Cloud Storage / S3
  • Github / Twitter

4.2 输出插件(Output Plugins)

Output plugins | Logstash Reference [7.17] | Elasticicon-default.png?t=N7T8https://www.elastic.co/guide/en/logstash/7.17/output-plugins.html

将Event发送到特定的目的地,是 Pipeline 的最后一个阶段。

常见 Output Plugins:

  • Elasticsearch
  • Email / Pageduty
  • Influxdb / Kafka / Mongodb / Opentsdb / Zabbix
  • Http / TCP / Websocket

4.3 Codec Plugins

Codec plugins | Logstash Reference [7.17] | Elasticicon-default.png?t=N7T8https://www.elastic.co/guide/en/logstash/7.17/codec-plugins.html

将原始数据decode成Event;将Event encode成目标数据。

内置的Codec Plugins:

  • Line / Multiline
  • JSON / Avro / Cef (ArcSight Common Event Format)
  • Dots / Rubydebug

Codec Plugin测试

# single line
bin/logstash -e "input{stdin{codec=>line}}output{stdout{codec=> rubydebug}}"
bin/logstash -e "input{stdin{codec=>json}}output{stdout{codec=> rubydebug}}"

Multiline插件

设置参数:

  • pattern: 设置行匹配的正则表达式
  • what : 如果匹配成功,那么匹配行属于上一个事件还是下一个事件
    • previous / next
  • negate : 是否对pattern结果取反
    • true / false
# 多行数据,异常
Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

#vim multiline-exception.conf
input {
  stdin {
    codec => multiline {
      pattern => "^\s"
      what => "previous"
    }
  }
}

filter {}

output {
  stdout { codec => rubydebug }
}

#执行管道
bin/logstash -f multiline-exception.conf

4.4 Filter Plugins

Filter plugins | Logstash Reference [7.17] | Elasticicon-default.png?t=N7T8https://www.elastic.co/guide/en/logstash/7.17/filter-plugins.html

Filter Plugin可以对Logstash Event进行各种处理,例如解析,删除字段,类型转换。

  • Date: 日期解析
  • Dissect: 分割符解析
  • Grok: 正则匹配解析
  • Mutate: 对字段做各种操作
    • Convert : 类型转换
    • Gsub : 字符串替换
    • Split / Join /Merge: 字符串切割,数组合并字符串,数组合并数组
    • Rename: 字段重命名
    • Update / Replace: 字段内容更新替换
    • Remove_field: 字段删除
  • Ruby: 利用Ruby 代码来动态修改Event

4.5 Logstash Queue

  • In Memory Queue

进程Crash,机器宕机,都会引起数据的丢失。

  • Persistent Queue

机器宕机,数据也不会丢失;数据保证会被消费;可以替代 Kafka等消息队列缓冲区的作用。

# pipelines.yml
queue.type: persisted (默认是memory)
queue.max_bytes: 4gb

5 Logstash导入csv数据到ES

1)测试数据集下载:MovieLens | GroupLens

2)准备logstash-movie.conf配置文件

input {
    file {
        path => "/home/es/logstash-7.17.3/dataset/movies.csv"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}

filter {
    csv {
        separator => ","
        columns => ["id","content","genre"]
    }
    
    mutate {
        split => { "genre" => "|" }
        remove_field => ["path", "host","@timestamp","message"]
    }
    
    mutate {
        split => ["content", "("]
        add_field => { "title" => "%{[content][0]}"}
        add_field => { "year" => "%{[content][1]}"}
    }
    
    mutate {
        convert => {
          "year" => "integer"
        }
        strip => ["title"]
        remove_field => ["path", "host","@timestamp","message","content"]
    }
}

output {
    elasticsearch {
        hosts => "http://localhost:9200"
        index => "movies"
        document_id => "%{id}"
        user => "elastic"
        password => "123456"
    }
    stdout {}
}

3)运行logstash

# linux
bin/logstash -f logstash-movie.conf
  • --config.test_and_exit : 解析配置文件并报告任何错误
  • --config.reload.automatic: 启用自动配置加载
  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值