ElasticSearch实战系列六: Logstash快速入门和实战

前言

本文主要介绍的是ELK日志系统中的Logstash快速入门和实战php

ELK介绍

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。html

  • Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特色有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。java

  • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。通常工做方式为c/s架构,client端安装在须要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操做在一并发往elasticsearch上去。node

  • Kibana 也是一个开源和免费的工具,Kibana能够为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,能够帮助汇总、分析和搜索重要数据日志。linux

  • Filebeat是一个轻量型日志采集器,能够方便的同kibana集成,启动filebeat后,能够直接在kibana中观看对日志文件进行detail的过程。nginx

Logstash介绍

Logstash是一个数据流引擎:apache

它是用于数据物流的开源流式ETL引擎,在几分钟内创建数据流管道,具备水平可扩展及韧性且具备自适应缓冲,不可知的数据源,具备200多个集成和处理器的插件生态系统,使用Elastic Stack监视和管理部署vim

Logstash包含3个主要部分: 输入(inputs),过滤器(filters)和输出(outputs)。
inputs主要用来提供接收数据的规则,好比使用采集文件内容;
filters主要是对传输的数据进行过滤,好比使用grok规则进行数据过滤;
outputs主要是将接收的数据根据定义的输出模式来进行输出数据,好比输出到ElasticSearch中.数组

示例图:ruby

在这里插入图片描述

Logstash安装使用

1、环境选择

Logstash采用JRuby语言编写,运行在jvm中,所以安装Logstash前须要先安装JDK。若是是6.x的版本,jdk须要在8以上,若是是7.x的版本,则jdk版本在11以上。若是Elasticsearch集群是7.x的版本,可使用Elasticsearch自身的jdk。

Logstash下载地址推荐使用清华大学或华为的开源镜像站。

下载地址:

https://mirrors.huaweicloud.com/logstash
https://mirrors.tuna.tsinghua.edu.cn/ELK

ELK7.3.2百度网盘地址:
连接:https://pan.baidu.com/s/1tq3Czywjx3GGrreOAgkiGg
提取码:cxng

2、JDK安装

注:JDK版本请以自身Elasticsearch集群的版本而定。

1,文件准备

解压下载下来的JDK
tar -xvf jdk-8u144-linux-x64.tar.gz
移动到opt/java文件夹中,没有就新建,而后将文件夹重命名为jdk1.8

mv  jdk1.8.0_144 /opt/java
mv  jdk1.8.0_144  jdk1.8

2,环境配置

首先输入 java -version
查看是否安装了JDK,若是安装了,但版本不适合的话,就卸载


输入

rpm -qa | grep java

查看信息

而后输入:

rpm -e --nodeps “你要卸载JDK的信息”
如: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64

在这里插入图片描述

确认没有了以后,解压下载下来的JDK

tar  -xvf   jdk-8u144-linux-x64.tar.gz

移动到opt/java文件夹中,没有就新建,而后将文件夹重命名为jdk1.8。

mv  jdk1.8.0_144 /opt/java
mv  jdk1.8.0_144  jdk1.8

而后编辑 profile 文件,添加以下配置
输入: vim /etc/profile

export JAVA_HOME=/opt/java/jdk1.8
export JRE_HOME=/opt/java/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

添加成功以后,输入:

source /etc/profile

使配置生效,而后查看版本信息输入:

java  -version

3、Logstash安装

1,文件准备

将下载下来的logstash-7.3.2.tar.gz的配置文件进行解压
在linux上输入:

tar -xvf logstash-7.3.2.tar.gz

而后移动到/opt/elk 里面,而后将文件夹重命名为 logstash-7.3.2
输入

mv logstash-7.3.2.tar /opt/elk
mv logstash-7.3.2.tar logstash-7.3.2

2,配置修改

这里简单介绍一下 inputs,filters、outputs三个主要配置。

inputs

inputs主要使用的几个配置项:

  • path:必选项,读取文件的路径,基于glob匹配语法。 exclude:可选项,数组类型,排除不想监听的文件规则,基于glob匹配语法。

  • sincedb_path:可选项,记录sinceddb文件路径以及文件读取信息位置的数据文件。

  • start_position:可选项,能够配置为beginning/end,是否从头读取文件。默认从尾部值为:end。

  • stat_interval:可选项,单位为秒,定时检查文件是否有更新,默认是1秒。

  • discover_interval:可选项,单位为秒,定时检查是否有新文件待读取,默认是15秒

  • ignore_older:可选项,单位为秒,扫描文件列表时,若是该文件上次更改时间超过设定的时长,则不作处理,但依然会监控是否有新内容,默认关闭。

  • close_older:可选项,单位为秒,若是监听的文件在超过该设定时间内没有新内容,会被关闭文件句柄,释放资源,但依然会监控是否有新内容,默认3600秒,即1小时。

  • tags :可选项,在数据处理过程当中,由具体的插件来添加或者删除的标记。 type :可选项,自定义处理时间类型。好比nginxlog。

一个简单的input输入示例:

input {
  file {
    path => "/home/logs/mylog.log"
  }
}

上述这段配置表示采集/home/logs/mylog.log的日志,若是是采集整个目录的话,则能够经过*通配符来进行匹配,如

path => "/home/logs/*.log"

表示采集该目录下全部后缀名为.log的日志。

经过logstash-input-file插件导入了一些本地日志文件时,logstash会经过一个名为sincedb的独立文件中来跟踪记录每一个文件中的当前位置。这使得中止和从新启动Logstash成为可能,并让它在不丢失在中止Logstashwas时添加到文件中的行数的状况下继续运行。
在调试的时候,咱们可能但愿取消sincedb的记录功能,使文件每次都能从头开始读取。此时,咱们能够这样来作
示例:

input {
  file {
    path => "/home/logs/mylog.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

若是想使用HTTP输入,能够将类型改为http,只不过里面的参数有不一样而已,tcp、udp、syslog和beats等等同理。
示例:

input {
  http {
    port => 端口号
  }
}
filter

filter主要是实现过滤的功能,好比使用grok实现日志内容的切分等等。

好比对apache的日志进行grok过滤
样例数据:

127.0.0.1 - - [13/Apr/2015:17:22:03 +0800] "GET /router.php HTTP/1.1" 404 285 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

grok:

%{COMBINEDAPACHELOG}

这里咱们可使用kibana的grok来进行分析,grok在开发工具中。固然也能够在http://grokdebug.herokuapp.com/网站进行匹配调试。

使用示例:

filter {
    grok {
      match => ["message", "%{COMBINEDAPACHELOG}"]
    }
}

示例图:
在这里插入图片描述
若是没有这方面的需求,能够不配作filter。

output

output主要做用是将数据进行输出,好比输出到文件,或者elasticsearch中。

这里将数据输出到ElasticSearch中,若是是集群,经过逗号能够配置多个节点。

output {   
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
  }
}

若是想在控制台进行日志输出的话,能够加上stdout配置。若是想自定义输出的index话,也能够加上对应的索引库名称,不存在则根据数据内容进行建立,也能够自动按天建立索引库。

示例以下:

output {
   
  stdout {
    codec => rubydebug
  }
 
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "mylogs-%{+YYYY.MM.dd}"
  }
}

更多logstash配置:https://www.elastic.co/guide/en/logstash/current/index.html

3,使用

demo

在/home/logs/目录下添加一个日志文件, 而后在logstash文件夹中建立一个logstash-test.conf文件,而后在该文件中添加以下配置:

input {
  file {
    path => "/home/logs/mylog.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
 
filter {
}
 
output {
  stdout {
    codec => rubydebug
  }
 
  elasticsearch {
    hosts => ["192.168.9.238:9200"]
  }
}

而后在logstash 目录输入以下命令进行启动:

nohup ./bin/logstash -f logstash-test.conf

后台启动:

nohup ./bin/logstash -f logstash-test.conf >/dev/null 2>&1 &

热配置加载启动:

nohup ./bin/logstash -f logstash-test.conf --config.reload.automatic >/dev/null 2>&1 &

启动成功以后,若是是非后台启动,能够在控制台查看数据的传输,若是是后台启动,则能够在logstash的log目录中进行查看。

在kibana展现

打开kibana,建立一个索引模板,操做以下图所示:
在这里插入图片描述
这里由于未指定索引库,logstash使用的是logstash默认的模板,这里选择它就可。
在这里插入图片描述
而后建立一个仪表盘,选择刚刚建立的索引库模板,就能够查看数据的状况了。
在这里插入图片描述

其它

参考:https://elasticstack.blog.csdn.net/article/details/105973985

ElasticSearch实战系列:

音乐推荐

原创不易,若是感受不错,但愿给个推荐!您的支持是我写做的最大动力!
版权声明:
做者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm    
我的博客出处:http://www.panchengming.com