Sorry you're having trouble here. The docs you linked to are indeed correct. 
I'm afraid I don't have the cycles to dig in deeply to your code or the binary 
output that it's generating, but I can give you a couple of additional tips 
that might help with your debugging.

My recommendation is that you start from a known good binary encoding of a Heka 
message stream and use that to compare your own output. Generating a binary 
stream is easy; if you set up a Heka instance with a FileOutput using a 
ProtobufEncoder then the generated file will contain exactly such a stream. The 
following steps should get you to something you can use as a reference:

* Set up a testing Heka config w/ a TcpInput using a ProtobufDecoder, and a 
FileOutput using a ProtobufEncoder.
* Use heka-inject (see 
https://hekad.readthedocs.org/en/latest/developing/testing.html#heka-inject) to 
generate a single Heka message and send it to the listening TcpInput.
* Shut down Heka.

As long as the message_matcher on the FileOutput was correctly set up to catch 
the message you sent, you should now have a file containing exactly one Heka 
message, along with the appropriate stream header. Then you can use the code 
that you're writing to generate a binary encoding for a message that is 
identical to the one you specified with the heka-inject call (i.e. matching 
payload, hostname, severity, type, etc. etc. etc.). Compare what your code is 
emitting with the binary stream in the file generated by Heka and see how they 
match up.

Also, it might be useful to test your encoding logic separately from the TCP 
connection stuff, so bugs from the one aren't mistaken as problems with the 
other. To do this, I'd recommend starting out by having your code write the 
Heka message stream to disk. If this is done correctly, you will be able to see 
the contents of the message stream using the heka-cat tool (see 
https://hekad.readthedocs.org/en/latest/developing/testing.html#heka-cat). If 
your encoder is generating files that heka-cat can read, but you're still 
seeing I/O related errors, then you know the issue isn't with the stream format 
but is instead related to the I/O code itself.

Sorry I can't be more help, hopefully this gives you enough to be able to debug 
and resolve your issue.

-r


On 07/03/2015 09:18 AM, Henrik Feldt wrote:
Greetings,

What is the binary format to send to Heka with?

I'm trying to implement a client in F# for sending natively to Heka, but
I'm failing.

This is a trace:

D 2015-07-03T15:22:12.9760700+00:00: running: writing to heka
[Logary.Targets.Heka]
write record separator
write header length
BAM!! System.IO.IOException: Write failure --->
System.Net.Sockets.SocketException: The socket has been shut down
at System.Net.Sockets.Socket.Send (System.Byte[] buf, Int32 offset,
Int32 size, SocketFlags flags) [0x00000] in <filename unknown>:0
at System.Net.Sockets.NetworkStream.Write (System.Byte[] buffer, Int32
offset, Int32 size) [0x00000] in <filename unknown>:0
//snip

Here's the code:

|     Choice1Of2 (async {
       try
         use msgMs = msgMs
         use hdrMs = hdrMs
         printfn "write record separator"
         do s.WriteByte Constants.RecordSeparator
         do! Async.Sleep 200
         printfn "write header length"
         do s.WriteByte (byte (hdrMs.Length))
         do! Async.Sleep 200
         printfn "write header"
         do! fromZero hdrMs (fun ms -> ms.CopyToAsync s)
         do! Async.Sleep 200
         printfn "write unit separator"
         do s.WriteByte Constants.UnitSeparator
         do! Async.Sleep 200
         printfn "write unit message"
         do! fromZero msgMs (fun ms -> ms.CopyToAsync s)
       with e -> printfn "BAM!! %A" e
     })
|

Repro: https://github.com/logary/logary/tree/feature/heka/examples/heka
or
https://github.com/logary/logary/blob/feature/heka/src/targets/Logary.Targets.Heka/Script.fsx

For the second repro above (.fsx), which contains more data, it looks
like this:

write record separator
write header length
write header
BAM!! System.IO.IOException: EndWrite failure --->
System.Net.Sockets.SocketException: The socket has been shut down
at System.Net.Sockets.Socket.EndSend (IAsyncResult result) [0x00000] in
<filename unknown>:0

I have unit tests that mimick what your tests seem to have:

  * https://github.com/mozilla-services/heka/blob/dev/client/encoders_test.go
  * 
https://github.com/logary/logary/blob/feature/heka/src/tests/Logary.Targets.Heka.Tests/Program.fs#L28-L39

And I'm following this framing format:

  * https://hekad.readthedocs.org/en/latest/message/index.html

So at this point I'm at my wits end, and can't find another way of doing
it... Here's a sample byte array that I try to send to the socket
(including the full message), on the wire:

1E02083E1F0A105C18DA1111A14D4DBAF1F8116DCC76CE1080C48C9491A9E8D4131A0B68656B612E6C6F676172792200320040BA8F024A0B636F696E64756374696F6E

Here's the Heka config:

|[hekad]
maxprocs = 2

[TcpInput]
address = ":5565"

[PayloadEncoder]
append_newlines = false

[LogOutput]
message_matcher = "TRUE"
encoder = "PayloadEncoder"
|

The logs:

2015/07/03 09:10:06 Pre-loading: [DashboardOutput]
2015/07/03 09:10:06 Pre-loading: [ProtobufEncoder]
2015/07/03 09:10:06 Loading: [ProtobufEncoder]
2015/07/03 09:10:06 Pre-loading: [TokenSplitter]
2015/07/03 09:10:06 Loading: [TokenSplitter]
2015/07/03 09:10:06 Pre-loading: [HekaFramingSplitter]
2015/07/03 09:10:06 Loading: [HekaFramingSplitter]
2015/07/03 09:10:06 Pre-loading: [NullSplitter]
2015/07/03 09:10:06 Loading: [NullSplitter]
2015/07/03 09:10:06 Pre-loading: [ProtobufDecoder]
2015/07/03 09:10:06 Loading: [ProtobufDecoder]
2015/07/03 09:10:06 Loading: [DashboardOutput]
2015/07/03 09:10:06 Starting hekad...
2015/07/03 09:10:06 Output started: DashboardOutput
2015/07/03 09:10:06 MessageRouter started.

I've verified I can connect using telnet to 5565.

You can netcat it to Heka to test my code. Or you can use the
|prepare.sh| script to test it live (you'll need to install mono first
http://www.mono-project.com/download/ (or apt-get install mono-complete)

Regards,
Henrik

https://countermail.com/process.php?pubview=aGVucmlrQGxvZ2liaXQuc2U=


_______________________________________________
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