Json Logstash-如何通过RabbitMQ触发芹菜任务

Json Logstash-如何通过RabbitMQ触发芹菜任务,json,rabbitmq,celery,logstash,logstash-configuration,Json,Rabbitmq,Celery,Logstash,Logstash Configuration,有人能给我解释一下我如何通过Logstash触发芹菜任务吗? 可能吗 如果我尝试通过“phpamqplib”库在PHP中实现这一点,那么效果很好:不使用Logstash $connection = new AMQPStreamConnection( 'rabbitmq.local', 5672, 'guest', 'guest' ); $channel = $connection->channel(); $channel->queue_declare(

有人能给我解释一下我如何通过Logstash触发芹菜任务吗? 可能吗

如果我尝试通过“phpamqplib”库在PHP中实现这一点,那么效果很好:不使用Logstash

$connection = new AMQPStreamConnection(
    'rabbitmq.local',
    5672,
    'guest',
    'guest'
);
$channel = $connection->channel();
$channel->queue_declare(
    'celery',
    false,
    true,
    false,
    false
);
$taskId = rand(1000, 10000);
$props = array(
    'content_type' => 'application/json',
    'content_encoding' => 'utf-8',
);

$body = array(
    'task'      => 'process_next_task',
    'lang'      => 'py',
    'args'      => array('ktest' => 'vtest'),
    'kwargs'    => array('ktest' => 'vtest'),
    'origin'    => '@'.'mytest',
    'id'        => $taskId,
);

$msg = new AMQPMessage(json_encode($body), $props);
$channel->basic_publish($msg, 'celery', 'celery');
根据芹菜文件:

我正在尝试以json格式发送请求,这是我的日志过滤器:

ruby 
{
    remove_field => ['headers', '@timestamp', '@version', 'host', 'type']
    code => "
        event.set('properties', 
        {
            :content_type => 'application/json',
            :content_encoding => 'utf-8'
        })
    "
}
芹菜的答案是:

[2017-05-05 14:35:09,090: WARNING/MainProcess] Received and deleted unknown message.  Wrong destination?!
{content_type:None content_encoding:None delivery_info:{'exchange': 'celery', 'routing_key': 'celery', 'redelivered': False, 'consumer_tag': 'None4', 'delivery_tag': 66} headers={}}
基本上,芹菜无法解码我的信息格式或更好。。。我无法将请求设置为JSON格式:

这让我快发疯了,提前谢谢你提供的线索:

忘了吧,这是我在Logstash中的输出插件

rabbitmq
            {
                key             => "celery"
                exchange        => "celery"
                exchange_type   => "direct"
                user            => "${RABBITMQ_USER}"
                password        => "${RABBITMQ_PASSWORD}"
                host            => "${RABBITMQ_HOST}"
                port            => "${RABBITMQ_PORT}"
                durable         => true
                persistent      => true
                codec           => json

            }

根据中提供的信息,您不能

当您在ruby过滤器中处理事件时,实际上是在处理将放入消息体的内容,同时您要设置消息的rabbitmq头和属性


在这个功能实现之前,我不认为您能够实现它,除非您自己实现它。毕竟,这个插件在github上是可用的。

正如Olivier所说,现在不可能,但我已经创建了一个对官方项目的pull请求。

如果您正在寻找工作版本,请查看我的克隆:

您应该非常害怕该代码:

我完全不可能成为一名Ruby开发人员

但它是有效的: