大数据——Logstash(日志收集)

ELK Stack

Elasticsearch(存储+检索+分析),简称ES
Logstash(日志收集)
Kibana(可视化)
在这里插入图片描述

Logstash简介

具备实时数据传输能力的管道

  • 支持多种数据源输入
  • 支持多种过滤器
  • 支持多种数据输出目的地

在这里插入图片描述

在ELK中作为日志收集器

在这里插入图片描述

安装Logstash

ELK安装

验证安装

$ /opt/logstash/bin/logstash --version

初体验Logstash

  • Hello Logstash!
$ /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

Hello Logstash! #输入
2019-03-15T05:59:18.012Z master Hello Logstash! #输出

Logstash如何工作

Logstash对任何事件处理分为三个阶段

  • 输入(input):必须,如stdin、file、http、exec…
  • 过滤器(filter):可选,如grok、mutate…
  • 输出(output):必须,如stdout、elasticsearch、file…

编解码器

  • 作为输入或输出插件的一部分,分离传输与序列化过程

运行Logstash的两种方式

logstash -e CONFIG_STRING	//使用给定的配置字符串,其格式同配置文件
logstash -f  CONFIG_PATH	//读取配置文件

Logstash配置语法(一)

配置文件结构

# 输入
input {
  ...   
}
# 过滤器
filter {
  ...
}
# 输出
output {
  ...
}
# 验证文件
logstash -f CONFIG_PATH -t

Logstash配置语法(二)

Logstash数据类型

数据类型说明示例
array数组,可以是单个或多个字符串值path => [ “/var/log/messages”, “/var/log/*.log” ]
path => “/data/mysql/mysql.log”
boolean布尔值ssl_enable => true
bytes字节单位my_bytes => “1113” # 1113 bytes
my_bytes => “180 mb” # 180000000 bytes
codes表示编码名称codec => “json”
hash表示键值对,注意多个键值对用空格分隔,而不是逗号match => {“field1” => “value1” “field2” => “value2” … }
number必须是有效的数值,浮点数或者整数port => 33
string字符串name => "Hello world"
name => ‘It’s a beautiful day’
path一个代表有效的操作系统路径my_path => “/tmp/logstash”

输入插件

file:从文件中获得事件流

input {
    file {
        path =>"/var/log/message" #path必须
        start_position =>"beginning"
        sincedb_path => "/dev/null"
    }
}
filter {}
output {
    stdout {}
}
input {
    file {
        path =>["/var/log/messages","/var/log/messages-2019*"] #多文件输入
    }
}

编解码器

json

[root#master date]# cat stu.json
{"id":1,"studentNo":"TH-CHEM-2016-C001","interest":"basketball"},{"id":2,"studentNo":"TH-PHY-2016-C001","interest":"talking"},
{"id":3,"studentNo":"BU-POLI-2016-C001","interest":"music"}

rubydebug

     "classof" => 2016,
        "path" =>"/data/stu.json",
          "id" =>3,
        "name" =>"Da Vinci",
   "studnetNo" =>"BU-POLI-2016-C001",
    "interest" =>"music",
        "host" =>"master"
  "@timestamp" =>2020-09-20T08:59:07.251Z,
    "@version" =>"1"
input {
    file {
        path =>"/data/stu.json"
        start_position =>"beginning"
        sincedb_path => "/dev/null"
        codec => "json"
    }
}
filter {}
output {
    stdout { codec => "rubydebug"}
}

过滤器(一)

grok:使用正则表达式解析任意文本和结构

100 10.10.0.1 ——>%{NUMBER:duration} %{IP:client}
#NUMBER:内置匹配规则 
#duration 字段名
input{stdin{}}
filter{
        grok{
                match=>{"message"=>"%{NUMBER:duration} %{IP:client}"}
        }
}
output{ stdout{codec=>rubydebug}}

过滤器(二)

grok自定义模式

(?<field_name>the pattern here)
2019-01-01 0:0:0 100 10.10.0.1  ————————>
(?<date>\d*[./-]\d*[./-]\d* \d*:\d*:\d*) %{NUMBER:duration} %{IP:client}
       "message" =>"2019-01-01 0:0:0 100 10.10.0.1",
    "@timestamp" =>2019-03-18T01:50:44.409Z,
        "client" =>"10.10.0.1",
      "@version" =>"1",
          "host" =>"master",
          "date" =>"2019-01-01 0:0:0",
      "duration" =>"100"

输出插件

stout
file
elasticsearch

output { #可以同时使用多个输出插件
    stdout{codec=>rubydebug} 
    file {
       path =>"/root/message.out"  #file默认以JSON格式输出每行
    } 
    elasticsearch{
       hosts=>["localhost:9200"]
       index=>"syslog" #默认为索引名称为“logstash-%{+YYYY.MM>DD}}
}

条件判断(一)

控制filter和output处理特定事件

if EXPRESSION {
  ...
} else if EXPRESSION {
  ...
} else {
  ...
}

比较操作

  • 相等:==,!=,<,>,<=,>=
  • 正则:=~(匹配正则),!~(不匹配正则)
  • 包含:in(包含),not in(不包含)
  • 布尔:and(与),or(或),nand(与非),xor(异或)
  • 取反:!(表达式)

条件判断(二)

控制duration<100的行输出至stdout

input{stdin{}}
filter{
        grok{
                match=>{"message"=>"%{NUMBER:duration} %{IP:client}"}
        }
        mutate{convert=>["duration","integer"]} #mutate过滤器可以重命名、删除、替换和修改字段
}
output{ 
       if [duration]<100{ #[字段名]表示字段引用
               stdout{codec=>rubydebug}
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值