首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用logstash动态定义elasticsearch索引?

如何使用logstash动态定义elasticsearch索引?
EN

Stack Overflow用户
提问于 2019-04-25 08:57:27
回答 1查看 403关注 0票数 0

参见下面的logstash配置文件,使用jdbc插件将记录从mysql数据库拉到elasticsearch索引中。如何修改它,以便根据在数据库中找到的company_id值生成单独的索引,如:company_%{company_id}_user_events

这是否可以动态完成,或者是否需要为每个公司id预先配置和硬编码创建单独的logstash配置文件?有没有像脚本或模板这样的中间路线?

如果有帮助,可以将company_id字段添加到数据库的ahoy_events表中,而不是像现在这样通过用户关联“添加”。

当前logstash.conf

代码语言:javascript
复制
input {
    jdbc {
        jdbc_driver_library => "/opt/mysql-connector-java-5.1.47-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://mysql:3306/${DB_NAME}"
        jdbc_user => "${DB_USER}"
        jdbc_password => "${DB_PASSWORD}"
        schedule => "* * * * *"
        statement => "select * from ahoy_events where time > :sql_last_value"
    }
}

filter {
    jdbc_streaming {
        jdbc_driver_library => "/opt/mysql-connector-java-5.1.47-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://mysql:3306/${DB_NAME}"
        jdbc_user => "${DB_USER}"
        jdbc_password => "${DB_PASSWORD}"
        statement => "select * from users where id = :user"
        parameters => { "user" => "user_id" }
        target => "user"
    }
    jdbc_streaming {
        jdbc_driver_library => "/opt/mysql-connector-java-5.1.47-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://mysql:3306/${DB_NAME}"
        jdbc_user => "${DB_USER}"
        jdbc_password => "${DB_PASSWORD}"
        statement => "select * from visits where id = :visits"
        parameters => { "visits" => "visit_id" }
        target => "visits"
    }
    mutate {
        add_field => { "company_id" =>  "%{[user][0][company_id]}"}
    }
    jdbc_streaming {
        jdbc_driver_library => "/opt/mysql-connector-java-5.1.47-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://mysql:3306/${DB_NAME}"
        jdbc_user => "${DB_USER}"
        jdbc_password => "${DB_PASSWORD}"
        statement => "select * from companies where id = :company_id"
        parameters => { "company_id" => "company_id" }
        target => "company"
    }
    json {
        source => "properties"
        target => "properties"
    }
    mutate {
        add_field => { "user_name" => "%{[user][0][name]}" }
    }
    mutate {
        add_field => { "company_name" => "%{[company][0][name]}" }
    }
    mutate {
        rename => { "[visits][0]" => "visit" }
    }
    mutate {
        remove_field => ["visits", "company", "user"]
    }
}

output {
    elasticsearch {
        hosts => ["http://elasticsearch:9200"]
        index => "user_events-%{+YYYY.MM.dd}"
        document_id => "%{id}"
    }
}

所需的结果是一个名称空间为company_id:company_%{company_id}_user_events的索引,这样我以后就可以在相同模式的company_%{company_id}_other_records中添加其他索引

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-25 09:21:46

不是100%确定,但从技术上讲应该就这么简单:

代码语言:javascript
复制
output {
    elasticsearch {
        hosts => ["http://elasticsearch:9200"]
        index => "company_%{company_id}_events-%{+YYYY.MM.dd}"
        document_id => "%{id}"
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55840413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档