ELK学习1.3 Logstash(6.3.2)搭建及配置

环境:

CentOS 7,Logstash6.3.2

摘要说明:

Logstash:Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

本篇文章主要讲述Logstash的安装及相关配置

步骤:

1.Logstash版本选择及安装

为了保持与Elasticsearch的版本一致,我们也选择版本6.3.2;我们可以从https://www.elastic.co/downloads选择要下载的版本链接:

# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.rpm
# rpm -hvi logstash-6.3.2.rpm

安装完成之后我们可以看到配置的路径为/etc/logstash;安装路径为/usr/share/logstash/;

2.Logstash配置文件详解

首先我们进入到安装路径下可以看到相关配置文件:

# cd /etc/logstash/
# ls
conf.d  jvm.options  log4j2.properties  logstash.yml  pipelines.yml  startup.options
  • conf.d:logstash日志解析文件保存在此处;
  • jvm.options:内存相关设置
  • log4j2.properties:日志相关配置
  • logstash.yml:logstash系统相关配置
  • pipelines.yml:管道配置
  • startup.options:启动配置

一般测试时需要配置内存,默认内存为1g;

3.Logstash日志解析文件配置详解

Logstash 通过管道进行运作,管道有两个必需的元素,输入和输出,还有一个可选的元素,过滤器。

输入插件从数据源获取数据,过滤器插件根据用户指定的数据格式修改数据,输出插件则将数据写入到目的地。如下图:

这中间的配置都是通过日志解析文件来进行配置,日志解析配置文件的框架共分为三个模块:input,output,filter;

配置文件一般放在/etc/logstash/conf.d/目录下,配置文件的写法如下:

# 日志导入
input {
}
# 日志筛选匹配处理
filter {
}
# 日志匹配输出
output {
}

input 模块:

input模块下可以使用多个插件:如syslog、file、redis、beats等插件:

  • file #从文件系统上的文件读取,非常类似于UNIX命令tail -F
  • syslog #在众所周知的端口514上侦听系统日志消息,并根据RFC3164格式进行解析
  • redis #用redis通道和redis列表从redis服务器读取数据。 Redis经常用作集中式Logstash安装中的“broker”,它将来自远程Logstash“shippers”的Logstash事件排队。
  • beats  #处理由Filebeat发送的事件。

file插件配置详解:如下,可酌情选择进行配置,可参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html

input {
    # file为常用文件插件,插件内选项很多,可根据需求自行判断,可同时配置多个
    file {
        # type字段,可表明导入的日志类型,这里的type,对应了ES中index中的type,即如果输入ES时,没有指定type,那么这里的type将作为ES中index的type。
        type => "httpd_access"
        # 要导入的文件的位置,可以使用*,例如/var/log/nginx/*.log
        path => "/etc/httpd/logs/access_log"
        # 要排除的文件
        Excude =>”*.gz”
        #start_position可以设置为beginning或者end,beginning表示从头开始读取文件,end表示读取最新的,这个也要和ignore_older一起使用。
        start_position => "beginning"
        # ignore_older表示了针对多久的文件进行监控,默认一天,单位为秒,可以自己定制,比如默认只读取一天内被修改的文件,0为无限制,单位为秒
        ignore_older => 0  
        # sincedb_path表示文件读取进度的记录,每行表示一个文件,每行有两个数字,第一个表示文件的inode,第二个表示文件读取到的位置(byteoffset)。默认为$HOME/.sincedb*;记录文件上次读取位置,输出到null表示每次都从文件首行开始解析
        sincedb_path => "/dev/null"
        #这个值默认是\n 换行符,如果设置为空"",那么后果是每个字符代表一个event
        delimiter => ""
       
    }   
   file {
        path => "/var/lib/mysql/slow.log"
        start_position => "beginning"
        ignore_older => 0  
        .....
    }   
}

redis插件配置详解:如下,可酌情选择进行配置可参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-redis.html

input {
    # redis插件为常用插件,插件内选项很多,可根据需求自行判断
    redis {
        # EVAL命令返回的事件数目,设置为5表示一次请求返回5条日志信息
        batch_count => 1 
        # logstash redis插件工作方式
        data_type => "list" 
        # 监听的键值
        key => "logstash-test-list" 
        # redis地址
        host => "127.0.0.1" 
        # redis端口号
        port => 6379 
        # 如果有安全认证,此项为认证密码
        password => "123qwe" 
        # 如果应用使用了不同的数据库,此为redis数据库的编号,默认为0。
        db => 0 
       # 启用线程数量
        threads => 1 
      }
}

beats插件配置详解:如下,可酌情选择进行配置,可参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html

input {
  beats {
    #指定监听端口
    port => 5044
    #要监听的ip地址,默认0.0.0.0;
    host => '0.0.0.0'
  }
}

更多input插件可参考:https://www.elastic.co/guide/en/logstash/current/input-plugins.html

filter 模块:

filter模块下主要插件grok、mutate、ruby、date、json如下:

grok插件配置详解:如下,可酌情选择进行配置,可参考https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

filter{
    # 解析任意文本并且结构化他们。grok目前是logstash中最好的解析非结构化日志并且结构化他们的工具。这个工具非常适合syslog、apache log、mysql log之类的人们可读日志的解析
    grok{
       # 正则匹配日志,可以筛选分割出需要记录的字段和值
        match => { "message" => "正则表达式"}
       # 删除不需要记录的字段
        remove_field => ["message"]
    }
}

mutate插件配置详解:如下,可酌情选择进行配置,可参考https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html

filter {  
    #mutate过滤器允许您对字段执行常规突变。您可以重命名,删除,替换和修改事件中的字段。
    mutate {
        #将字段的值转换为其他类型,例如将字符串转换为整数。如果字段值是数组,则将转换所有成员。如果该字段是哈希,则不会采取任何操作。
        convert => [
                    #把request_time的值装换为浮点型
                    "request_time", "float",
                    #costTime的值转换为整型
                    "costTime", "integer"
                    ]
        #将现有字段复制到另一个字段。将覆盖现有目标字段
        copy => { "source_field" => "dest_field" }
        #将正则表达式与字段值匹配,并将所有匹配替换为替换字符串。仅支持字符串或字符串数​​组的字段。对于其他类型的领域,将不采取任何行动。
        gsub => [
         #用下划线替换所有正斜杠
         "fieldname", "/", "_",
         #替换反斜杠,问号,哈希和减少
         #带点“。”
         "fieldname2", "[\\?#-]", "."
         ]
    }   

ruby插件配置详解:如下,可酌情选择进行配置,可参考https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html

filter {
    #ruby插件可以使用任何的ruby语法,无论是逻辑判断,条件语句,循环语句,还是对字符串的操作,对EVENT对象的操作,都是极其得心应手的。
    ruby {
        #ruby插件有两个属性,一个init 还有一个code
        #init属性是用来初始化字段的,你可以在这里初始化一个字段,无论是什么类型的都可以,这个字段只是在ruby{}作用域里面生效。
        #这里我初始化了一个名为field的hash字段。可以在下面的coed属性里面使用。
        init => [field={}]
        #code属性使用两个冒号进行标识,你的所有ruby语法都可以在里面进行。
        #下面我对一段数据进行处理。
        #首先,我需要在把message字段里面的值拿到,并且对值进行分割按照“|”。这样分割出来的是一个数组(ruby的字符创处理)。
        #第二步,我需要循环数组判断其值是否是我需要的数据(ruby条件语法、循环结构)
        #第三步,我需要吧我需要的字段添加进入EVEVT对象。
        #第四步,选取一个值,进行MD5加密
        #什么是event对象?event就是Logstash对象,你可以在ruby插件的code属性里面操作他,可以添加属性字段,可以删除,可以修改,同样可以进行树脂运算。
        #进行MD5加密的时候,需要引入对应的包。
        #最后把冗余的message字段去除。
        code => "
            array=event。get('message').split('|')
            array.each do |value|
                if value.include? 'MD5_VALUE'
                    then 
                        require 'digest/md5'
                        md5=Digest::MD5.hexdigest(value)
                        event.set('md5',md5)
                end
                if value.include? 'DEFAULT_VALUE'
                    then
                        event.set('value',value)
                end
            end
             remove_field=>"message"
        "
    }
}

json插件配置详解:如下,可酌情选择进行配置,可参考https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html

filter {
  #这是一个JSON解析过滤器。它需要一个包含JSON的现有字段,并将其扩展为Logstash事件中的实际数据结构。
  #默认情况下,它会将解析后的JSON放在Logstash事件的根(顶层)中,但是可以使用配置将此过滤器配置为将JSON放入任意任意事件字段中 target。
  json {
    #指定json所在位置如果您在message字段中有JSON数据
    source => "message"
    #如果此过滤器成功,请向此事件添加任意字段。字段名称可以是动态的,并使用包含事件的部分内容%{field}。
    add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
    #移除字段
    remove_field => [ "foo_%{somefield}" ]
  }
}

更多可参考:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

output模块:

output模块下主要插件elasticsearch 、file、redis、email、tdout 等如下:

elasticsearch插件配置详解:如下,可参考https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

output {
     #可以同时输出到多个终端
     #筛选过滤后的内容输出到终端显示
     tdout { codec => "rubydebug" }
    
     #导出到elasticsearch
     elasticsearch {
        # 导出格式为json
        codec => "json"
        # ES地址+端口
        hosts => ["127.0.0.1:9200"]
        # 设置索引,可以使用时间变量
        index => "logstash-slow-%{+YYYY.MM.dd}"
        # ES如果有安全认证就使用账号密码验证,无安全认证就不需要
        user => "admin"
        password => "xxxxxx"
     }   
}

其他可参考:https://www.elastic.co/guide/en/logstash/current/output-plugins.html

4.Logstash启动及常用命令

logstash常用命令如下:

-e :指定logstash的配置信息,可以用于快速测试;

-f :指定logstash的配置文件;可以用于生产环境;

 -l :指定日志路径,否则输出到标准输出

通常想执行logtash命令需先到根路径下:

# cd /usr/share/logstash/

 再使用/bin/logstash执行命令,如:

# bin/logstash -f logstash.conf

为了更好的的执行logstash命令,创建一个软连接,每次执行命令的时候不用在写安装路劲(默认安装在/usr/share下):

# ln -s /usr/share/logstash/bin/logstash /bin/

logstash -e示例如下:

通过-e参数指定logstash的配置信息,用于快速测试,直接输出到屏幕。--quiet:日志输出安静模式
$ logstash -e "input {stdin{}} output {stdout{}}" --quiet
# 指定输出编码为rubydebug
$ logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

logstash -f示例如下:

首先创建日志解析文件到/etc/logstash/conf.d/下如:

# vi /etc/logstash/conf.d/logstash-simple.conf

 从头开始读取/var/log/httpd/access_log,输出到elasticsearch 且指定索引:

input {
file {
    path => "/var/log/httpd/access_log"
    start_position => "beginning"
  }
 }
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "access-%{+YYYY.MM.dd}"
   }
  stdout { codec => rubydebug }
}

后台启动并指定日志文件:

# nohup ./logstash -f ../conf/logstach.conf -l ../log/logstash.log &

启动后结合上篇的Elasticsearch在head插件中查看导入日志:

ELK学习1.3 Logstash(6.3.2)搭建及配置_第1张图片

 点击数据浏览查看日志:

ELK学习1.3 Logstash(6.3.2)搭建及配置_第2张图片

你可能感兴趣的:(ELK搭建,服务搭建及应用)