欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于logstash同步服务器日志的问题分析

程序员文章站 2022-05-26 15:14:27
...

一.问题描述

​ 生产应用使用了两台服务器(后面叫服务器1、2),es和kibana搭建在另外一台服务器(后面叫服务器3)上,一共三台服务器。计划是将logstash搭建在es和kibana那一台上,集中管理。所以现在的问题是如何在服务器3上同步到服务器1、2的日志?

二.方法1

​ 查阅资料发现,logstash也支持类似集群的方式。在一台机器上搭建server端,另外的搭成client端。将client的日志同步到server端即可。具体配置如下:

​ 服务端conf:

input {
  tcp {
	mode => "server"
	port => 9600
	ssl_enable => false
  }
}
filter {
    json {
        source => "message"
    }
}
output {
    file {
        path => "/opt/lampp/crm_ceshi/logECO/%{+YYYY-MM-dd}/%{servip}-%{filename}"
        codec => line { format => "%{message}"}
    }
}

​ 客户端conf:

input{
    file {
        path => ["/opt/lampp/crm_ceshi/logECO/2018-10-30/agreeRefundToElemeV2.txt"]
        type => "ecolog"
        start_position => "beginning"
		sincedb_path => "/opt/tmp/logstash-6.4.2/data/plugins/inputs/file/.sincedb_3f3dc7129f441b61d81b1acadb65ed4e"
    }
}
filter {
    if [type] =~ /^ecolog/ {
        ruby {
            code => "file_name = event.get('path').split('/')[-1]
					 event.set('file_name',file_name)
					 event.set('servip','客户端IP')"
        }
        mutate {
            rename => {"file_name" => "filename"}
        }
    }
}
output {
	tcp {
        host  => "服务端ip"
        port  => 9600
        codec => json_lines
    }
}

​ 由于我这边机器不多,所以没有考虑这种方式。

三.方法2

​ 写个定时脚本,在每台机器上定时同步日志文件到服务器3。其实也是一个可行的办法,因为定时脚本可以设置时间,如果设置的时间短点的话,应该也是可以满足一定需求的。而且脚本也不复杂,scp加cron基本搞定。由于时效不好控制,赞没有采用。

四.方法3

​ 每台机器都同一搭建logstash,然后直接往对应的es上送。想来想去,这样可以减少集群模式下server端的搭建,同时互不影响。就采用这种方式了。具体配置比较简单,如下:

input {
  file{
    path => ['/app/logs/myapp/2021*/*.log']
    type => 'elasticsearch'
    codec => "json"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["http://xx.xx.xx.xx:9201"]
    index => "myapp-log-%{+YYYY.MM.dd}"
  }
}

五.另外遇到的一个关于启动的问题

​ 使用如下命令启动:

./bin/logstash -f ./config/myconf.conf & 

​ 发现可以同步,日志也能送到es,但是一旦退出服务器控制台,再次进入发现:后续的日志并没有再同步。所以logstash还是只能每天去定时启动吗??

​ 使用如下命令:

ps -ef|grep logstash

​ 发现,这个logstash进程是一直在的,可是为什么没有一直同步呢?具体我也没有弄清楚,但是找到了解决办法,杀掉logstash的进程(kill -9)后,使用如下命令启动

nohup ./bin/logstash -f ./config/myconf.conf & 

​ 关掉控制台,去kibana中发现也可以同步日志了。至此问题解决