If you have heka installed then you already have heka-inject, heka-flood, 
heka-cat, and the like. They're included in all of the binary packages, and 
automatically built for you when you build heka from source.

-r


On 07/03/2015 12:14 PM, Henrik Feldt wrote:
Hi Rob,

Thank you for your guidance. I'm trying to use heka-inject, but being a
go-noob, I might be doing something wrong.

I'm trying this:

~ go get github.com/mozilla-services/heka/cmd/heka-inject

# github.com/mozilla-services/heka/message

dev/gocode/src/github.com/mozilla-services/heka/message/message_matcher.go:21:
undefined: tree

This is the same error as I get when trying to import the client
https://github.com/mozilla-services/heka/issues/1599 which I filed an
issue for.

I'm probably doing something wrong, or perhaps something funky was
committed not too long ago to the repo?

Regards,

Henrik

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

On 3 Jul 2015, at 21:02, Rob Miller wrote:

    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