浅尝 Elastic Stack (二) Logstash
一、安装与启动
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 导入的数据
参考
浅尝 Elastic Stack (二) Logstash的更多相关文章
- 浅尝 Elastic Stack (三) Logstash + Beats
本文使用 Filebeat,如果没有安装需要安装: curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat- ...
- 浅尝 Elastic Stack (五) Logstash + Beats + Kafka
在 Elasticsearch.Kibana.Beats 安装 中讲到推荐架构: 本文基于 Logstash + Beats 读取 Spring Boot 日志 将其改为上述架构 如果没有安装 Kaf ...
- 浅尝 Elastic Stack (四) Logstash + Beats 读取 Spring Boot 日志
一.Spring Boot 日志配置 采用 Spring Boot 默认的 Logback: <?xml version="1.0" encoding="UTF-8 ...
- 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装
Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...
- Elastic Stack之Logstash进阶
Elastic Stack之Logstash进阶 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用GeoLite2和logstash 过滤插件的geoip案例 1>. ...
- 浅尝Java(二、代码折叠插件的使用)
主题:eclipse代码折叠插件的使用. 工作中在使用eclipse开发Java项目时,我们会写很多if,for循环啊什么的,这使得我们的项目代码会有很多很多行.写完后要想检查或者查看,就要从头一行一 ...
- Elastic Stack核心产品介绍-Elasticsearch、Logstash和Kibana
Elastic Stack 是一系列开源产品的合集,包括 Elasticsearch.Kibana.Logstash 以及 Beats 等等,能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地 ...
- Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 实现日志的自动采集、搜索和分析
Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据 ...
- 浅尝key-value数据库(二)——MongoDB的优与劣
浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源 ...
随机推荐
- svg究竟是什么?
svg究竟是什么? 1 要点 要点1:svg与jpg/png等格式的用途完全不同,不可相提并论,没有可比性,不可互相替代. 要点2:日常生活中,我们用相机拍摄自然景象得到的照片和视频,能且只能用jpg ...
- Navicat无法直连MySQL怎么办?
本文背景 Navicat是图形化操作MySQL的强大工具,但是当数据库的服务器没有开放3306端口给办公网络时,在办公网使用navicat连接数据库是连不上的.要操作数据库,只能先ssh登陆到数据库服 ...
- 服务器断电导致的ORACLE异常 : ORA-00214 ORA-01033 ORA-01034 ORA-00172 ORA-27101
工作环境中的集群迁移之后,oracle出了挺多问题,最开始一直没找到原因,后来发现做迁移的人是冷迁移的,且数据库节点是硬关机的,惊了( 表现症状有不能登陆,登录了不能操作等 第一个报的是 ORA-00 ...
- Redis下载
Windows版下载地址 https://github.com/tporadowski/redis/releases Linux版下载地址 https://redis.io/download
- c++ 11字符串与string转换常用函数
这里主要介绍一下string to int 其他方法与这个类似,可到头文件 <string> 中查看 @_Str 转换的字符串 @_Idx 转换的长度(位数) @_Base 进制 doub ...
- 缩点Tarjan算法解析+[题解]受欢迎的牛
(注:我在网上找了一些图,希望原博主不要在意,谢谢,(。☉౪ ⊙。)) 首先来了解什么是强连通分量 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向 ...
- CSS属性(边框)
1.边框 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="U ...
- Linux Shell操作 执行C代码显示当前路径
在unix系统下一切皆文件,文件夹是文件的一种.设备也会对应到相应的文件类型. 基础知识: . 代表当前路径 ..代表上级目录(父目录) / 在路径的最前边的时候代表树根.在路径中间的时候只不过是路径 ...
- kali 系列学习12-使用Wifite破解无线网络
一些破解无线网络程序是使用Aircrack-ng工具集,并添加了一个图形界面或使用文本菜单的形式来破解无线网络.这使得用户使用它们更容易,而且不需要记住任何命令.本节将介绍使用命令行工具Wifite, ...
- 基于Pycharm的Python开发环境配置
基于Pycharm的Python开发环境配置 编辑于2020-11-18 Python安装 双击桌面的Python3.x安装包. 勾选Add to path. 方便起见,选择Install now.下 ...