[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道

官网下载地址: https://www.elastic.co/downloads/logstash

mysql 依赖包链接:https://pan.baidu.com/s/1ljTs31vxiefM5NJi3ZWjYA 密码:azff

本文基于的是这篇博客搭建的ES集群:https://blog.csdn.net/Xiong_j_L/article/details/81077488

我这里下载的是logstash.tar.gz 包

tar -xzvf logstash-6.3.2.tar.gz

解压完成后,需要创建一个配置文件

一 .配置一个filebeat为输入源的Logstash管道

运行logstash时,使用-f指定配置文件。

我们分为三步来完成mysql、filebeat为输入源 ,以Es、文本文件为输出的管道,

创建名为“pipeline-2.conf”的文件并将其保存在Conf 文件夹下.

input {
    beats {
        port => "5044"
    }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip{
        source => "clientip"
    }
}
output {
    elasticsearch{
	hosts => ["192.168.26.128:9200","192.168.26.1:9200"]
    }
}

 

当然你可以保存在其他地方,只是运行Logstash的时候需要指定该配置文件的路径.(以logstash主目录为起点)

[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道_第1张图片

 

首先来测试配置文件是否可用,使用-f标志指定配置文件。.

./bin/logstash -f conf/pipeline-2.conf --config.test_and_exit

--config.test_and_exit,会测试你配置文件的正确性,并给出错误信息.

如果可用,会输出 OK ,之后可以通过下面的命令来启动logstash

./bin/logstash -f conf/pipeline-2.conf --config.reload.automatic

 

好,现在我们来配置一下 filebeat

进入到 filebeat的主目录. 保存一份filebeat.yml副本

修改filebeat.yml  的输入和输出

#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
  enabled: true
# 路径是你读取日志文件的位置,*.log 代表所有日志文件
  paths:
    - E:\ELK\testlog\*.log
#----------------------------- Logstash output --------------------------------
output.logstash:
  #  Logstash 主机IP
  hosts: ["192.168.26.128:5044"]

要让Filebeat重新读取文件需要把 data文件夹中的 registry删除(如果你之前读取过的话,否则可能没有任何变化.)

[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道_第2张图片

 

随后启动我们的 ES(本机和虚拟机的),可以的话,也可以启动kibana

在启动FIlebeat 前,需要删除其目录下data文件夹中的数据registry

通过命令重新启动filebeat

(windows下 进入到filebeat工作目录 按住shift + 鼠标右键 ,在此处打开powershell窗口)

./filebeat -e -c filebeat.yml -d "publish"

此时,filbeat应该会弹出很多json格式的数据,

[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道_第3张图片

打开一个命令端(linux),输入命令可以查询刚刚传输给es的数据

curl -XGET '192.168.26.128:9200/logstash-yyyy.mm.dd/_search?pretty&q=response=200'

其中日期更改为你的日期,格式为yyyy.mm.dd   ,例如 2018.08.08

返回结果类似下面的格式

[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道_第4张图片

再试试另一个节点,我这里依据的是另一篇博客搭建的ES集群

由于我是连接的WIFI ,所以这次的IP 略有不同.

根据上面的搜索结果,可以看到一些属性, 我们可以根据属性来搜索.

比如我们搜索 国家名为中国的数据

curl -XGET '192.168.26.1:9200/logstash-2018.08.08/_search?pretty&q=geoip.country_name=China'

结果类似下面

[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道_第5张图片

二 . 配置一个mysql为输入源的管道

①  .首先开放3306端口

1.windows下添加入站规则

  控制面板->高级设置->单击入站规则-> 新建规则-> 选择端口,点击下一步 -> tcp  /   特定本地端口 : 3306

2.lunux 下开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
service firewalld restart

② . 添加一个mysql账户用于远程连接

由于mysql 的原因,root用户只能本地访问数据库,所以我们需要新建一个用户以远程访问

进入到Mysql命令行

GRANT USAGE ON *.* TO 'logstash'@'%' IDENTIFIED BY '246810' WITH GRANT OPTION;

添加一个用户logstash @'%'  表示任意主机可以连接  密码为246810

 

grant select,delete,update,create,drop on *.* to "logstash"@"%" identified by "246810";

给这个用户操作权限

flush privileges;//刷新系统权限表

③ . logstash配置文件

pipeline-3.yml

input {
    jdbc {
        jdbc_driver_library => "/root/logstash-6.3.2/mysql-connector-java-5.1.46.jar"
	jdbc_driver_class => "com.mysql.jdbc.Driver"
	jdbc_connection_string => "jdbc:mysql://192.168.31.198:3306/exchange01?useUnicode=true&characterEncoding=utf8"
	jdbc_user => "logstash"
	jdbc_password => "246810"
	# 设置监听间隔 分、时、天、月、年,全部为*为每分钟都更新
    schedule => "* * * * *"
      	statement => "SELECT * from goods"
    }
    
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip{
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.26.128:9200"]
    }
    file {
        path => "/root/logstash-6.3.2/file/mysqlfile"
    }
}

老规矩,先测试一下配置文件是否正确

./bin/logstash -f pipeline-3.conf --config.test_and_exit

OK 之后再启动logstash

成功写入到文件中

[Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道_第6张图片

 

注意, 本次测试中

schedule => "* * * * *"   

是为了方便测试,它会每分钟读写一次,追加在文本中,所以建议测试成功后,修改工作频率,以免占用过多空间

三 . 整合

分开测试的原因是为了便利性,以免其中某一个成功了,无法判断另外一个是否也成功,推荐大家静下心,一个一个来测试.

pipeline-final.yml

input {
    jdbc {
        jdbc_driver_library => "/root/logstash-6.3.2/mysql-connector-java-5.1.46.jar"
	jdbc_driver_class => "com.mysql.jdbc.Driver"
	jdbc_connection_string => "jdbc:mysql://192.168.31.198:3306/exchange01?useUnicode=true&characterEncoding=utf8"
	jdbc_user => "logstash"
	jdbc_password => "246810"
	schedule => "* * * * *"
      	statement => "SELECT * from goods"
    }
    beats {
        port => "5044"
    }
    
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip{
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.26.128:9200"]
    }
    file {
        path => "/root/logstash-6.3.2/file/mysqlfile"
    }
}

 

你可能感兴趣的:([Logstash 6.3.2] 配置以mysql、filebeat为输入,Elasticsearch为输出的管道)