准备好ELK APP二进制包文件:
curl -L -O <https://artifacts.elastic.co/downloads/logstash/logstash-6.3.0.tar.gz>
wget <https://download.elastic.co/demos/logstash/gettingstarted/logstash-tutorial.log.gz>
创建普通用户:
id deploy &>/dev/null ; if \[[ $? != "0" ]]; then useradd deploy; fi
切换用户elk:
su - deploy
创建APP目录和数据目录:
cd ~
mkdir -pv ./logstash
mkdir -pv ./logstash/{data,logs} # (建议)可以放到单独分区的目录里:/data/logstash/{data,logs}
更改ELK目录和数据目录权限:
chown -R deploy:deploy /home/deploy/logstash #如果是放到单独分区的目录里注意赋权: chown -R deploy:deploy /logstash
安装APP:
tar xvf logstash-6.3.0.tar.gz -C /home/deploy/logstash
修改配置 logstash.yml:
cp /home/deploy/logstash/logstash-6.3.0/config/logstash.yml{,.ori}
vim /home/deploy/logstash/logstash-6.3.0/config/logstash.yml
...
path.data: /home/deploy/logstash/data
path.logs: /home/deploy/logstash/logs
...
logstash输入源使用log文件,输出到console: file => logstash => stdout
新增配置 logstash-input-file-output-stdout.conf:
vim /home/deploy/logstash/logstash-6.3.0/config/logstash-input-file-output-stdout.conf
...
input {
file {
path => "/opt/logstash-tutorial.log"
start_position => "beginning"
}
}
output {
stdout { codec => rubydebug }
}
...
检查配置文件:
/home/deploy/logstash/logstash-6.3.0/bin/logstash -f /home/deploy/logstash/logstash-6.3.0/config/logstash-input-file-output-stdout.conf --config.test_and_exit
启动logstash:
su - deploy -c '/home/deploy/logstash/logstash-6.3.0/bin/logstash -f /home/deploy/logstash/logstash-6.3.0/config/logstash-input-file-output-stdout.conf --config.reload.automatic'
################################################################################
filebeat => logstash => stdout:logstash-input-beats-output-stdout
新增配置 logstash-input-beats-output-stdout.conf:
vim /home/deploy/logstash/logstash-6.3.0/config/logstash-input-beats-output-stdout.conf
...
input {
beats {
port => "5044"
}
}
output {
stdout { codec => rubydebug }
}
...
启动logstash:
su - deploy -c '/home/deploy/logstash/logstash-6.3.0/bin/logstash -f /home/deploy/logstash/logstash-6.3.0/config/logstash-input-beats-output-stdout.conf --config.reload.automatic'
在filebeat主机上模拟生成数据:
cp /opt/logstash-tutorial.log{,.ori} #备份原始文件
cat /opt/logstash-tutorial.log.ori >> /opt/logstash-tutorial.log #追加数据至log文件
观察到logstash所在主机console有输出:
{
"message" => "86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] \"GET /style2.css HTTP/1.1\" 200 4877 \"http://www.semicomplete.com/projects/xdotool/\" \"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0\"",
"prospector" => {
"type" => "log"
},
"beat" => {
"name" => "localhost",
"hostname" => "localhost",
"version" => "6.3.0"
},
"@version" => "1",
"@timestamp" => 2018-08-04T13:47:14.926Z,
"host" => {
"name" => "localhost"
},
"source" => "/opt/logstash-tutorial.log",
"offset" => 146784,
"input" => {
"type" => "log"
},
"tags" => [
[0] "beats_input_codec_plain_applied"
]
}
################################################################################
filebeat => logstash => elasticsearch:logstash-input-beats-output-es
新增配置 logstash-input-beats-output-es.conf:
vim /home/deploy/logstash/logstash-6.3.0/config/logstash-input-beats-output-es.conf
...
input {
beats {
port => "5044"
}
}
# filter {}
output {
elasticsearch {
hosts => [ "10.0.0.11:9200","10.0.0.12:9200" ]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
...
启动logstash:
su - deploy -c '/home/deploy/logstash/logstash-6.3.0/bin/logstash -f /home/deploy/logstash/logstash-6.3.0/config/logstash-input-beats-output-es.conf --config.reload.automatic'
################################################################################
filebeat => kafka => logstash => stdout: logstash-input-kafka-output-stdout
新增配置 logstash-input-kafka-output-stdout.conf:
vim /home/deploy/logstash/logstash-6.3.0/config/logstash-input-kafka-output-stdout.conf
...
input {
kafka {
bootstrap_servers => "10.0.0.11:9092,10.0.0.12:9092,10.0.0.13:9092"
}
}
# filter {}
output {
stdout { codec => rubydebug }
}
...
启动logstash:
su - deploy -c '/home/deploy/logstash/logstash-6.3.0/bin/logstash -f /home/deploy/logstash/logstash-6.3.0/config/logstash-input-kafka-output-stdout.conf --config.reload.automatic'
################################################################################
filebeat => kafka => logstash => elasticsearch: logstash-input-kafka-output-es
新增配置 logstash-input-kafka-output-es.conf:
vim /home/deploy/logstash/logstash-6.3.0/config/logstash-input-kafka-output-es.conf
...
input {
kafka {
bootstrap_servers => "10.0.0.11:9092,10.0.0.12:9092,10.0.0.13:9092"
## Here, "topics" of kafka in logstash input section equals to "topic" of output.kafka in filebeat.yml,
## as is "log_topics" of fileds of filebeat.inputs in filebeat.yml
topics => "leion"
consumer_threads => 1
decorate_events => true
# codec => "json"
auto_offset_reset => "latest"
}
}
# filter {}
output {
elasticsearch {
hosts => [ "10.0.0.11:9200","10.0.0.12:9200" ]
manage_template => false
# index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
index => "leion-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
...
启动logstash:
su - deploy -c '/home/deploy/logstash/logstash-6.3.0/bin/logstash -f /home/deploy/logstash/logstash-6.3.0/config/logstash-input-kafka-output-es.conf --config.reload.automatic'
################################################################################
FAQ:
Q: A: