ELFK 开源日志平台实战部署之 Logstash

上一篇文章写了ES集群部署,这篇文章将介绍和部署logstash。

整体实验框架:

服务器信息:

IP

角色

内存要求

10.0.0.41

kibana+es集群节点1

建议2G或以上

10.0.0.42

es集群节点2

建议2G或以上

10.0.0.43

es集群节点3+logstash

建议2G或以上

10.0.0.44

filebeat+被采集日志的服务器

建议1G或以上

1. logstash简介

logstash是一个开源的数据采集工具,通过数据源采集数据.然后进行过滤,并自定义格式输出到目的地。

logstash可以采集任何格式的数据,当然我们这里主要是讨论采集系统日志,服务日志等日志类型数据。

官方产品介绍:https://www.elastic.co/cn/products/logstash

2. logstash部署

我将logstash安装在节点三:10.0.0.43

(1) 安装jdk环境

在logstash服务器上确认openjdk安装,前面已经安装过了,可忽略

复制
[root@elk03 ~]# java -version openjdk version "11.0.27" 2025-04-15 OpenJDK Runtime Environment BiSheng (build 11.0.27+6) OpenJDK 64-Bit Server VM BiSheng (build 11.0.27+6, mixed mode, sharing)1.2.3.4.

(2) 安装logstash

在logstash服务器上传并使用rpm安装logstash**

复制
[root@elk03 ~]# rpm -ivh logstash-8.18.2-x86_64.rpm1.

(3) 修改配置

修改logstash主配置文件,主要是数据和日志目录

复制
[root@elk03 ~]# grep -Ev "^$|^#" /etc/logstash/logstash.yml path.data: /var/lib/logstash path.logs: /var/log/logstash1.2.3.

(4) 对启动命令做软链接

复制
[root@elk03 ~]# ln -s /usr/share/logstash/bin/logstash /bin/logstash1.

因为启动命令不在$PATH环境变量中,所以做软件到/bin/下方便直接使用

5. logstash测试

(1) 编写测试配置文件

复制
[root@elk03 ~]# vim /etc/logstash/conf.d/test.conf input { stdin {} } filter { mutate { add_field => { "source" => "logstash-manual-test" } } } output { elasticsearch { hosts => ["http://10.0.0.41:9200"] index => "logstash-test-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.

配置说明:

input{}与output{}必写, filter{}可以不写input中的stdin{}为众多input插件中的一个,表示从标准输入(也就是键盘输入)收集数据output中的stdout{}为众多output插件中的一个,表示收集的数据输出到标准输出(也就是当前终端)

(2) 启动

复制
[root@elk03 ~]# logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test.conf1.

参数说明:

--path.settings 指定主配置文件目录,不指定会有警告信息-f 指定收集数据配置文件此命令启动较慢,需要半分钟左右。最后一句信息看到Successfully表示启动成功此命令没有加后台符号,会占用终端

(3) 测试结果

说明:

输入任何信息都会成为message字段的值,并在当前终端显示@timestamp,host,@version为默认添加的字段

(4) 关闭

测试完后,关闭。方法以下2种任选:

ctrl+c 因为占用终端启动,直接ctrl+c就可以关闭进程ps -ef |grep java查找进程pid,然后kill杀死进程3. logstash采集日志

(1) 编写收集日志配置文件

这里以/var/log/messages日志为例,只定义input输入和output输出,不考虑过滤

复制
[root@elk03 ~]# vim /etc/logstash/conf.d/test2.conf input { file { path => "/var/log/messages" start_position => "beginning" } } output { elasticsearch { hosts => ["10.0.0.41:9200"] index => "logstash-%{+YYYY.MM.dd}" } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.

说明:

file是众多input插件中的一个,用于收集本地日志文件path指定收集的日志路径start_position => "beginning"表示从日志最开头收集,默认是从最后收集elasticsearch是众多output插件中的一个,用于将收集的数据输出给elasticsearchhosts => ["10.0.0.41:9200"] 也可以指定多个es节点IPindex指定收集后的索引名称,+YYYY.MM.dd是日期,每天都会随着时间变化而变化

(2) 启动测试

复制
[root@elk03 ~]# logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test2.conf &1.

使用&符号方便启动后可以继续使用命令验证.

(3) 验证索引

查看日志文件条数:

复制
[root@elk03 ~]# wc -l /var/log/messages 17056 /var/log/messages1.2.

(4) 查看es是否有日志

复制
http://10.0.0.41:9200/_cat/indices?v1.

可以看到统计/var/log/messages的行数和es查看到的行数是一样的,说明已经采集到了日志。

(5) 拓展验证

索引里的docs数量会随着日志增加而增加即使关闭logstash进程,日志有变化,再启动logstash进程也会把日志的更新都收集到ES。4. logstash采集多日志源
复制
[root@logstash ~]# vim /etc/logstash/conf.d/test.conf input { file { path => "/var/log/messages" start_position => "beginning" type => "messages" } file { path => "/var/log/yum.log" start_position => "beginning" type => "yum" } } filter { } output { if [type] == "messages" { elasticsearch { hosts => ["10.0.0.42:9200","10.0.0.41:9200","10.0.0.43:9200"] index => "logstash-%{+YYYY-MM-dd}" } } if [type] == "yum" { elasticsearch { hosts => ["10.0.0.42:9200","10.0.0.41:9200","10.0.0.43:9200"] index => "logstash-yum-%{+YYYY-MM-dd}" } } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.

说明:

收集messages日志, 索引名为logstash-%{+YYYY-MM-dd}收集yum日志,索引名为logstash-yum-%{+YYYY-MM-dd}/var/log/yum.log为空,是不会产生索引的。可以使用yum install XXX安装软件使yum日志产生记录5. logstash启停操作
复制
# 启动并设置开机自启动 systemctl enable --now logstash # 停止 systemctl stop logstash # 重启 systemctl restart logstash1.2.3.4.5.6.7.8.

本篇将logstash作为采集,后续会用filebeat作为采集,logstash只做过滤。下一篇将讲解kibana部署和使用,敬请关注!

阅读剩余
THE END