logstash的安装与使用(读取嵌套json平级格式,grok语法与正则使用,双线程处理,导入elasticsearch)

一、简介与安装

logstash的作用:日志收集

如何工作:

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

编解码器

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

运行Logstash的两种方式

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

安装环境:java8 Centos7

安装直接解压压缩包就可以,移动并重命名到你想到的文件中去,就酱🥳
在这里插入图片描述

二、简单体验

输入输出(配置字符串)

首先需要进入你安装的logstash的bin目录下,执行以下语句,如下图我们可以进行简单的输入输出
./logstash -e 'input { stdin{} } output { stdout {} }'
在这里插入图片描述

修改输出格式为json格式

  如果想修改输出的格式,我们可以将语句进行简单的修改,即可得到如json格式的输出类型
./logstash -e 'input { stdin{} } output { stdout {codec => rubydebug} }'
在这里插入图片描述

三、读取配置文件

输入输出

  1.读取配置文件,首先我们要自定义配置文件,新建一个目录,在目录下创建一个自定义的配置文件,开始编辑
在这里插入图片描述
注意格式规范

input {
    stdin {}
}
output {
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述
  2.加载配置文件,简单执行检查
  ./logstash -f /opt/config/mylog.conf
在这里插入图片描述

读取文件中的内容

(1)读取普通文本

   若要读取文件中的内容,仅需修改配置文件即可

   1.首先你要有需要读取的文件,这里以新建的opt目录下先建的a.txt为例
在这里插入图片描述
   2.修改自定义配置文件
    格式入下,注意格式规范

input {
    file {
        path => "/opt/a.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
output {
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述
   3.测试是否能够成功读取
在这里插入图片描述

(2)读取json格式内容

    若要读取为json格式的内容,修改配置文件如下

input {
    file {
        path => "/opt/a.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        codec => json
    }
}
output {
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述
   以下内容作为测试内容

{"browse":"chrome:true version:81.1","custid":"10000","jzy":{"eventCategory":"btn_click","position":"128 65","time":"2000-01-01 12:00:00","pageName":"index.html","msg":"body"}}
{"browse":"chrome:true version:81.1","custid":"29070","jzy":{"eventCategory":"btn_click","position":"128 65","time":"2000-01-01 12:01:00","pageName":"index.html","msg":"every"}}
{"browse":"chrome:true version:81.2","custid":"26775","jzy":{"eventCategory":"btn_click","position":"128 65","time":"2000-01-01 12:02:00","pageName":"index.html","msg":"body"}}
{"browse":"chrome:true version:81.1","custid":"43694","jzy":{"eventCategory":"href_click","position":"128 65","time":"2000-01-01 12:03:00","pageName":"index.html","msg":"hello"}}

在这里插入图片描述

执行测试结果如下:
在这里插入图片描述

(3)多层嵌套json平级格式

   以上测试出现大json套小json的内容为多层json,输出格式存在不平级的现象
在这里插入图片描述
   需要使用filter过滤,修改配置如下

input {
    file {
        path => "/opt/a.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        codec => json
    }
}
filter {
    mutate {
        add_field => { "@adv" => "%{jzy}" }
    }json {
         source => "@adv" 
         remove_field => [ "@adv","jzy" ]
    }
}
output {
    stdout {
        codec => rubydebug
    }
}

   思路:用@adv接受jzy的json格式的内容,最后删除不需要的内容,是的jzy中的内容与browse的内容平级
在这里插入图片描述

   测试结果展示
在这里插入图片描述

四、grok语法与正则的使用

   现要对以下非json格式进行分割,并将其以json格式输出

68738|event_login|947700000426|192.168.56.1
50553|event_login|948042000426|192.168.56.2
76286|event_login|951224460426|192.168.56.3

   以上内容输入在/opt/b.txt中

方法1:

grok语法

input {
    file {
        path => "/opt/b.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
filter {
    grok {
        match => { "message" => "%{NUMBER:usid}\|%{WORD:uname}\|%{NUMBER:times}\|%{IP:client_ip}" }
        remove_field => [ "message" ]
    }
}
output {
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述

方法2:

正则匹配:

input {
    file {
        path => "/opt/b.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
filter {
    grok {        match => { "message" => "(?<userid>[0-9]+)\|(?<event_name>[a-zA-Z_]+)\|(?<times>[0-9]+)\|(?<clientip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})" }
        remove_field => [ "message" ]
    }
}
output {
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述

展示结果
在这里插入图片描述

五、双线程处理

   同时读取两个文件,这里以a.txt json格式,与b.txt普通格式为例

   修改配置如下

input {
    file {
        path => "/opt/b.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        type => "system"
    }
    file {
        path => "/opt/a.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        codec => json
        type => "action"
    }
}
filter {
    if [type] == "system" {
        grok {            match => { "message" => "(?<userid>[0-9]+)\|(?<event_name>[a-zA-Z_]+)\|(?<times>[0-9]+)\|(?<clientip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})" }
            remove_field => [ "message" ]
        }
    }else {
         mutate {
             add_field => { "@adv" => "%{jzy}" }
         }
         json {
            source => "@adv"
            remove_field => [ "@adv","jzy" ]
         }
    }
}
output {
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述
结果展示:
在这里插入图片描述

六、使用logstash将读取内容导入到elasticsearch

elasticsearch {
            hosts => "http://XXXX:XXX"
            index => "XXXX"
            document_type => "XXXX"
        }

主要格式修改配置文件内容为更改输出为保存到elasticsearch中,一看就懂,👀如下图所示
在这里插入图片描述

多加练习🐱‍💻🐱‍💻🐱‍💻,熟能生巧!💪💪 fighting🤖

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值