流利的aws kinesis插件没有将记录放到kinesis

时间:2015-08-12 15:22:32

标签: sockets tcp amazon-ec2 amazon-kinesis fluentd

我一直试图看看FluentD是否是我公司通过Kinesis发送数据的可行方法。我在Amazon EC2实例上使用td-agent rpm pack安装了FLUEntD。 关于如何发送数据没有很多参数,只是TCP或in_forward插件可能是最合适的。我从TCP开始,但我从来没有真正做过TCP的任何事情,所以如果我犯了一些新的错误,那就很抱歉。

我一直在撞墙,试图发送TCP请求并将其发送给Kinesis。 Kinesis表明没有写作。我一开始以为我没有发送足够的数据来触发写入,所以我尝试发送大量的数据而没有运气。谷歌搜索问题没有给我答案,因为只有一个结果似乎可行,这是一个网站上的问题 - netdownload - 没有答案。

FluentD配置:

<match beacon.test>
       type kinesis
       stream_name test_stream
       region us-east-1
       random_partition_key true
       debug true
 </match>

<source>
  type tcp
  tag beacon.test
  format json
  log_level debug
</source>

CONNECT_TO_ADDR是一个常量,定义为我的ec2-instance的公共IP。 发送TCP数据的代码:

define('TCP_PORT', 5170);

for($i = 0; $i < 312500000; $i++)
{
    Send(array('id' => $i, 'value' => 'testing123'));
}

function Send($obj)
{
     try
     {
         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

         if($socket === false)
         {
            throw new Exception(GetSocketError("Unable to create a socket"));
         }

        if(socket_connect($socket, CONNECT_TO_ADDR, TCP_PORT))
        {
            $message = json_encode($obj, JSON_FORCE_OBJECT);

            if($message === false)
            {
                throw new Exception("Unable to create JSON object: " . json_last_error_msg());
            }

            $totalByteCount = strlen($message);

            $wrote = socket_send($socket, $message, $totalByteCount, MSG_EOF);

            if($wrote === false)
            {
                throw new Exception(GetSocketError("Unable to write to socket"));
            }

            echo "Wrote $wrote/$totalByteCount bytes successfully!\n";

        }
        else
        {
            throw new Exception(GetSocketError("Unable to connect to socket"));
        }
    }
    catch(Exception $ex)
    {
        if(isset($socket) && $socket !== false)
        {
            socket_shutdown($socket);
            socket_close($socket);
        }

        throw $ex;
    }
}

FluentD日志的输出:

  

D,[2015-08-11T21:17:00.244426#9848] DEBUG - :[Aws :: Kinesis :: Client 200&gt; 0.130176 0 retries] describe_stream(stream_name:“test_stream”)

     

2015-08-11 21:17:00 +0000 [info]:收听流畅插座0.0.0.0:24224
  2015-08-11 21:17:00 +0000 [info]:听dRuby uri =“druby://127.0.0.1:24230”&gt; object =“Engine”   2015-08-11 21:17:00 +0000 [debug]:监听tcp套接字0.0.0.0:5170
  2015-08-12 03:28:01 +0000 [info]:强制刷新缓冲事件

1 个答案:

答案 0 :(得分:0)

如何将copy + stdout添加到调试中?通过这种方式,您可以确认您的PHP应用程序实际上是否将数据发送给您的Fluentd。

<match>
  type copy
  <store>
    type stdout
  </store>
  <store>
    type kinesis
    stream_name test_stream
    region us-east-1
    random_partition_key true
    debug true
    flush_interval 10s
  </store>
</match>

此外,添加“flush_interval 10s”选项将使缓冲区刷新更频繁。