OK, thank you David. I'll see if we need that. Now I'm trying to publish heka message to elasticsearch, it got the following error.
*2016/01/11 15:18:02 Plugin 'ElasticSearchOutput' error: can't index: HTTP request failed: Post http://192.168.100:9200/_bulk <http://192.168.100:9200/_bulk>: dial tcp 192.168.0.100:9200 <http://192.168.0.100:9200>: operation timed out* *configs are:* ====== [ESJsonEncoder] es_index_from_timestamp = true type_name = "%{Type}" [ElasticSearchOutput] message_matcher = "Type == 'snap.heka'" server = "http://192.168.100:9200" encoder = "ESJsonEncoder" flush_interval = 10 ======== *The message sample* *========* :Timestamp: 2016-01-11 23:38:01.411186108 +0000 UTC :Type: heka :Hostname: egu-mac01.lan :Pid: 68305 :Uuid: 9a26332d-64e7-4ff4-a7de-53a6a90e78b2 :Logger: heka.logger :Payload: [{"namespace":["psutil","vm","free"],"last_advertised_time":"0001-01-01T00:00:00Z","version":0,"config":null,"data":35553280,"labels":null,"tags":null,"source":"egu-mac01.lan","timestamp":"2016-01-11T15:38:01.407168698-08:00"}] :EnvVersion: :Severity: 6 If you have any insight, please share. Thanks, Emily On Mon, Jan 11, 2016 at 12:13 PM, David Birdsong <[email protected]> wrote: > > > On Mon, Jan 11, 2016 at 12:07 PM, Emily Gu <[email protected]> wrote: > >> Thanks, David. I did this way. >> >> The collector is scheduled to collect metrics periodically. Collected >> metrics are shipped to Heka in one shot. Then the connection is close. It >> loops in the interval of the collectors(open connection -> ship metrics -> >> close connection). Does this make sense? >> > > yes, makes sense. > > >> >> I thought Heka has the pooling and queuing, it seems not necessary to >> implement connection pooling in the client side. Same for the queuing on >> the client side is not necessary. Please correct me if my understanding is >> not correct. >> > > no, connection pooling isn't necessary at all. the more messages you send > over a single connection, the better, but if your pattern doesn't fit that, > then it's fine. > > >> >> Thanks, >> Emily >> >> >> >> On Mon, Jan 11, 2016 at 12:01 AM, David Birdsong < >> [email protected]> wrote: >> >>> >>> >>> 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

