On Sun, Jan 10, 2016 at 9:46 PM, Emily Gu <[email protected]> wrote:

> Hi Timur,
>
> Thanks for sharing your experience and data points. I got it working now
> by using TCP. The performance has not been tested yet. I'll keep you guys
> posted. For each message sent I can see one decoder stopped message as
> below. From what Rob explained, it seems to work as expected.
>

but not ideal. you should hold the tcp connection open and send many
messages over a single connection.


> *"2016/01/10 16:28:38 Decoder 'tcp_in:3242-ProtobufDecoder-127.0.0.1':
> stopped"*
>
> Also, I can hear the pounding sound for each sent when volume is on.  I'm
> not sure if this is normal.
>
> thanks.
>
> Emily
>
> On Sun, Jan 10, 2016 at 2:12 AM, Timur Batyrshin <[email protected]> wrote:
>
>> Hi Emily,
>>
>> Not sure what is your exact case for sending out data to Heka.
>> Usually I find it much more easy to use JSON or similar plain text format
>> to sending messages to Heka unless you have tight requirements for
>> throughput.
>>
>> In my tests I've seen throughputs of ~1K messages/second (~10Mbit/s) on
>> c4.large instance on AWS using stock lua JSON decoder/encoder and HTTP
>> output/input.
>> If you are expecting smaller throughputs you should probably look into
>> that -- at least until you get used to Heka and to how it works.
>>
>> Best regards,
>> Timur
>>
>> On Fri, Jan 8, 2016 at 3:22 AM, Emily Gu <[email protected]> wrote:
>>
>>> This is working. Thanks!
>>>
>>> I'm confusing on the two instances parts and also others.
>>>
>>> Yes, I need to send our custom data into Heka. I want to see if I need
>>> to write my own custom Heka plugin or leverage existing Heka plugins. My
>>> custom data is a slice of metrics can send into Heka through TCP.
>>>
>>> Your suggestion is very much appreciated.
>>>
>>> Thanks,
>>> Emily
>>>
>>> On Thu, Jan 7, 2016 at 4:10 PM, Rob Miller <[email protected]> wrote:
>>>
>>>> From what I can tell (and it's not very clear), it looks like you've
>>>> got one Heka instance running that has only a TcpInput, nothing else. That
>>>> will accept data, but it's not going to do anything with that data.
>>>>
>>>> Then you've got a separate Heka config that contains no inputs, but
>>>> only a TcpOutput (pointing at the input that's specified in the other
>>>> config) and a FileOutput. These outputs might conceivably send data
>>>> somewhere, but there are no inputs, so it's not clear where that data would
>>>> come from.
>>>>
>>>> Drop the TcpOutput altogether, and combine the TcpInput and the
>>>> FileOutput into a single config:
>>>>
>>>> [hekad]
>>>> maxprocs = 1
>>>> share_dir = "/Users/egu/heka/share/heka"
>>>>
>>>> [tcp_in:3242]
>>>> type = "TcpInput"
>>>> splitter = "HekaFramingSplitter"
>>>> decoder = "ProtobufDecoder"
>>>> address = ":3242"
>>>>
>>>> [tcp_heka_output_log]
>>>> type = "FileOutput"
>>>> message_matcher = "TRUE"
>>>> path = "/tmp/output.log"
>>>> perm = "664"
>>>> encoder = "tcp_heka_output_encoder"
>>>>
>>>> [tcp_heka_output_encoder]
>>>> type = "PayloadEncoder"
>>>> append_newlines = false
>>>>
>>>>
>>>> Once you've done that, you should be able to use `heka-inject` to send
>>>> a message into your running Heka:
>>>>
>>>> $ heka-inject -heka 127.0.0.1:3242 -payload "1212 this is just a test"
>>>>
>>>> If you want to send custom data in through that TcpInput, then you'll
>>>> have to switch to using a different splitter and a different decoder, the
>>>> default setup you're using will only know how to handle Heka protobuf
>>>> streams.
>>>>
>>>> -r
>>>>
>>>>
>>>>
>>>>
>>>> On 01/07/2016 03:48 PM, Emily Gu wrote:
>>>>
>>>>> Thanks you both Rob and David very much!
>>>>>
>>>>> Not sure where I need to define "base_dir"?
>>>>>
>>>>> I'm going to write a Heka plugin to pass our metrics data into Heka.
>>>>>
>>>>> For now, I have a hard time to see the data I send in through
>>>>> TCP programmatically through TcpInput in the output.log file.
>>>>> I don't see any output.  The configs are:
>>>>>
>>>>> tcp_input.toml
>>>>> ============
>>>>>
>>>>> [hekad]
>>>>>
>>>>> maxprocs = 1
>>>>>
>>>>> share_dir = "/Users/egu/heka/share/heka"
>>>>>
>>>>>
>>>>> [tcp_in:3242]
>>>>>
>>>>> type = "TcpInput"
>>>>>
>>>>> splitter = "HekaFramingSplitter"
>>>>>
>>>>> decoder = "ProtobufDecoder"
>>>>>
>>>>> address = ":3242"
>>>>>
>>>>>
>>>>> tcp_output.toml
>>>>>
>>>>> ==============
>>>>>
>>>>> [hekad]
>>>>>
>>>>> maxprocs = 1
>>>>>
>>>>> share_dir = "/Users/egu/heka/share/heka"
>>>>>
>>>>>
>>>>> [tcp_out:3242]
>>>>>
>>>>> type = "TcpOutput"
>>>>>
>>>>> message_matcher = "TRUE"
>>>>>
>>>>> address = "127.0.0.1:3242 <http://127.0.0.1:3242>"
>>>>>
>>>>>
>>>>> [tcp_heka_output_log]
>>>>>
>>>>> type = "FileOutput"
>>>>>
>>>>> message_matcher = "TRUE"
>>>>>
>>>>> path = "/tmp/output.log"
>>>>>
>>>>> perm = "664"
>>>>>
>>>>> encoder = "tcp_heka_output_encoder"
>>>>>
>>>>>
>>>>> [tcp_heka_output_encoder]
>>>>>
>>>>> type = "PayloadEncoder"
>>>>>
>>>>> append_newlines = false
>>>>>
>>>>>
>>>>> The client:
>>>>>
>>>>> package main
>>>>>
>>>>>
>>>>> import (
>>>>>
>>>>>      "fmt"
>>>>>
>>>>>      "github.com/mozilla-services/heka/client
>>>>> <http://github.com/mozilla-services/heka/client>"
>>>>>
>>>>> )
>>>>>
>>>>>
>>>>>
>>>>> func main() {
>>>>>
>>>>>      message_bytes := []byte {100}
>>>>>
>>>>>
>>>>>      sender, err := client.NewNetworkSender("tcp", "127.0.0.1:3242
>>>>> <http://127.0.0.1:3242>")
>>>>>
>>>>>      if err != nil {
>>>>>
>>>>>          fmt.Println("Could not connect to", "127.0.0.1:3242
>>>>> <http://127.0.0.1:3242>")
>>>>>
>>>>>          return
>>>>>
>>>>>      }
>>>>>
>>>>>      fmt.Println("Connected")
>>>>>
>>>>>      var i int
>>>>>
>>>>>      for i = 0; i < 10; i++ {
>>>>>
>>>>> fmt.Println("message byte:", string(message_bytes))
>>>>>
>>>>>          err = sender.SendMessage(message_bytes)
>>>>>
>>>>>          if err != nil {
>>>>>
>>>>>              break
>>>>>
>>>>>          }
>>>>>
>>>>>      }
>>>>>
>>>>>      fmt.Println("sent", i, "messages")
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> Please let me know what else I need to change.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Emily
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Jan 7, 2016 at 3:28 PM, David Birdsong <
>>>>> [email protected]
>>>>> <mailto:[email protected]>> wrote:
>>>>>
>>>>>
>>>>>
>>>>>     On Thu, Jan 7, 2016 at 3:22 PM, Rob Miller <[email protected]
>>>>>     <mailto:[email protected]>> wrote:
>>>>>
>>>>>         On 01/07/2016 03:09 PM, Emily Gu wrote:
>>>>>
>>>>>             Thanks David for all the help! I'll give it a try.
>>>>>
>>>>>             Please bear with me as some parts I still not understand.
>>>>>
>>>>>             1. Why do I have to run two Heka instances where one for
>>>>>             input and
>>>>>             another for output?
>>>>>
>>>>>
>>>>>         Because if you send the output from a Heka instance back into
>>>>>         itself, then you're likely setting up an infinite loop of
>>>>>         traffic that will spin out of control.
>>>>>
>>>>>             2. Did you mean I need to specify different share_dirs in
>>>>>             input and
>>>>>             output Toml configs?
>>>>>
>>>>>
>>>>>         If you're running multiple Heka instances on a single machine,
>>>>>         it *should* be fine for them to use the same share_dir, which
>>>>> is
>>>>>         read-only. It's very important that each specifies a unique
>>>>>         base_dir, however, since that's used by Heka for internal
>>>>>         bookkeeping data. Two Heka's using the same base_dir is asking
>>>>>         for trouble.
>>>>>
>>>>>             3. Do I need both TcpOutput and FileOutput in order for me
>>>>>             to see
>>>>>             messages inside an output file? What if I didn't specify
>>>>>             TcpOutput?
>>>>>
>>>>>
>>>>>         Um, TcpOutput sends output data over a TCP connection. It
>>>>>         expects that there is a listener on the other side which will
>>>>>         accept that TCP connection, and will know how to correctly
>>>>>         handle the data that Heka is sending over the TCP connection.
>>>>>
>>>>>         FileOutput sends data to a file on the local file system.
>>>>>
>>>>>         It's of course fine to specify a FileOutput without specifying
>>>>> a
>>>>>         TcpOutput.
>>>>>
>>>>>         -r
>>>>>
>>>>>
>>>>>     whoops, yes I meant base_dir for where heka writes various internal
>>>>>     state information to.
>>>>>
>>>>>     Emily,
>>>>>
>>>>>     Maybe you could share what data you're trying to read into heka and
>>>>>     what you would like to do with it and we could help get you going.
>>>>>
>>>>>     Heka intended to a uni-directional pipeline. It can read data in
>>>>>     from many places into various formats, aggregate into interesting
>>>>>     new formats, and finally emit data somewhere else.
>>>>>
>>>>>
>>>>>
>>>
>>> _______________________________________________
>>> Heka mailing list
>>> [email protected]
>>> https://mail.mozilla.org/listinfo/heka
>>>
>>>
>>
>
> _______________________________________________
> Heka mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/heka
>
>
_______________________________________________
Heka mailing list
[email protected]
https://mail.mozilla.org/listinfo/heka

Reply via email to