上一篇文章写了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部署和使用,敬请关注!