突然来的一个需求,将日志文件中json串的内容写入到数据库中,作为一个偷懒coder,第一个时间想到就是偷懒的做法:将logstash扫描的结果直接输入到mysql库表中。
关于logstash的安装就不再详述,后面如果写安装的介绍时再回头补充链接,我安装的logstash版本是5.6.6。
从google上查了下logstash关于mysql的output插件:https://github.com/theangryangel/logstash-output-jdbc。看了下说明
1、从官网上的说明,我们先要安装插件。进入logstash目录下执行./bin/logstash-plugin install logstash-output-jdbc,如果因网络的原因你将master下载下来配置也是可以的。
2、从https://mvnrepository.com/artifact/mysql/mysql-connector-java下载一个相对较新的版本,我这里下载的是8.0.11。在logstash的vendor下建立jar/jdbc目录,并将下载的mysql-connector-java-8.0.11.jar包上传到这个目录下。
3、logstash的配置,具体如下:
input {
file {
path => "/home/linxiaojie1/logstash-5.6.6/test.log"
start_position => "end"
sincedb_path => "/home/linxiaojie1/logstash-5.6.6/sincedb-access"
}
}
filter {
grok {
match => {
"message" => ["result:%{GREEDYDATA:matched_result}"]
}
}
json {
source => "matched_result"
}
mutate {
"remove_field" => ["@timestamp", "logsource", "pid", "program", "@version", "host", "path", "message", "time", "matched_result"]
}
}
output {
jdbc{
driver_jar_path => "/home/linxiaojie1/logstash-5.6.6/mysql-connector-java-8.0.11.jar"
driver_class => "com.mysql.jdbc.Driver"
connection_string => "jdbc:mysql://183.36.121.66:8066/douyin?autoReconnect=true&user=ysec_craw@crawler&password=u5TgQIaGkU"
statement => ["insert into tb_videos(md5, Id, view, timestamp) values(?,?,?,?)","[md5]", "[Id]", "[view]", "[timestamp]"]
}
stdout { codec => rubydebug }
}
上述插入数据库的字段是json串中的key.
一切搞定,好来运行下logstash,logstash -f logstash.conf。
查下数据库确认下是否插入成功了:
mysql> select count(1) from tab_test;
+----------+
| count(1) |
+----------+
| 81 |
+----------+
1 row in set (0.05 sec)
mysql>
关于logstash-output-jdbc插件已经成功安装并且验证了。