logstash系列~4.logstash-filter-jdbc_static插件


前言

​ 在众多的Logstash过滤器中,许多过滤器都可以对pipeline的数据进行富化操作,其中比较常用的就是jdbc_static,其可以通过调用远程数据库的预加载数据进行pipeline数据的丰富化操作。

​ logstash-filter-jdbc_static插件最适合于静态 或 不经常更改的数据的“丰富化”处理。

​ 依赖准备:Mysql服务,本案例采用docker mysql容器。

​ 实现功能:将logstash接收到的请求日志,通过调用mysql进行富化处理。

gitee代码地址:https://gitee.com/vincent_whf/logstash/tree/master/2.logstatsh_study%E5%8A%A0%E5%85%A5jdbc_static

1. 数据库准备

使用docker启动mysql数据库

1
docker run -itd  --network host  --name mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7

注意:docker的网络模式采用host模式

2. logstash准备

2.1 代码路径

├── logstatsh_study

​ ├── config

​ └── logstash.yml

​ └── pipelines.yml

​ ├── pipeline

​ └── in.conf

​ └── out.conf

​ └── filter1.conf

├── syslog.py

├── udp.py

代码路径解释:

1)config文件夹下存放的是配置文件logstash.yml,配置与logstash相关的配置。配置文件pipelines.yml,配置与管道相关的配置,默认启动pipeline.id为main的管道

2)pipeline文件夹为管道文件,主要存放的是接收、输出、过滤日志信息的conf配置文件

3)syslog.py和dup.py文件,主要用于测试,实现推送日志信息

2.2 pipelines.yml配置

​ 在pipelines.yml文件中设置默认管道main,且配置默认解析过滤配置文件的path.config参数。

如下是我在pipelines.yml中定义的内容:

1
2
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/*.conf"

3. 定义过滤规则

过滤规则采用logstash-filter-jdbc_static插件,实现从数据库中查询数据,并对写入日志的“丰富化”处理。

实现功能:查询数据库表safety_equipment中的数据,根据ip参数过滤结果,并将查询后的ip、name、port参数组装在日志中。

如下是我在pipeline/filter1.conf中定义的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
filter {
jdbc_static {
# 从本地数据库中查询全量数据
loaders => [{
query => "select id, ip, name, port from safety_equipment"
local_table => "servers"
}]
# 将数据库中查询的数据缓存到本地,并取名为servers
local_db_objects => [
{
name => "servers"
index_columns => ["id"]
columns => [
["id", "int"],
["ip", "varchar(50)"],
["name", "varchar(50)"],
["port", "varchar(50)"]
]
}]
# 根据条件进行过滤
local_lookups => [ {
query => "SELECT id, ip, name, port FROM servers WHERE ip = :ip"
parameters => {ip => "[host]"}
target => "from_ip"
}]
# 向日志记录中添加过滤后的字段
add_field => {
server_name => "%{[from_ip][0][name]}"
server_id => "%{[from_ip][0][id]}"
server_port => "%{[from_ip][0][port]}"
}
# 定时器
loader_schedule => "*/5 * * * *"
# 数据库相关配置
jdbc_user => "root"
jdbc_password => "123456"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_driver_library => "/tmp/mysql-connector-java-8.0.20.jar"
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/iview"
}
}

4. 调试

执行python syslog.py文件,并查看logstash的日志打印,观察是否有绑定from_ip参数字段。

打印日志


文章作者: 王海飞
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王海飞 !
  目录