• Logstash在Linux上安装部署


    Logstash 简介:

      Logstash 是一个实时数据收集引擎,可收集各类型数据并对其进行分析,过滤和归纳。按照自己条件分析过滤出符合数据导入到可视化界面。它可以实现多样化的数据源数据全量或增量传输,数据标准格式处理,数据格式化输出等的功能,常用于日志处理。工作流程分为三个阶段:

      (1)input数据输入阶段,可接收oracle、mysql、postgresql、file等多种数据源;
      (2)filter数据标准格式化阶段,可过滤、格式化数据,如格式化时间、字符串等;
      (3)output数据输出阶段,可输出到elasticsearch、mongodb、kfka等接收终端。
      那么,接下来将会对每个阶段进行讲解。

    一、官网下载安装

    1、下载logstash-6.6.0安装包,下载路径:logstash-6.6.0,然后解压之es的同级目录(方便管理);或直接在服务器上下载:

        wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz

    2、将安装包上次到服务器,然后解压安装包,例如解压到:/usr/local/

            tar –zxvf logstash-6.6.0.tar.gz 

      重命名安装目录

        mv logstash-6.6.0 logstash

    二、使用测试

    注:此处只是简单测试下Logstash的基本功能

    1.接收控制台输入,Logstash解析输出到控制台 
      在Logstash目录下创建test文件夹:

    1 [root@cdh4 logstash]# mkdir test
    2 [root@cdh4 logstash]# cd test
    3 [root@cdh4 test]# vim std_std.conf

      在test目录下创建 std_std.conf 文件,添加内容:

    1 input {
    2     stdin{
    3     }
    4 }
    5 output {
    6     stdout{
    7     }
    8 }

      然后到bin目录下启动Logstash(基于std_std.conf):

    1 ./logstash -f ../test/std_std.conf

      -f 是指基于配置文件的路径:

      控制台输入测试:

    2.从文件读取,Logstash解析输出到控制台 
      我是从取出tomcat的当天access_log作为读取文件,没有该文件的可以复制下面一段内容做成测试文件

     1 [root@cdh4 test]# vim access_log.2018-04-10.log
     2 10.2.17.9 - - [10/Apr/2018:09:06:22 +0800] "GET /static/logshow/css/component.css HTTP/1.1" 304 -
     3 10.2.17.9 - - [10/Apr/2018:09:06:22 +0800] "GET /static/logshow/js/EasePack.min.js HTTP/1.1" 304 -
     4 10.2.17.9 - - [10/Apr/2018:09:06:22 +0800] "GET /static/logshow/js/TweenLite.min.js HTTP/1.1" 304 -
     5 10.2.17.9 - - [10/Apr/2018:09:06:22 +0800] "GET /static/logshow/js/rAF.js HTTP/1.1" 304 -
     6 10.2.17.9 - - [10/Apr/2018:09:06:22 +0800] "GET /static/logshow/js/demo-1.js HTTP/1.1" 304 -
     7 10.2.17.9 - - [10/Apr/2018:09:06:22 +0800] "GET /static/logshow/img/demo-1-bg.jpg HTTP/1.1" 304 -
     8 10.2.17.9 - - [10/Apr/2018:09:06:30 +0800] "GET / HTTP/1.1" 302 -
     9 10.2.17.9 - - [10/Apr/2018:09:06:30 +0800] "GET /login HTTP/1.1" 200 3271
    10 10.2.17.9 - - [10/Apr/2018:09:06:36 +0800] "POST /login HTTP/1.1" 302 -
    11 10.2.17.9 - - [10/Apr/2018:09:06:36 +0800] "GET / HTTP/1.1" 200 11776
    12 10.2.17.9 - - [10/Apr/2018:09:06:36 +0800] "GET /static/css/font-awesome.min.css?v=4.4.0 HTTP/1.1" 304 -

      在test目录下创建 file_std.conf 文件,添加内容:

     1 input{
     2     file{
     3         path =>"/home/logstash/logstash-5.4.0/test/access_log.2018-04-10.log"
     4         start_position=>"beginning"
     5     }
     6 }
     7 
     8 filter{
     9     grok{
    10         match=>{
    11             "message"=>"%{DATA:clientIp} - - [%{HTTPDATE:accessTime}] "%{DATA:method} %{DATA:requestPath} %{DATA:httpversion}" %{DATA:retcode} %{DATA:size} "%{DATA:fromHtml}" "%{DATA:useragent}""
    12         }
    13 
    14         remove_field=>"message"
    15     }
    16     date{
    17         match=>["accessTime","dd/MMM/yyyy:HH:mm:ss Z"]
    18     }
    19 }
    20 
    21 output{
    22     stdout{
    23         codec=>rubydebug
    24     }
    25 }  

    这个配置文件相对比较复杂,而且我们一般在使用elk的时候logstash的配置文件基本也是和这个类似,大同小异了,这里对关键部分详细解说一下。更深入的内容和使用方式,大家可以到elastic官网或者到logstash的最佳实战页面去看,网址是:http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html。

    input/file/path:这里指定了要对哪个日志文件进行扫描。如果希望扫描多个文件,可以使用*这个路径通配符;或者使用多个日志路径以数组形式提供(path=>[“outer-access.log”,”access.log”]);或者直接给定一个目录,logstash会扫描所有的文件,并监听是否有新文件。

    filter/grok/match/message:里面的DATA和HTTPDATE都是grok语法内置的正则表达式,DATA匹配任意字符,HTTPDATE匹配joda类型的日期格式字符。上例中”[“是匹配“[”。

    filter/grok/match/date:是对HTTPDATE日期格式的解释,joda可以支持很多复杂的日期格式,需要在这里指明才能正确匹配。

    remove_field=>”message”:用处是去掉原有的整个日志字符串,仅保留filter解析后的信息。你可以试着去掉这一句就明白他的用处了。

    然后启动就可以直接看到解析输出到控制台的内容了:

    1 ./logstash -f ../test/file_std.conf

    3.接收控制台输入,Logstash解析输出到ElasticSearch集群 

    在test目录下创建 file_es.conf 文件,添加内容:

     1 input{
     2         stdin {}
     3 }
     4 output {
     5         elasticsearch {
     6                 hosts => ["10.10.10.34:9200"]
     7                 index => "yj_index"
     8         }
     9         stdout { codec => rubydebug}
    10 }

    然后执行测试:

    1 ./logstash -f ../test/file_es.conf

    可以看到控制台出现了ES-JSON:

    再通过head插件查看这些内容有没有存进去:

    可以看到,一切OK

  • 相关阅读:
    cityscapes和Mapillary Vistas两种不同分割数据集的label映射
    探究Z-Order
    Java ——对Swing、AWT和SWT的认识 原创
    UOJ-581 NOIP2020 字符串匹配
    UOJ-618 JOISC2021 聚会 2
    Codeforces Round #740 (Div. 1, based on VK Cup 2021
    PipeCAD
    第三次全国国土调查相关信息记录
    统计研究区内Landsat影像数量
    GEE数据导出注意事项
  • 原文地址:https://www.cnblogs.com/haw2106/p/10410916.html
Copyright © 2020-2023  润新知