一、安装与启动

Logstash 依赖 Java 8 或者 Java 11,需要先安装 JDK

1.1 下载

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.7.0.rpm

1.2 安装

sudo rpm -i logstash-7.7.0.rpm

Logstash 的目录结构见:Directory Layout of Debian and RPM Packages

1.3 修改配置(根据需要执行)

修改 /etc/logstash/logstash.yml 配置:

config.reload.automatic : true

这样修改配置文件后,不需要重启 Logstash

1.4 启动

sudo systemctl start logstash.service

1.5 测试启动

cd /usr/share/logstash

sudo bin/logstash -e 'input { stdin { } } output { stdout {} }'

然后输入:hello world,可以看到下面的输出:

{
"@version" => "1",
"host" => "localhost.localdomain",
"message" => "hello world",
"@timestamp" => 2020-05-29T23:16:52.686Z
}

二、使用

2.1 新建配置文件

cd /etc/logstash/conf.d/
vi weblog.conf

weblog.conf 的内容为:

input {
tcp {
port => 9900
}
} output {
file {
path => "/project/logs/logstashtest.log"
}
}

配置文件的含义是监听 9900 端口的输入,并保存到 /project/logs/logstashtest.log

2.2 使用

echo 'hello logstash' | nc localhost 9900
`

查看 /usr/local/logstash/test.log 的内容,可以看到类似如下内容:

{
"message":"hello logstash",
"@timestamp":"2020-05-30T19:08:34.043Z",
"host":"localhost",
"port":47332,
"@version":"1"
}

三、过滤器

先下载测试使用的数据:weblog-sample.log,内容是一个 log 文件,格式如下:

14.49.42.25 - - [12/May/2019:01:24:44 +0000] "GET /articles/ppp-over-ssh/ HTTP/1.1" 200 18586 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5"

3.1 grok

修改配置文件 weblog.conf:

input {
tcp {
port => 9900
}
} filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
} output {
file {
path => "/project/logs/logstashtest.log"
}
}

%{COMBINEDAPACHELOG} 是 Logstash 自带的匹配模式,读入 weblog-sample.log 的第一行数据:

head -n 1 weblog-sample.log | nc localhost 9900

得到输出类似如下:

{
"request":"/articles/ppp-over-ssh/",
"@timestamp":"2020-05-30T22:31:37.309Z",
"port":47428,
"host":"localhost",
"timestamp":"12/May/2019:01:24:44 +0000",
"response":"200",
"referrer":"\"-\"",
"ident":"-",
"@version":"1",
"verb":"GET",
"clientip":"14.49.42.25",
"message":"14.49.42.25 - - [12/May/2019:01:24:44 +0000] \"GET /articles/ppp-over-ssh/ HTTP/1.1\" 200 18586 \"-\" \"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\"",
"auth":"-",
"httpversion":"1.1",
"bytes":"18586",
"agent":"\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\""
}

通过 grok 使用正则表达式将非结构化的数据转换为结构化的数据

3.2 geoip

input {
tcp {
port => 9900
}
} filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
} geoip {
source => "clientip"
}
} output {
file {
path => "/project/logs/logstashtest.log"
}
}

读入 weblog-sample.log 的第一行数据:

head -n 1 weblog-sample.log | nc localhost 9900

得到输出类似如下:

{
"geoip":{
"longitude":126.97409999999999,
"ip":"14.49.42.25",
"country_name":"South Korea",
"country_code3":"KR",
"country_code2":"KR",
"location":{
"lon":126.97409999999999,
"lat":37.5112
},
"latitude":37.5112,
"continent_code":"AS",
"timezone":"Asia/Seoul"
},
"request":"/articles/ppp-over-ssh/",
"@timestamp":"2020-05-30T22:44:17.084Z",
"port":47436,
"host":"localhost",
"timestamp":"12/May/2019:01:24:44 +0000",
"response":"200",
"referrer":"\"-\"",
"ident":"-",
"@version":"1",
"verb":"GET",
"clientip":"14.49.42.25",
"message":"14.49.42.25 - - [12/May/2019:01:24:44 +0000] \"GET /articles/ppp-over-ssh/ HTTP/1.1\" 200 18586 \"-\" \"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\"",
"auth":"-",
"httpversion":"1.1",
"bytes":"18586",
"agent":"\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\""
}

geoip 将 IP 地址转换为地理位置等信息

Kibana 自带了 grok 调试工具,可以在 Dev Tools 中 Grok Debugger 调试

3.3 useragent

input {
tcp {
port => 9900
}
} filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
} geoip {
source => "clientip"
} useragent {
source => "agent"
target => "useragent"
}
} output {
file {
path => "/project/logs/logstashtest.log"
}
}

读入 weblog-sample.log 的第一行数据:

head -n 1 weblog-sample.log | nc localhost 9900

得到输出类似如下:

{
"geoip":{
"longitude":126.97409999999999,
"ip":"14.49.42.25",
"country_name":"South Korea",
"country_code3":"KR",
"country_code2":"KR",
"location":{
"lon":126.97409999999999,
"lat":37.5112
},
"latitude":37.5112,
"continent_code":"AS",
"timezone":"Asia/Seoul"
},
"request":"/articles/ppp-over-ssh/",
"@timestamp":"2020-05-30T22:58:17.848Z",
"port":47444,
"host":"localhost",
"timestamp":"12/May/2019:01:24:44 +0000",
"response":"200",
"referrer":"\"-\"",
"ident":"-",
"useragent":{
"minor":"6",
"major":"3",
"build":"",
"device":"Other",
"os_name":"Windows",
"patch":"b1",
"name":"Firefox Beta",
"os":"Windows"
},
"@version":"1",
"verb":"GET",
"clientip":"14.49.42.25",
"message":"14.49.42.25 - - [12/May/2019:01:24:44 +0000] \"GET /articles/ppp-over-ssh/ HTTP/1.1\" 200 18586 \"-\" \"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\"",
"auth":"-",
"httpversion":"1.1",
"bytes":"18586",
"agent":"\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\""
}

useragent 解析浏览器及操作系统信息

3.4 date

Logstash 将事件时间存储在 @timestamp 字段中,但 weblog-sample.log 创建时间在 timestamp 字段中,该字段的格式不是 ISO8601,可以使用 date 过滤器将此字段转换为日期类型

input {
tcp {
port => 9900
}
} filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
} geoip {
source => "clientip"
} useragent {
source => "agent"
target => "useragent"
} date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
} output {
file {
path => "/project/logs/logstashtest.log"
}
}

读入 weblog-sample.log 的第一行数据:

head -n 1 weblog-sample.log | nc localhost 9900

得到输出类似如下:

{
"geoip":{
"longitude":126.97409999999999,
"ip":"14.49.42.25",
"country_name":"South Korea",
"country_code3":"KR",
"country_code2":"KR",
"location":{
"lon":126.97409999999999,
"lat":37.5112
},
"latitude":37.5112,
"continent_code":"AS",
"timezone":"Asia/Seoul"
},
"request":"/articles/ppp-over-ssh/",
"@timestamp":"2019-05-12T01:24:44.000Z",
"port":47450,
"host":"localhost",
"timestamp":"12/May/2019:01:24:44 +0000",
"response":"200",
"referrer":"\"-\"",
"ident":"-",
"useragent":{
"minor":"6",
"major":"3",
"build":"",
"device":"Other",
"os_name":"Windows",
"patch":"b1",
"name":"Firefox Beta",
"os":"Windows"
},
"@version":"1",
"verb":"GET",
"clientip":"14.49.42.25",
"message":"14.49.42.25 - - [12/May/2019:01:24:44 +0000] \"GET /articles/ppp-over-ssh/ HTTP/1.1\" 200 18586 \"-\" \"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\"",
"auth":"-",
"httpversion":"1.1",
"bytes":"18586",
"agent":"\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5\""
}

四、输出

将数据输出到 Elasticsearch:

input {
tcp {
port => 9900
}
} filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
} geoip {
source => "clientip"
} useragent {
source => "agent"
target => "useragent"
} date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
} output {
file {
path => "/project/logs/logstashtest.log"
} elasticsearch {
hosts => ["localhost:9200"]
}
}

读入 weblog-sample.log 的第一行数据:

head -n 1 weblog-sample.log | nc localhost 9900

打开 Kibana 在 Dev Tools 输入命令:

GET logstash/_search

可以看到从 Logstash 导入的数据

参考

  1. 如何安装Elastic栈中的Logstash
  2. Logstash Directory Layout
  3. Logstash:Logstash 入门教程 (二)
  4. Filter plugins

浅尝 Elastic Stack (二) Logstash的更多相关文章

  1. 浅尝 Elastic Stack (三) Logstash + Beats

    本文使用 Filebeat,如果没有安装需要安装: curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat- ...

  2. 浅尝 Elastic Stack (五) Logstash + Beats + Kafka

    在 Elasticsearch.Kibana.Beats 安装 中讲到推荐架构: 本文基于 Logstash + Beats 读取 Spring Boot 日志 将其改为上述架构 如果没有安装 Kaf ...

  3. 浅尝 Elastic Stack (四) Logstash + Beats 读取 Spring Boot 日志

    一.Spring Boot 日志配置 采用 Spring Boot 默认的 Logback: <?xml version="1.0" encoding="UTF-8 ...

  4. 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...

  5. Elastic Stack之Logstash进阶

    Elastic Stack之Logstash进阶 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用GeoLite2和logstash 过滤插件的geoip案例 1>. ...

  6. 浅尝Java(二、代码折叠插件的使用)

    主题:eclipse代码折叠插件的使用. 工作中在使用eclipse开发Java项目时,我们会写很多if,for循环啊什么的,这使得我们的项目代码会有很多很多行.写完后要想检查或者查看,就要从头一行一 ...

  7. Elastic Stack核心产品介绍-Elasticsearch、Logstash和Kibana

    Elastic Stack 是一系列开源产品的合集,包括 Elasticsearch.Kibana.Logstash 以及 Beats 等等,能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地 ...

  8. Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 实现日志的自动采集、搜索和分析

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据 ...

  9. 浅尝key-value数据库(二)——MongoDB的优与劣

    浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源 ...

随机推荐

  1. Route53导出解析记录

    使用AWS CLI来进行导出 可以参考AWS的官方文档 安装AWS CLI 官方安装aws cli文档 curl "https://awscli.amazonaws.com/awscli-e ...

  2. 视频直播源码开发中的流媒体协议:rtmp协议

    一.概念与摘要 视频直播源码的RTMP协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频.视频和互动内容).RTMP提供了一套全双工的可靠的多路复用消息服务,类似 ...

  3. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  4. Git仓库的提交记录乱成一团,怎么办?

    大家好,今天和大家聊聊git当中一个非常好用的功能--区间选择,它可以帮我们处理看起来非常复杂的提交记录.从而帮助我们很快找到我们需要的内容. 如果大家有参与过多人协同的项目开发,比如十几个人甚至更多 ...

  5. 3-colorability

    目录 1.1 3-colorability 1.1.1 3元可满足规约到3着色 1.1.2 证明充分和必要性 1.1 3-colorability 一个图的三着色问题:要使得边两头的结点颜色互不相同. ...

  6. ubuntu 18.04安装RTL8821CE无线网卡驱动

    疫情期间闲下来无聊,把办公室的旧机器装了ubuntu,但是无法连接无线网. 打开终端 #查看无线网卡信息. -i 是不区分大小写 tjj@ubuntu:~/Documents$ lspci | gre ...

  7. HDU100题简要题解(2030~2039)

    HDU2030 汉字统计 题目链接 Problem Description 统计给定文本文件中汉字的个数. Input 输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本. Output ...

  8. kali 2020.1 更新源,并安装docker

    先说一句浙大牛逼!!!装个docker折腾了半天,测了半天只有浙大的更新源能用,完美不报错!清华阿里什么的更新源都是渣渣. deb http://mirrors.zju.edu.cn/kali kal ...

  9. 通过一道CTF学习HTTP协议请求走私

    HTTP请求走私 HTTP请求走私 HTTP请求走私是针对于服务端处理一个或者多个接收http请求序列的方式,进行绕过安全机制,实施未授权访问一种攻击手段,获取敏感信息,并直接危害其他用户. 请求走私 ...

  10. java~通过springloaded实现热部署

    之前写过使用自定义的classLoader进行动态加载,热部署:它有很多弊端,我总结一下: 当前项目不能引用第三方包 当前项目必须使用反射的方式调用第三方包的方法 写死的一些路径 springload ...