官网下载地址: 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主目录为起点)
首先来测试配置文件是否可用,使用-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删除(如果你之前读取过的话,否则可能没有任何变化.)
随后启动我们的 ES(本机和虚拟机的),可以的话,也可以启动kibana
在启动FIlebeat 前,需要删除其目录下data文件夹中的数据registry
通过命令重新启动filebeat
(windows下 进入到filebeat工作目录 按住shift + 鼠标右键 ,在此处打开powershell窗口)
./filebeat -e -c filebeat.yml -d "publish"
此时,filbeat应该会弹出很多json格式的数据,
打开一个命令端(linux),输入命令可以查询刚刚传输给es的数据
curl -XGET '192.168.26.128:9200/logstash-yyyy.mm.dd/_search?pretty&q=response=200'
其中日期更改为你的日期,格式为yyyy.mm.dd ,例如 2018.08.08
返回结果类似下面的格式
再试试另一个节点,我这里依据的是另一篇博客搭建的ES集群
由于我是连接的WIFI ,所以这次的IP 略有不同.
根据上面的搜索结果,可以看到一些属性, 我们可以根据属性来搜索.
比如我们搜索 国家名为中国的数据
curl -XGET '192.168.26.1:9200/logstash-2018.08.08/_search?pretty&q=geoip.country_name=China'
结果类似下面
二 . 配置一个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
成功写入到文件中
注意, 本次测试中
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"
}
}