Logstash - 从关系数据库组创建术语



我在 MySQL 中有一个表,我想将其导入到 Elasticsearch 中

例如,数据如下所示

team   buyer
====   ======
one    Q76876
one    Q66567
one    T99898
two    Q45456
two    S77676

我想使用 logstash 将其导入到弹性搜索中,并创建一个如下所示的索引

{
"id": "one",
"team": one,
"buyers": ["Q76876", "Q66567", "T99898"]
},
{
"id": "two",
"team": "two",
"buyers": ["Q45456", "S77676"]
}

我将如何编写我的 .conf 脚本来实现这一点?

Logstash 将事件放在索引中,除非您应用某些过滤器。你的案子看起来很简单。如果将 sql 查询格式化为以所需的格式返回数据,则无需应用任何筛选器,只需将数据库和 sql 查询挂接以在 logstash config 中运行,并将输出作为弹性搜索索引。

例如:

MySql 查询看起来像这样:(我不擅长 mySQL,下面只是为了给出一个想法 - 请验证它是否有效(

SELECT team as id, 
team, 
GROUP_CONCAT(DISTINCT buyer SEPARATOR ', ') as buyers
FROM tablename GROUP BY team

这将返回如下内容:

+-----+------+------------------------+
| id  | team |         buyers         |
+-----+------+------------------------+
| one | one  | Q76876, Q66567, T99898 |
| two | two  | Q45456, S77676         |
+-----+------+------------------------+

日志存储配置将简单地看起来像:

input {
jdbc {
jdbc_driver_library => "${DATABASE_DRIVER_PATH}"
jdbc_driver_class => "${DATABASE_DRIVER_PATH}"
jdbc_connection_string => "{CONNECTIONSTRING}"
jdbc_user => "${DATABASE_USERNAME}"
jdbc_password => "${DATABASE_PASSWORD}"
statement_filepath => "${LOGSTASH_SQL_FILEPATH}" #this will be the sql written above
}
}
filter {
}
output {
elasticsearch {
action => "index"       
hosts => ["${ELASTICSEARCH_HOST}"]
user => "${ELASTICSEARCH_USER}"
password => "${ELASTICSEARCH_PASSWORD}"
index => "${INDEX_NAME}"       
document_type => "doc"                      
document_id => "%{id}"       
}
stdout { codec => rubydebug }
stdout { codec => dots }
}

最新更新