首先安装,yum 安装:
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ vim /etc/yum.repos.d/logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
$ sudo yum install logstash
启动 Logstash
$ sudo systemctl start logstash
安装目录:/usr/share/logstash
,配置文件目录:/etc/logstash
启动配置文件:vim /etc/logstash/startup.options
另外,看看 /etc/logstash/pipelines.yml
这个文件:
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/etc/logstash/conf.d/*.conf"
这个文件说明了logstash 会在启动时加载 /etc/logstash/conf.d/
目录下的所有以 .conf 结尾的配置文件,所以线上的所有配置文件放在这个目录下,重启 logstash 后,会自动加载新配置。
如果想让 Logstash 在运行时自动加载修改的配置文件,可以修改 /etc/logstash/logstash.yml
中的配置:
config.reload.automatic: true
另外,/etc/logstash/logstash-sample.conf
只是一个配置样例。
首先执行命令
$ sudo bin/logstash -e 'input { stdin { } } output { stdout {} }'
等一会之后,logstash 会打印一些日志,看到 Successfully started 之后,可以输入一些东西了:
[INFO ] 2019-12-26 18:02:10.266 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9601}
hello my logstash
{
"@timestamp" => 2019-12-26T10:03:01.918Z,
"@version" => "1",
"host" => "fueltank-4.cloud.bbdops.com",
"message" => "hello my logstash"
}
logstash 配置由 input
filter
output
组成。
下面通过一个例子来实践一下。
首先安装 Filebeat:
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-x86_64.rpm
$ sudo rpm -vi filebeat-7.5.1-x86_64.rpm
然后修改配置文件 /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages
output.logstash:
hosts: ["localhost:5044"]
/var/log/messages 中记录的是 syslog-ng 的部分日志。
注意!设置了 output.logstash 之后,应该把 output.elasticsearch 注释掉,否则 filebeat 会启动失败!
完成后启动 filebeat:
$ sudo systemctl start filebeat
然后再写 Logstash 的配置文件,简单复制下 logstash-sample.conf ,然后改一下:
$ sudo cp /etc/logstash/logstash-sample.conf /etc/logstash/conf.d/log-message.conf
$ sudo vim /etc/logstash/conf.d/log-message.conf
然后将其修改为以下内容
input {
beats {
port => 5044
}
}
output {
stdout { codec => rubydebug }
}
这里就是简单的输出到标准输出
测试配置文件是否正确,执行以下命令:
$ sudo ./bin/logstash -f /etc/logstash/conf.d/log-message.conf --config.test_and_exit
如果格式正确,将会有以下输出:
[INFO ] 2019-12-27 10:28:34.245 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
如果想重新加载配置文件,可以通过以下命令,而不需要重启 Logstash
$ sudo ./bin/logstash -f /etc/logstash/conf.d/log-message.conf --config.reload.automatic
或者 Logstash 配置了自动加载已修改的配置文件话,什么都不需要做,验证一下配置文件是否正确即可。
最后看下效果,可以使用 journalctl
来查看系统日志:
$ journalctl -n 200
journalctl
是一个查看系统日志的工具,他的命令和 vim 一样,-n 参数指定了最新的200行,如果不加-n就要小心了,容易卡死。
修改 log-message.log:
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "log-message-%{+YYYY.MM.dd}"
}
}
这样就在 Elasticsearch 中看到数据了,可以使用 Kibana 查看。
input 和 output 内可以有多个项。
除了 input 和 output ,还有 filter ,filter 也可以有多个项。
input、 filter、 和 output 都可以定义插件。