1)安装JDK环境(JDK,JRE,JVM)
略,参考之前的笔记。
2)解压logstash软件包
tar xf logstash-7.17.5-linux-x86_64.tar.gz -C /oldboyedu/softwares/
3)配置logstash的环境变量
cat > /etc/profile.d/logstash.sh <<'EOF'
#!/bin/bash
export LOGSTASH_HOME=/oldboyedu/softwares/logstash-7.17.5
export PATH=$PATH:$LOGSTASH_HOME/bin
EOF
source /etc/profile.d/logstash.sh
4)logstash程序常用的参数介绍
-t, --config.test_and_exit
查看logstash的主配置文件。
-f, --path.config CONFIG_PATH
指定logstash的配置文件。
-e, --config.string CONFIG_STRING
临时指定logstash的配置文件。
如果未指定任何的配置参数,则默认使用以下的input和output:
input { stdin { type => stdin } } output { stdout { codec => rubydebug } }
--path.data PATH
指定logstash的数据路径,若不指定,默认值为logstash的家目录下的data目录。
--pipeline.id ID
指定pipeline的ID,若不指定,则默认使用的是main这个pipline。
-r, --config.reload.automatic
是否支持热加载配置文件。注意,对于stdin类型,不支持热加载哟!
--log.level
指定logstash的日志级别,有效值为: fatal|error|warn|info|debug|trace
5)启动logstash实例
logstash -e "input { stdin {} } output { stdout {} }" --log.level warn
6)测试
略。
logstash的组成部分:
- input:
负责源数据的收集。
- filter:
负责数据处理的,该组件是可选组件,因为不使用它的话,此时logstash就是一个日志采集工具。
- output:
负责将数据传送到目标位置。
基于logstash的配置文件启动实例:
1)编写配置文件
mkdir config
cat > config/01-stdin-to-stdout.conf <<EOF
input {
stdin {}
}
output {
stdout {}
}
EOF
2)检查配置文件语法
logstash -tf config/01-stdin-to-stdout.conf --log.level error
3)启动实例
logstash -f config/01-stdin-to-stdout.conf
基于logstash收集本地文件
1)编写配置文件
cat > config/02-file-to-stdout.conf <<EOF
input {
file {
# 指定本地的路径
path => "/tmp/oldboyedu-linux82-elk-2022/**/*.log"
# 指定读取文件的起始位置,要求"sincedb"未记录,启动logstash后,新创建文件是从头开始读取。
start_position => "beginning"
}
}
output {
stdout {}
}
EOF
2)测试配置文件
logstash -tf config/02-file-to-stdout.conf
3)热加载配置文件
logstash -rf config/02-file-to-stdout.conf
面試題: logstash的4-5数据丢失,如何找回4-5点的数据?
cat /oldboyedu/softwares/logstash-7.17.5/data/plugins/inputs/file/.sincedb_3e450a93cabbe22dfb39bf03eeb3897b
date --date='@1661141045'
input插件的通用字段:
1)编写配置文件
cat > config/03-file-to-stdout.conf <<EOF
input {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/**/*.log"
start_position => "beginning"
# 添加字段
add_field => {
school => "oldboyedu"
class => "linux82"
}
# 为当前的输入类型做唯一编号,若不指定,则默认系统会随机分配一个ID哟~
id => "1001"
# 添加标签
tags => ["oldboyedu","linux82","沙河"]
# 给事件(event)标记类型
type => "oldboyedu-linux82-file"
}
file {
path => "/tmp/*.txt"
id => "1002"
}
}
output {
stdout {}
}
EOF
2)加载配置
logstash -rf config/03-file-to-stdout.conf
filebeat和logstash搭配案例:
1)编写logstash的配置文件
cat > config/04-beats-to-stdout.conf <<EOF
input {
beats {
port => 9999
}
}
output {
stdout {}
}
EOF
2)启动logstash
logstash -rf config/04-beats-to-stdout.conf
3)编写filebeat的配置文件
cat > config/20-tcp-to-logstash.yaml <<EOF
filebeat.inputs:
- type: tcp
host: 0.0.0.0:8888
output.logstash:
hosts: ["10.0.0.103:9999"]
EOF
4)启动filebeat实例
./filebeat -c config/20-tcp-to-logstash.yaml
5)测试
echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" | nc 10.0.0.101 8888
logstash输出数据到ES集群:
1)编写logstash的配置文件
cat > config/05-beats-to-es.conf <<EOF
input {
beats {
port => 9999
}
}
output {
stdout {}
elasticsearch {
# 指定ES集群的主机列表
hosts => ["10.0.0.101:9200","10.0.0.102:9200","10.0.0.103:9200"]
# 指定写入的ES集群索引
index => "oldboyedu-linux82-logstash-%{+yyyy.MM.dd}"
}
}
EOF
2)启动logstash
logstash -rf config/05-beats-to-es.conf
3)编写filebeat的配置文件
cat > config/20-tcp-to-logstash.yaml <<EOF
filebeat.inputs:
- type: tcp
host: 0.0.0.0:8888
output.logstash:
hosts: ["10.0.0.103:9999"]
EOF
4)启动filebeat实例
./filebeat -c config/20-tcp-to-logstash.yaml
5)测试
echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" | nc 10.0.0.101 8888
logstash将数据输出到本地文件:
1)编写配置文件
cat > config/06-http-to-file.yaml <<EOF
input {
http {
port => 6666
}
}
output {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/linux82-logstash.log"
}
}
EOF
2)启动logstash
logstash -rf config/06-http-to-file.yaml
logstash的多分支语句:
1)案例一,output是同一种类型
cat > config/07-if-demo.yaml <<EOF
input {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/linux82-logstash.log"
type => "oldboyedu-linux82-file"
}
http {
port => 6666
type => "oldboyedu-linux82-http"
}
tcp {
port => 7777
type => "oldboyedu-linux82-tcp"
}
}
output {
if [type] == "oldboyedu-linux82-file" {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/oldboyedu-output-file.txt"
}
} else if [type] == "oldboyedu-linux82-http" {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/oldboyedu-output-http.txt"
}
} else {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/oldboyedu-output-tcp.txt"
}
}
}
EOF
2)案例二,output是不同类型
2.1)安装redis环境
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install redis jq
2.2)修改配置文件
vim /etc/redis.conf
...
bind 0.0.0.0
protected-mode no
2.3)启动redis环境
systemctl start redis
2.4)编写logstash配置文件
cat > config/08-if-demo2.yaml <<EOF
input {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/*.log"
type => "oldboyedu-linux82-file"
}
http {
port => 6666
type => "oldboyedu-linux82-http"
}
tcp {
port => 7777
type => "oldboyedu-linux82-tcp"
}
}
output {
if [type] == "oldboyedu-linux82-file" {
file {
path => "/tmp/oldboyedu-linux82-elk-2022/oldboyedu-output-file.txt"
}
} else if [type] == "oldboyedu-linux82-http" {
elasticsearch {
hosts => ["10.0.0.101:9200","10.0.0.102:9200","10.0.0.103:9200"]
index => "oldboyedu-linux82-logstash-%{+yyyy.MM.dd}"
}
} else {
redis {
# redis的主机IP
host => "10.0.0.102"
# 数据存入redis的KEY值
key => "oldboyedu-linux82"
# 定义数据类型
data_type => "list"
}
}
stdout {}
}
EOF
2.5) 验证Redis数据
redis-cli --raw LRANGE oldboyedu-linux82 0 -1 | jq