Logstash部署使用

Logstash简介

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

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

下载与安装Logstash

elastic官网下载:Download Logstash Free | Get Started Now | Elastic

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 将安装包直接解压到一个路径下即可完成安装</span>
[root@logstashserver ~]<span style="color:#aa5500"># tar -zxvf logstash-6.3.2.tar.gz -C /usr/local</span>
[root@logstashserver ~]<span style="color:#aa5500"># mv /usr/local/logstash-6.3.2.tar.gz  /usr/local/logstash</span></span></span>

常用的插件

input插件

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

  1. file: 读取一个文件,这个读取功能有点类似于linux下面的tail命令,一行一行的实时读取。

  2. syslog: 监听系统514端口的syslog messages,并使用RFC3164格式进行解析。

  3. redis:Logstash可以从redis服务器读取数据,此时redis类似于一个消息缓存组件。

  4. kafka:Logstash也可以从kafka集群中读取数据,kafka加Logstash的架构一般用在数据量较大的业务场景,kafka可用作数据的缓冲和存储。

  5. filebeat:filebeat是一个文本日志收集器,性能稳定,并且占用系统资源很少,Logstash可以接收filebeat发送过来的数据。

filter插件

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

  1. grok:grok是Logstash最重要的插件,可解析并结构化任意数据,支持正则表达式,并提供了很多内置的规则和模板可供使用。此插件使用最多,但也最复杂。

  2. mutate: 此插件提供了丰富的基础类型数据处理能力。包括类型转换,字符串处理和字段处理等。

  3. date:此插件可以用来转换你的日志记录中的时间字符串。

  4. GeoIP:此插件可以根据IP地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。

output插件

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

  1. elasticsearch:发送数据到elasticsearch。

  2. file:发送数据到文件中。

  3. redis:发送数据到redis中,从这里可以看出,redis插件既可以用在input插件中,也可以用在output插件中。

  4. kafka:发送数据到kafka中,与redis插件类似,此插件也可以用在Logstash的输入和输出插件中。

Logstash配置文件

配置例1-标准输入输出

这里将logstash安装到/usr/local目录下,因此,logstash的配置文件目录为/usr/local/logstash/config/,其中,jvm.options是设置JVM内存资源的配置文件,logstash.yml是logstash全局属性配置文件,另外还需要自己创建一个logstash事件配置文件,这里介绍下logstash事件配置文件的编写方法和使用方式。

在介绍Logstash配置之前,先来认识一下logstash是如何实现输入和输出的。Logstash提供了一个shell脚本/usr/local/logstash/bin/logstash,可以方便快速的启动一个logstash进程,在Linux命令行下,运行如下命令启动Logstash进程:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@logstashserver ~]<span style="color:#aa5500"># cd /usr/local/logstash/</span>
[root@logstashserver logstash]<span style="color:#aa5500"># bin/logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'</span>
​
<span style="color:#aa5500"># 在终端输入信息。如输入"Hello World",按回车,马上就会有返回结果,内容如下:</span>
{
“@version” <span style="color:#981a1a">=</span>> “1”,
“host” <span style="color:#981a1a">=</span>> “logstashserver”,
“@timestamp” <span style="color:#981a1a">=</span>> <span style="color:#116644">2018</span><span style="color:#0000cc">-01-26T10</span>:01:45.665Z,
“message” <span style="color:#981a1a">=</span>> “Hello World”
}</span></span>

首先解释下这条命令的含义:

  1. -e 代表执行的意思。

  2. input 即输入的意思,input里面即是输入的方式,这里选择了stdin,就是标准输入(从终端输入)。

  3. output 即输出的意思,output里面是输出的方式,这里选择了stdout,就是标准输出(输出到终端)。

  4. 这里的codec是个插件,表明格式。这里放在stdout中,表示输出的格式,rubydebug是专门用来做测试的格式,一般用来在终端输出JSON格式。

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

在logstash的输出中,常见的字段还有type,表示事件的唯一类型;tags,表示事件的某方面属性,我们可以随意给事件添加字段或者从事件里删除字段。

使用-e参数在命令行中指定配置是很常用的方式,但是如果logstash需要配置更多规则的话,就必须把配置固化到文件里,这就是logstash事件配置文件,如果把上面在命令行执行的logstash命令,写到一个配置文件logstash-simple.conf中,就变成如下内容:

<span style="background-color:#f8f8f8"><span style="color:#333333">input { stdin { }
}
output {
stdout { codec <span style="color:#981a1a">=</span>> rubydebug }
}</span></span>

这就是最简单的Logstash事件配置文件。此时,可以使用logstash的-f参数来读取配置文件,然后启动logstash进程,操作如下:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@logstashserver logstash]<span style="color:#aa5500"># bin/logstash -f logstash-simple.conf</span></span></span>

通过这种方式也可以启动logstash进程,不过这种方式启动的进程是在前台运行的,要放到后台运行,可通过nohup命令实现,操作如下:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@logstashserver logstash]<span style="color:#aa5500"># nohup bin/logstash -f logstash-simple.conf &</span></span></span>

这样,logstash进程就放到了后台运行了,在当前目录会生成一个nohup.out文件,可通过此文件查看logstash进程的启动状态。

配置例2-输入文件输出Kafka

下面再看另一个logstash事件配置文件,内容如下:

<span style="background-color:#f8f8f8"><span style="color:#333333">input {
    file {
        path <span style="color:#981a1a">=</span>> “/var/log/messages”
    }
}
output {
    stdout {
        codec <span style="color:#981a1a">=</span>> rubydebug
    }
}</span></span>

如果需要监控多个文件,可以通过逗号分隔即可,例如:

<span style="background-color:#f8f8f8"><span style="color:#333333">path <span style="color:#981a1a">=</span>> [“/var/log/*.log”,“/var/log/message”,“/var/log/secure”]</span></span>

对于output插件,这里仍然采用rubydebug的JSON输出格式,这对于调试logstash输出信息是否正常非常有用。 将上面的配置文件内容保存为logstash_in_stdout.conf,然后启动一个logstash进程,执行如下命令:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@logstashserver logstash]<span style="color:#aa5500"># nohup bin/logstash -f logstash_in_stdout.conf &</span></span></span>

接着开始进行输入、输出测试,这里设定/var/log/messages的输入内容为如下信息(其实就是执行“systemctl stop nginx”命令后/var/log/messages的输出内容):

<span style="background-color:#f8f8f8"><span style="color:#333333">Aug <span style="color:#116644">19</span> <span style="color:#116644">16</span>:09:12 logstashserver systemd: Stopping The nginx HTTP and reverse proxy server…
Aug <span style="color:#116644">19</span> <span style="color:#116644">16</span>:09:12 logstashserver systemd: Stopped The nginx HTTP and reverse proxy server.
​
<span style="color:#aa5500"># 然后查看logstash的输出信息,可以看到内容如下:</span>
{
“@version” <span style="color:#981a1a">=</span>> “1”,
“host” <span style="color:#981a1a">=</span>> <span style="color:#aa1111">" logstashserver"</span>,
“path” <span style="color:#981a1a">=</span>> “/var/log/messages”,
“@timestamp” <span style="color:#981a1a">=</span>> <span style="color:#116644">2018</span><span style="color:#0000cc">-08-19T08</span>:09:12.701Z,
“message” <span style="color:#981a1a">=</span>> “Aug <span style="color:#116644">19</span> <span style="color:#116644">16</span>:09:12 logstashserver systemd: Stopping The nginx HTTP and reverse proxy server…<span style="color:#aa1111">"</span>
}
{
“@version” <span style="color:#981a1a">=</span>> “1”,
“host” <span style="color:#981a1a">=</span>> <span style="color:#aa1111">" logstashserver"</span>,
“path” <span style="color:#981a1a">=</span>> “/var/log/messages”,
“@timestamp” <span style="color:#981a1a">=</span>> <span style="color:#116644">2018</span><span style="color:#0000cc">-08-19T08</span>:09:12.701Z,
“message” <span style="color:#981a1a">=</span>> “Aug <span style="color:#116644">19</span> <span style="color:#116644">16</span>:09:12 logstashserver systemd: Stopped The nginx HTTP and reverse proxy server.<span style="color:#aa1111">"</span>
}
​
<span style="color:#aa5500"># 接着把logstash_in_stdout.conf文件稍加修改,变成另外一个事件配置文件logstash_in_kafka.conf,内容如下:</span>
input {
file {
path <span style="color:#981a1a">=</span>> “/var/log/messages”
}
}
output {
kafka {
bootstrap_servers <span style="color:#981a1a">=</span>> “172.16.213.51:9092,172.16.213.75:9092,172.16.213.109:9092”
topic_id <span style="color:#981a1a">=</span>> “osmessages”
}
}</span></span>

这个配置文件中,输入input仍然是file,重点看输出插件,这里定义了output的输出源为kafka,通过bootstrap_servers选项指定了kafka集群的IP地址和端口。特别注意这里IP地址的写法,每个IP地址之间通过逗号分隔。另外,output输出中的topic_id选项,是指定输出到kafka中的哪个topic下,这里是osmessages,如果无此topic,会自动重建topic。

配置logstash作为转发节点–输入Kafka输出ES

上面对logstash的使用做了一个基础的介绍,现在回到本节介绍的这个案例中,在这个部署架构中,logstash是作为一个二级转发节点使用的,也就是它将kafka作为数据接收源,然后将数据发送到elasticsearch集群中,按照这个需求,新建logstash事件配置文件kafka_os_into_es.conf,内容如下:

<span style="background-color:#f8f8f8"><span style="color:#333333">input {
kafka {
bootstrap_servers <span style="color:#981a1a">=</span>> “172.16.213.51:9092,172.16.213.75:9092,172.16.213.109:9092”
topics <span style="color:#981a1a">=</span>> [“osmessages”]
}
}
output {
elasticsearch {
hosts <span style="color:#981a1a">=</span>> [“172.16.213.37:9200”,“172.16.213.77:9200”,“172.16.213.78:9200”]
index <span style="color:#981a1a">=</span>> <span style="color:#aa1111">" osmessageslog-%{+YYYY-MM-dd}"</span>
}
}</span></span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值