windows 下 logstash分析日志文件到mysql

1、环境准备

windows 10

logstash7.0.0

jdk8

mysql8

需要注意得是 logstash 与jdk之间是有版本要求的,logstash版本过高的话可能就需要 jdk11环境。

 1.1 logstash下载地址:

https://www.elastic.co/cn/downloads/past-releases#logstash

点击 Download  下载ZIP ,然后解压就可以了

1.2 jdk mysql环境自行安装

2、开始配置

 2.1 logstash-output-jdbc 插件安装 

命令:logstash-plugin install logstash-output-jdbc

管理员运行cmd 不然可能执行该命令可能报错

切换到bin 目录下 执行命令 ,提示”Installation successful“表示成功

使用命令  logstash-plugin list 可以查看 列表中是否包含安装的插件

2.2 mysql驱动

mysql-connector-java-8.0.21.jar 自己下载 或者在本地maven 库中可以获取

2.3 修改logstash配置文件

logstash-7.0.0\config文件下,复制一份logstash-sample.conf 重命名 logstash-test.conf(你可以改成你想要的名称)

 logstash-test.conf 内容

input 数据输入

filter 过滤规则

output 数据输出

input {
	file {
		path => "D:/orderlog/ev-dataaccess-stake.2022-07-06.1.log"
		start_position => "beginning"

	}
}

filter {
  
	  grok {
	  
	        match => {
				"message" => "batch (?<type>connectorOrderToMysql) - orderId:(?<orderId>[0-9]*),startChargeSeq:(?<startChargeSeq>[a-z|A-Z|0-9]*),"
			}
			
		}
	 mutate{
            remove_field => ["@version","@timestamp","path"]
     
        }
}

    output {
	
	jdbc { 
			driver_jar_path => "D:/mysql-connector-java-8.0.21.jar"
			driver_class => "com.mysql.cj.jdbc.Driver"
			connection_string => "jdbc:mysql://localhost:3306/ordertest?user=root&password=root&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull"
			statement => [ "INSERT INTO order_mysql_7_6 (type,seq) VALUES(?,?)","type","startChargeSeq" ]
		}

	stdout {
		codec => json_lines
	}
}

3. 管理员 cmd 在logstash的bin目录下 命令:logstash -f ../config/logstash-test.conf

 数据库插入成功

3、需要注意的

3.1  配置文件中路径 使用 ”/“分割,

配置中 path l路径中开始使用 ”\“,导致读取文件失败

input {
    file {
        path => "D:/orderlog/ev-dataaccess-stake.2022-07-06.1.log" #你需要分析的文件
        start_position => "beginning"

    }
}

3.2 output  -jdbc 配置中

output {
    
    jdbc { 
            driver_jar_path => "D:/mysql-connector-java-8.0.21.jar" #自己的驱动路劲
            driver_class => "com.mysql.cj.jdbc.Driver" # 注意 cj新的驱动名称 
            connection_string => "jdbc:mysql://localhost:3306/ordertest?user=root&password=root&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull"
            statement => [ "INSERT INTO order_mysql_7_6 (type,seq) VALUES(?,?)","type","startChargeSeq" ]
        }

    stdout {
        codec => json_lines
    }
}
(1)connection_string 数据库的账户 密码 跟在url中,mysql8需要有 ”&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull

(2)statement : 执行的sql 有下3种写法

 ① statement => [ "INSERT INTO order_mysql_7_6 (type,seq) VALUES(?,?)","type","startChargeSeq" ]

 ② statement => [ "INSERT INTO order_mysql_7_6 (type,seq) VALUES(?,?)","[type]","[startChargeSeq]" ]

③  statement => [ "INSERT INTO order_mysql_7_6 (type,seq) VALUES(?,?)","%{type}","%{startChargeSeq}" ]

因为测试中发现,日志中不内容不匹配的时候也会执行插入操作,

① ②  会插入大量空值 如果不想要数据库中需要大量的空值,暂时解决是对数据库进行设置,不允许为空,这样虽然logstash会有插入sql报错。 有更好的方法可以评论区回复。

③ 会将%{type} %{startChargeSeq}作为值插入

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值