ELK------Logstash的部署

  • 1 logstash简介
  • 1.1 Logstash的原理
  • 1.2 执行模型
  • 2 logstash的部署
  • 3 标准输入和标准输出
  • 3.1 多行过滤插件
  • 3.2 grok过滤插件(将信息分开显示)


1 logstash简介

Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为Elasicsearch常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。

1.1 Logstash的原理

Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能

(1)Inputs:用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等
(2)Filters:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等[详细参考]
(3)Outputs:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等
(4)Codecs:Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline

elk logstash file参数 logstash elasticsearch_apache

ogstash 的主要优势:在支持各类插件的前提下提供统一的管道进行日志处理( input-filter-output )

1.2 执行模型

  1. 每个Input启动一个线程,从对应数据源获取数据
  2. Input会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash提供了两个特性:
    Persistent Queues: 通过磁盘上的queue来防止数据丢失
    Dead Letter Queues: 保存无法处理的event(仅支持Elasticsearch作为输出源)
  3. Logstash会有多个pipeline worker, 每一个pipeline
    worker会从队列中取一批数据,然后执行filter和output(worker数目及每次处理的数据量均由配置确定)

2 logstash的部署

(1)安装jdk的环境:rpm -ivh jdk-8u181-linux-x64.rpm

(2)安装logstash:rpm -ivh logstash-7.6.1.rpm

(3)设置环境变量

vim .bash_profile

elk logstash file参数 logstash elasticsearch_vim_02

  • 使修改立刻生效:source .bash_profile

elk logstash file参数 logstash elasticsearch_vim_03

3 标准输入和标准输出

使用Logstash管道来测试一下安装的Logstash。Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。输入插件从数据源那里消费数据,过滤器插件根据你的期望修改数据,输出插件将数据写入目的地。

elk logstash file参数 logstash elasticsearch_数据_04

(1)Logstash最基本的管道(命令方式)

logstash -e 'input { stdin {}  }  output { stdout{} } '
# -e 允许从命令行指定配置

elk logstash file参数 logstash elasticsearch_vim_05


(2)Logstash的管道(通过文件的方式)

  • 监听文件变化,记录一个叫.sincedb的数据库文件来跟踪被监听的日志文件的当前读取位
vim /etc/logstash/conf.d/test.conf
bash
input {
   stdin {}
}
output {
   stdout {}
}
logstash -f /etc/logstash/conf.d/test.conf

elk logstash file参数 logstash elasticsearch_vim_06

(3)标准输出到文件

vim /etc/logstash/conf.d/test.conf
input {
   stdin {}
}
output {
   stdout {}
   file {
     path => "/mnt/testfile"
     codec => line { format => "custom format : %{message}" }

  }
}
logstash -f /etc/logstash/conf.d/test.conf

elk logstash file参数 logstash elasticsearch_apache_07

  • 测试:cat /mnt/testfile

elk logstash file参数 logstash elasticsearch_数据_08


(4)标准输入到文件

vim /etc/logstash/conf.d/test.conf
input {
   file {
   path => "/mnt/testfile"
   start_position => "beginning"
  }
}
output {
   stdout {}
 #  file {
 #    path => "/mnt/testfile" 
 #    codec => line { format => "custom format : %{message}" }  

 # }
}
logstash -f /etc/logstash/conf.d/test.conf

elk logstash file参数 logstash elasticsearch_数据_09

vim   /etc/logstash/conf.d/test.conf
input {
   file {
   path => "/var/log/messages"
   start_position => "beginning"
  }
}
output {
   stdout {}
 #  file {
 #    path => "/mnt/testfile" 
 #    codec => line { format => "custom format : %{message}" }  

 # }
   elasticsearch{
       hosts =>["172.25.12.1:9200"]
       index => "syslog-%{+yyyy.MM.dd}"
  }
}
logstash -f /etc/logstash/conf.d/test.conf

elk logstash file参数 logstash elasticsearch_apache_10

elk logstash file参数 logstash elasticsearch_vim_11

elk logstash file参数 logstash elasticsearch_apache_12

server3和server4开放远程

  • 编辑配置文件:vim /etc/rsyslog.conf

elk logstash file参数 logstash elasticsearch_数据_13

  • 重启服务:systemctl restart rsyslog.service
  • 编辑配置文件:vim /etc/logstash/conf.d/test.conf
input
 {
 #  file {
 #  path => "/var/log/messages"
 #  start_position => "beginning"
 #  }
   syslog {} ## 收集日志信息,默认监听514端口
}
output {
   stdout {}
 #  file {
 #    path => "/mnt/testfile" 
 #    codec => line { format => "custom format : %{message}" }  

 # }
   elasticsearch{
       hosts =>["172.25.12.1:9200"]  ## 主机
       index => "messages-%{+yyyy.MM.dd}"
  }
}

logstash -f /etc/logstash/conf.d/test.conf

elk logstash file参数 logstash elasticsearch_数据_14

3.1 多行过滤插件

多行过滤可以把多行日志记录合并为一行事件

编辑文件:vim /etc/logstash/conf.d/mutli.conf

input {
	file {
        path=> "/var/log/my-es.log"
        start_position => "beginning"
	codec => multiline {
		pattern => "^\["
		negate => true
		what => previous
		}
	}
}

output {
	# stdout {}
       elasticsearch{
       hosts =>["172.25.12.1:9200"]
       index => "my-es-%{+yyyy.MM.dd}"
  }

}

执行:logstash -f /etc/logstash/conf.d/mutli.conf

elk logstash file参数 logstash elasticsearch_数据_15

elk logstash file参数 logstash elasticsearch_apache_16

3.2 grok过滤插件(将信息分开显示)

server5:安装apache服务

压测:ab -c1 -n 100 http://172.25.12.5/index.html

编辑文件:/etc/logstash/conf.d/apache.conf

input {
   file {
   path => "/var/log/httpd/access_log"
   start_position => "beginning"
   }
  # syslog {}
}
output {
   stdout {}
 #  file {
 #    path => "/mnt/testfile" 
 #    codec => line { format => "custom format : %{message}" }  

 # }
   elasticsearch{
       hosts =>["172.25.12.1:9200"]
       index => "apache-%{+yyyy.MM.dd}"
  }
}

执行:logstash -f /etc/logstash/conf.d/apache.conf

elk logstash file参数 logstash elasticsearch_apache_17


elk logstash file参数 logstash elasticsearch_apache_18


elk logstash file参数 logstash elasticsearch_apache_19

删除日志文件

elk logstash file参数 logstash elasticsearch_elk logstash file参数_20


编辑文件:/etc/logstash/conf.d/apache.conf

input {
   file {
   path => "/var/log/httpd/access_log"
   start_position => "beginning"
   }
  # syslog {}
}
filter {
   grok {
      match => { "message" => "%{HTTPD_COMBINEDLOG}" }
   }
}
output {
   stdout {}
 #  file {
 #    path => "/mnt/testfile" 
 #    codec => line { format => "custom format : %{message}" }  

 # }
   elasticsearch{
       hosts =>["172.25.12.1:9200"]
       index => "apache-%{+yyyy.MM.dd}"
  }
}

执行: logstash -f /etc/logstash/conf.d/apache.conf

elk logstash file参数 logstash elasticsearch_vim_21

elk logstash file参数 logstash elasticsearch_elk logstash file参数_22