Ruby 在logstash中,如何获取要附加在索引名中的日期部分

Ruby 在logstash中,如何获取要附加在索引名中的日期部分,ruby,filter,logstash,Ruby,Filter,Logstash,我正在尝试使用下面的logstash conf文件将数据加载到Elasticsearch中。我必须创建一个索引名,并在其中一列(dw_isnert_dt)后面加上日期部分。当我没有聚合这些数据来创建地图时,它工作得很好,但是使用聚合它并没有像预期的那样工作。因此,假设dw_insert_dt值为“2021-04-27”,则索引名称为“test_index_2021_04_27”。请提供帮助,因为我的生产部署需要这些 input { jdbc { jdbc_connecti

我正在尝试使用下面的logstash conf文件将数据加载到Elasticsearch中。我必须创建一个索引名,并在其中一列(dw_isnert_dt)后面加上日期部分。当我没有聚合这些数据来创建地图时,它工作得很好,但是使用聚合它并没有像预期的那样工作。因此,假设dw_insert_dt值为“2021-04-27”,则索引名称为“test_index_2021_04_27”。请提供帮助,因为我的生产部署需要这些

input {
    jdbc {
        jdbc_connection_string => "jdbc:oracle:thin:@host:1521/ORCL"
        jdbc_user => "username"
        jdbc_password => "password"
        jdbc_validate_connection => true
        jdbc_driver_library => "/home/logstash-6.2.4/jdbc_drivers/OJDBC-Full/ojdbc7.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
        schedule => "35 4 * * *"
        statement_filepath =>"/home/logstash-6.2.4/queries/dummy.sql"
        }
}

filter {
        ruby {
        code => "event.set('dw_insert_dt_str', event.get('dw_insert_dt').time.localtime.strftime('%Y_%m_%d'))"
    }

    aggregate {
    task_id => "%{pkey}"
    code => "
        map['pkey']                 = event.get('pkey')
        map['name']                 = event.get('name')
        map['role']                 = event.get('role')
        map['dw_insert_dt']         = event.get('dw_insert_dt')

        map['CUST_ADDRESS'] ||= []
        customer_address_list = {'address_id' => event.get('address_id'), 'addr1' => event.get('addr1'),'city' => event.get('city') , 'state' => event.get('state')}
        if (event.get('address_id') != nil )
            if ! map['CUST_ADDRESS'].include?(customer_address_list)
            map['CUST_ADDRESS'] << customer_address_list
            end
        end

       event.cancel()
       "
       push_previous_map_as_event => true
       timeout => 20
     }
   }

output {
    elasticsearch {
        index => "test_index_%{dw_insert_dt_str}"
        hosts => [ "host:port" ]
    }
}
输入{
jdbc{
jdbc_connection_string=>“jdbc:oracle:thin:@host:1521/ORCL”
jdbc_user=>“用户名”
jdbc_密码=>“密码”
jdbc_验证_连接=>true
jdbc_driver_library=>“/home/logstash-6.2.4/jdbc_drivers/OJDBC Full/ojdbc7.jar”
jdbc_driver_class=>“Java::oracle.jdbc.driver.OracleDriver”
附表=>“35 4***”
语句_filepath=>“/home/logstash-6.2.4/querys/dummy.sql”
}
}
滤器{
红宝石{
代码=>“event.set('dw_insert_dt_str',event.get('dw_insert_dt').time.localtime.strftime('%Y_%m_%d'))”
}
聚合{
任务id=>“%{pkey}”
代码=>”
map['pkey']=event.get('pkey')
映射['name']=event.get('name')
映射['role']=event.get('role')
map['dw\u insert\u dt']=event.get('dw\u insert\u dt'))
地图['CUST_ADDRESS']| |=[]
客户地址列表={'address\u id'=>event.get('address\u id'),'addr1'=>event.get('addr1'),'city'=>event.get('city'),'state'=>event.get('state')}
if(event.get('address_id')!=nil)
如果!映射['CUST\u ADDRESS'],包括?(客户地址列表)

map['CUST_ADDRESS']如果使用push_previous_map_as_event选项,那么事件上唯一存在的字段就是添加到映射中的字段。在这种情况下,您将[dw_insert_dt_str]添加到原始事件中,但是您需要添加事件。取消该选项。您需要将其添加到映射中

你可以从活动中复制它

map['dw_insert_dt_str']         = event.get('dw_insert_dt_str')
或者将ruby代码移动到聚合过滤器

map['dw_insert_dt_str']         = event.get('dw_insert_dt').time.localtime.strftime('%Y_%m_%d')

你的意思是我使用了下面的方法吗?虽然我在聚合函数中使用了这个函数,但得到的错误是“error][logstash.agent]无法执行操作”map['insert\u dt\u str']=event.get('dw\u insert\u date')。time.localtime.strftime('%Y\u%m\u%d'))更新以回答这个问题。