ELK之Logstash使用

ELK

Logstash使用



前言

Logstash原本是作为日志收集、过滤的工具,但是内存消耗过高,后面被filebeat替代,一般的elk架构中只保留Logstash的过滤功能

一、下载安装

1、下载

直接从https://www.elastic.co/downloads/logstash官网下载即可
下载完成上传的服务器上/usr目录下
这里下载的是6.5.1版本

2、安装

解压

[root@VM-0-2-centos usr]# tar -zxvf logstash-6.5.1.tar.gz -C /usr/local/

改个名字

[root@VM-0-2-centos local]# mv logstash-6.5.1/ logstash/

3、Logstash工作原理

Logstash是一个开源的、服务端的数据处理pipeline(管道),它可以接收多个源的数据、然后对它们进行转换、最终将它们发送到指定类型的目的地。Logstash是通过插件机制实现各种功能的,可以在https://github.com/logstash-plugins 下载各种功能的插件,也可以自行编写插件。

Logstash实现的功能主要分为接收数据、解析过滤并转换数据、输出数据三个部分,对应的插件依次是input插件、filter插件、output插件,其中,filter插件是可选的,其它两个是必须插件。也就是说在一个完整的Logstash配置文件中,必须有input插件和output插件。

二、Logstash插件

1、常用的input

input插件主要用于接收数据,Logstash支持接收多种数据源,常用的有如下几种:

类型说明
file读取一个文件,这个读取功能有点类似于linux下面的tail命令,一行一行的实时读取。
syslog监听系统514端口的syslog messages,并使用RFC3164格式进行解析。
redisLogstash可以从redis服务器读取数据,此时redis类似于一个消息缓存组件。
kafkaLogstash也可以从kafka集群中读取数据,kafka加Logstash的架构一般用在数据量较大的业务场景,kafka可用作数据的缓冲和存储。
filebeatfilebeat是一个文本日志收集器,性能稳定,并且占用系统资源很少,Logstash可以接收filebeat发送过来的数据。

2、常用的filter

filter插件主要用于数据的过滤、解析和格式化,也就是将非结构化的数据解析成结构化的、可查询的标准化数据。常见的filter插件有如下几个:

类型说明
grokgrok是Logstash最重要的插件,可解析并结构化任意数据,支持正则表达式,并提供了很多内置的规则和模板可供使用。此插件使用最多,但也最复杂。
mutate此插件提供了丰富的基础类型数据处理能力。包括类型转换,字符串处理和字段处理等。
date此插件可以用来转换你的日志记录中的时间字符串。
kafkaLogstash也可以从kafka集群中读取数据,kafka加Logstash的架构一般用在数据量较大的业务场景,kafka可用作数据的缓冲和存储。
GeoIP此插件可以根据IP地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。

3、常用的output

output插件用于数据的输出,一个Logstash事件可以穿过多个output,直到所有的output处理完毕,这个事件才算结束。输出插件常见的有如下几种:

类型说明
elasticsearch发送数据到elasticsearch。
file发送数据到文件中。
redis发送数据到redis中,从这里可以看出,redis插件既可以用在input插件中,也可以用在output插件中。
kafka发送数据到kafka中,与redis插件类似,此插件也可以用在Logstash的输入和输出插件中。

三、配置介绍

1、配置文件

进入/usr/local/logstash/config/目录下可以看到以下文件

[root@VM-0-2-centos config]# ls
jvm.options
log4j2.properties
logstash-sample.conf
#主要用于控制logstash运行时的状态
logstash.yml
pipelines.yml
#运行相关参数
startup.options

我们主要关心logstash-sample.conf即可

2、简单启动

进入/usr/local/logstash目录下

[root@VM-0-2-centos logstash]# bin/logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'

有如下信息即为启动成功

[2021-01-08T17:05:06,890][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}

随便在控制台输入一些文字比如abc,会有如下响应

abc
{
      "@version" => "1",
       "message" => "abc",
    "@timestamp" => 2021-01-08T09:07:28.927Z,
          "host" => "VM-0-2-centos"
}

-e代表执行的意思
input即输入的意思,input里面即是输入的方式,这里选择了stdin,就是标准输入(从终端输入)。
output即输出的意思,output里面是输出的方式,这里选择了stdout,就是标准输出(输出到终端)。
codec是个插件,表明格式。这里放在stdout中,表示输出的格式,rubydebug是专门用来做测试的格式,一般用来在终端输出JSON格式。

“@version”、“host”、"@timestamp" 都是新增的字段, 而最重要的是@timestamp ,用来标记事件的发生时间。
由于这个字段涉及到Logstash内部流转,如果给一个字符串字段重命名为@timestamp的话,Logstash就会直接报错。另外,也不能删除这个字段。

3、配置文件启动

我们进入/usr/local/logstash/config目录下创建一个新文件easy.conf

[root@VM-0-2-centos config]# touch easy.conf

将input{stdin{}} output{stdout{codec=>rubydebug}}复制进去,保存退出,返回上一层到/usr/local/logstash

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

前台启动

[root@VM-0-2-centos logstash]# ./bin/logstash -f config/easy.conf

后台启动

[root@VM-0-2-centos logstash]# nohup ./bin/logstash -f config/easy.conf &

三、集成Filebeat和ES

同样的我们进入/usr/local/logstash/config目录下创建一个新文件filebeat_es.conf

[root@VM-0-2-centos config]# touch filebeat_es.conf

vim编辑将如下配置放进去即可

input {
    beats {
        port => "5044"
    }
}
output {
        elasticsearch {
        #可以是集群
        hosts => ["172.19.xx.xx:9200","172.19.xx.xx:9200"]
        index => "test-%{+yyyy-MM-dd}"
        }
}

进入kibana<kibana使用下面会更新>看到日志正常进来说明成功
在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值