logstash组件的部署

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  < 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 < 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 < 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 < 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 < 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 < 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 < 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  < 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 < 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  < 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

你可能感兴趣的:(elk)