Logstash-7.5.2搭建流程

(1) 首先下载软件包(采用二进制包,非编译安装):

Logstash:https://artifacts.elastic.co/downloads/logstash/logstash-7.5.2.tar.gz

(2) 解压Logstash安装包,编辑解压文件中的config/logstash.yml配置文件,添加或调整以下配置:

#每次发送的事件数

pipeline.batch.size: 10000

#发送延时

pipeline.batch.delay: 10

#pipeline线程数,官方建议是等于CPU内核数

pipeline.workers: 6

#监视配置文件的改变,并且当配置文件被修改以后自动重新加载配置文件

config.reload.automatic: true

#为了检查配置文件是否改变,而拉去配置文件的频率。默认3秒

config.reload.interval: 60s

#数据持久化
queue.type: persisted

#队列存储路径;如果队列类型为persisted,则生效
path.queue: /data/ELK/logstash/data

#队列为持久化,单个队列大小
queue.page_capacity: 1024mb

#当启用持久化队列时,队列中未读事件的最大数量,0为不限制
queue.max_events: 0

#队列最大容量100G
queue.max_bytes: 102400mb

#在启用持久队列时强制执行检查点的最大数量,0为不限制
queue.checkpoint.acks: 1024

#在启用持久队列时强制执行检查点之前的最大数量的写入事件,0为不限制
queue.checkpoint.writes: 1024

#当启用持久队列时,在头页面上强制一个检查点的时间间隔,单位毫秒
queue.checkpoint.interval: 1000 

#绑定的主机ip地址

http.host: "192.168.193.157"

#绑定的服务端口

http.port: 9600

#启用logstash的x-pack监控,默认为禁用

xpack.monitoring.enabled: true

#传输logstash监控数据时候用于通过elasticsearch认证的账号
xpack.monitoring.elasticsearch.username: logstash_system

#传输logstash监控数据时候用于通过elasticsearch认证的账号密码,这里使用预先存储在密钥文件keystore中的变量LOGSTASH_PWD的值来代替
xpack.monitoring.elasticsearch.password: "${LOGSTASH_PWD}"

#将logstash的监控数据发送到所指定的elasticsearch集群中,也可以是单个es主机
xpack.monitoring.elasticsearch.hosts: ["http://192.168.193.154:9200","http://192.168.193.155:9200","http://192.168.193.156:9200"]

#logstash数据存储目录

path.data: /data/ELK/logstash/data 

#包含的子配置文件目录
path.config: /data/ELK/logstash/config/conf.d/*.conf

#logstash日志目录
path.logs: /data/ELK/logstash/logs

(3) 在config/conf.d目录下新增文件logstash_kafka_to_es.conf(文件名可自定义,结尾后缀需为.conf),该文件为日志管道pipeline的配置文件,用于控制日志数据流和数据清洗。接着添加或调整以下配置(以单个项目接入为例,多个项目可平行扩展,具体参考配置文件模板):

input {
    kafka {
        bootstrap_servers => ["192.168.145.109:9092,192.168.145.110:9092,192.168.145.111:9092"]
        client_id => "ELKlogstash01"
        group_id => "HDPRO_ELK_JAVA_idr"
        codec => "plain"
        fetch_max_bytes => "10485760"
        auto_offset_reset => "latest"

##适用于多logstash节点时的负载均衡策略轮询RoundRobin配置,配合线程数consumer_threads使用,同时需合理安排kafka中topic的分区partition总数 ## 
        partition_assignment_strategy => "org.apache.kafka.clients.consumer.RoundRobinAssignor"

## 消费者线程数consumer_threads 根据 kafka中topic的分区partition总数,除以logstash的个数 决定,否则会出现性能过剩或负载不均衡的情况,这句不用写到配置文件里  ##
        consumer_threads => 4
        decorate_events => true
        topics => ["idr-attendance"]
        type => "idr-attendance" 
    }

}

filter {
    if [type] == "idr-attendance" {
            grok {
                    patterns_dir => ["/data/ELK/logstash/config/pattern/JavaProdlog"]
                    match => {
                        "message" => ["%{JAVAAPPLOG}","%{ANY:message}"]
                    }
                    overwrite => ["message"]
            }
            mutate {
                                gsub => ["message","\\n","
"]
                                gsub => ["message","\\t","    "]
                                gsub => ["message","\\u001b\[m",""]
                                gsub => ["message","\\u001b\[1\;31m",""]
                                remove_field => "timestamp"
                                remove_field => "@version"
                                remove_field => "text_format"
                        }
            date {
                       match => ["timestamp","yyyy-MM-dd HH:mm:ss.SSS"]
        }
    }

}

output {
     if [type] == "idr-attendance" {
         elasticsearch {
            hosts => ["192.168.193.154:9200","192.168.193.155:9200","192.168.193.156:9200"]
            index => "idr-attendance_%{+YYYY.MM.dd}"
            user => "elastic"
            password => "${ES_PWD}"
         }
    }

}

以下为filter模块中的匹配模式pattern的文件内容,根据filter模块中所定义的pattern路径config/conf.d/pattern下(logstash默认自带的pattern在vendor/bundle/jruby/x.x.x/gems/logstash-pattern-core-x.x.x/patterns/下,无需重复自定义,可根据实际直接选用),新建该文件JavaProdlog并把以下内容写入文件中,该文件用于自定义多个正则表达式匹配规则,用于所接入的日志字段切割

ANY [\s\S]*
APPTIMESTAMP 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
JAVAAPPLOG %{ANY:text_format}%{APPTIMESTAMP:timestamp}\^\^%{ANY:threadname}\^\^%{ANY:loglevel}\^\^%{ANY:javaclass}\^\^%{ANY:information}

(4) 由于配置文件中不宜出现明文密码,密码信息需要加密和隐藏,所以创建密码存储文件keystore,创建对应的密码变量,配置文件里使用变量的形式来表示:

bin/logstash-keystore create

可以不设置keystore密码,输入Y跳过,之后在config目录下生成keystore文件

接着使用

bin/logstash-keystore add LOGSTASH_PWD

创建要加密的密码变量LOGSTASH_PWD,对应步骤(2)中的配置文件中"xpack.monitoring.elasticsearch.password"项的密码变量

使用

bin/logstash-keystore add LOGSTASH_PWD

创建要加密的密码变量ES_PWD,对应步骤(3)中的配置文件中output模块的" password =>"项的密码变量

(5) 更改文件从属,以便使用elk运行服务的时候不会出现读写权限问题,请自行更改logstash所在目录:

chown -R elk:elk /data/ELK/logstash

(6) 设置开机启动,这里采用添加系统systemd服务的方式,由于logstash没有自带启停脚本,首先需要编写一个启停脚本service.sh,放置到logstash的bin目录下,内容如下:

#!/bin/sh
#chkconfig: 2345 80 05
#description: logstash
source /etc/profile

#export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre
#export JAVA_BIN=${JAVA_HOME}/bin
#export PATH=$PATH:$JAVA_HOME/bin
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#export JAVA_HOME JAVA_BIN PATH CLASSPATH
logstash=/data/ELK/logstash
PID=""
if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi
function query()
{
    PID=`ps aux |grep elk|grep logstash|grep -v $0 | grep -v grep | awk '{print $2}'`
}
function start()
{
    query 
    if [ x"$PID" != x"" ]; then
        echo "logstash is running..."
    else
        #su elk<<!
        nohup $logstash/bin/logstash -f $logstash/config/conf.d/logstash_kafka_to_es.conf > /dev/null 2>&1 &
#!
        echo "Start logstash success..."
    fi
}
function stop()
{
    echo "Stop logstash"
    query
    echo "WO $PID"
    if [ x"$PID" != x"" ]; then
        kill -TERM $PID
        echo "logstash (pid:$PID) exiting..."
        while [ x"$PID" != x"" ]
        do
            sleep 1
            query
        done
        echo "logstash exited."
    else
        echo "logstash already stopped."
    fi
}
function restart()
{
    stop
       sleep 2
       start
}
case $1 in
start)
        start;;
stop)
        stop;;
restart)
        restart;;
*)

esac

然后给脚本添加可执行权限

chmod u+x service.sh

接着编写systemd服务配置文件vim /usr/lib/systemd/system/logstash.service,内容如下,请根据实际服务部署位置修改对应路径:

[Unit]
Description=logstash.service
After=network.target
[Service]
Type=forking
#使用这个账号操作
User=elk
Group=elk
LimitCORE=infinity
LimitMEMLOCK=infinity
LimitNOFILE=65536
LimitNPROC=65536
ExecStart=/data/ELK/logstash/bin/service.sh start
ExecReload=/data/ELK/logstash/bin/service.sh restart
ExecStop=/data/ELK/logstash/bin/service.sh stop
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target

保存后使用命令

systemctl enable logstash

激活logstash服务并启用开机启动,之后使用命令

systemctl start logstash

启动服务,观察服务启动日志是否异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值