Hi,

the websocket test is fixed to support non-pong frames sent by server (such as 
the mentioned chat prompt). Tested with your websocket service, works fine.

You can get the latest code with fix here: 
https://bitbucket.org/tildeslash/monit/get/master.tar.gz


Regards,
Martin



On 05 Mar 2014, at 13:05, Mehul Ved <[email protected]> wrote:

> Sure, you can use it for testing.
> 
> On Mar 5, 2014 5:04 PM, Martin Pala <[email protected]> wrote:
>> 
>> Thanks for the trace.
>> 
>> It seems that your server responds with pong (in packet no. 11), but before 
>> that, it sends chat text frame with "who" prompt (in packet no. 9):
>> 
>> No.     Time        Source                Destination           Protocol 
>> Length Info
>>       4 0.000384    127.0.0.1             127.0.0.1             HTTP     309 
>>    GET / HTTP/1.1
>> 
>> No.     Time        Source                Destination           Protocol 
>> Length Info
>>       6 0.001237    127.0.0.1             127.0.0.1             HTTP     197 
>>    HTTP/1.1 101 Switching Protocols
>> 
>> No.     Time        Source                Destination           Protocol 
>> Length Info
>>       8 0.001303    127.0.0.1             127.0.0.1             WebSocket 70 
>>     WebSocket Ping [FIN]
>> 
>> WebSocket
>>     1... .... = Fin: True
>>     .000 .... = Reserved: 0x00
>>     .... 1001 = Opcode: Ping (9)
>>     0... .... = Mask: False
>>     .000 0000 = Payload length: 0
>> 
>> No.     Time        Source                Destination           Protocol 
>> Length Info
>>       9 0.002225    127.0.0.1             127.0.0.1             WebSocket 75 
>>     WebSocket Text [FIN]
>> 
>>     WebSocket
>>     1... .... = Fin: True
>>     .000 .... = Reserved: 0x00
>>     .... 0001 = Opcode: Text (1)
>>     0... .... = Mask: False
>>     .000 0101 = Payload length: 5
>>     Payload
>>         Text: "who"
>> 
>> No.     Time        Source                Destination           Protocol 
>> Length Info
>>      11 0.003986    127.0.0.1             127.0.0.1             WebSocket 70 
>>     WebSocket Pong [FIN]
>> 
>>     WebSocket
>>     1... .... = Fin: True
>>     .000 .... = Reserved: 0x00
>>     .... 1010 = Opcode: Pong (10)
>>     0... .... = Mask: False
>>     .000 0000 = Payload length: 0
>> 
>> 
>> At this point Monit expects response to its own request, so the protocol 
>> test failed.
>> 
>> The server response is OK, we just need to allow server messages (such as 
>> this prompt) not related to our own ping request. The websocket.org's 
>> service works differently ... it's not chat service, just echo, so it 
>> doesn't send any prompt.
>> 
>> Will fix the test. 
>> 
>> Can i use your websocket servis (from the previous email) to verify the test 
>> works with it?
>> 
>> Regards,
>> Martin
>> 
>> 
>> 
>> On 05 Mar 2014, at 12:13, Mehul Ved <[email protected]> wrote:
>> 
>>> Hi Martin,
>>>  It's a custom application developed by us in node.js. I'll speak to my 
>>> developer and ensure that our application is made RFC compliant. That would 
>>> be a much cleaner solution.
>>> 
>>> I'm attaching the pcap file.
>>> ________________________________________
>>> From: [email protected] 
>>> <[email protected]> on behalf of 
>>> Martin Pala <[email protected]>
>>> Sent: Wednesday, March 05, 2014 3:58 PM
>>> To: This is the general mailing list for monit
>>> Subject: Re: Websockets monitoring
>>> 
>>> Hi,
>>> 
>>> it seems that your websocket server doesn't support ping/pong (part of 
>>> websocket specification: RFC 6455) and instead sent some text frame in 
>>> response to ping ... either the text frame contains some error description, 
>>> websocket ping request is prohibited or the server is not RFC 6455 
>>> compliant.
>>> 
>>> The problem can be in the test configuration ... the version 13, origin 
>>> "http://www.websocket.org"; works with the demo echo websocket server 
>>> operate by websocket.org. Each websocket application has its own version 
>>> and 13 may be invalid in your case. Also the origin is part of websocket 
>>> security model and origin "http://www.websocket.org"; is basically settings 
>>> for websocket.org's service ... not general value - but if it was not 
>>> accepted by the server, it should return 403 error as response to HTTP 
>>> upgrade request, which it didn't (101 was received, otherwise there will be 
>>> different error in log).
>>> 
>>> The websocket.org demo with "location" works for 
>>> ws://dev.deltamktgresearch.com:10301, but their echo test doesn't use ping 
>>> - it sends just text frame ... such test is not generic and may fail in 
>>> other websocket implementations (connect+ping/pong+close should be generic 
>>> for every RFC compliant server).
>>> 
>>> We can simplify the test and rely only on websocket connection (http 
>>> upgrade request) + websocket close ... this should work on all websocket 
>>> servers, even those which don't support ping/pong.
>>> 
>>> Please can you get a network trace of the test? You can use for example 
>>> tcpdump/tshark/wireshark/snoop, tcpdump on the machine where Monit is 
>>> running:
>>> 
>>>        tcpdump -s 0 -i any -w websocket.pcap port 10301
>>> 
>>> If there is also regular traffic which you don't want to expose to mailing 
>>> list, either filter out only the Monit session packets or send the file 
>>> directly to me.
>>> 
>>> 
>>> Regards,
>>> Martin
>>> 
>>> 
>>> 
>>> 
>>> On 05 Mar 2014, at 09:32, Mehul Ved <[email protected]> wrote:
>>> 
>>>> Hi Martin,
>>>> I tried using the new version of monit but it fails on `monit validate` 
>>>> for websockets
>>>> 
>>>> $ which monit
>>>> /usr/local/bin/monit
>>>> 
>>>> $ monit --version
>>>> This is Monit version 5.8
>>>> Copyright (C) 2001-2014 Tildeslash Ltd. All Rights Reserved.
>>>> 
>>>> The lines I've added:
>>>> 
>>>> if failed host dev.deltamktgresearch.com port 10301 protocol websocket
>>>>   host "dev.deltamktgresearch.com"
>>>>   request "/"
>>>>   origin "http://www.websocket.org";
>>>>   version 13
>>>>   then alert
>>>> 
>>>> $ monit validate --verbose
>>>> 'wsserver' zombie check succeeded [status_flag=0000]
>>>> 'wsserver' succeeded connecting to INET[dev.deltamktgresearch.com:10301/] 
>>>> via TCP
>>>> 'wsserver' failed protocol test [WEBSOCKET] at 
>>>> INET[dev.deltamktgresearch.com:10301/] via TCP -- WEBSOCKET: pong error -- 
>>>> opcode 0x1
>>>> 
>>>> 
>>>> Using location ws://dev.deltamktgresearch.com:10301 in location box on 
>>>> http://websocket.org works perfectly. It responds with "who" which is 
>>>> correct. Is there a way to set send/expect to check for the correct 
>>>> response?
>>>> ________________________________________
>>>> From: [email protected] 
>>>> <[email protected]> on behalf of 
>>>> Martin Pala <[email protected]>
>>>> Sent: Monday, March 03, 2014 2:29 PM
>>>> To: This is the general mailing list for monit
>>>> Subject: Re: Websockets monitoring
>>>> 
>>>> Hi,
>>>> 
>>>> we have implemented the websocket protocol test, example usage:
>>>> 
>>>> check host websocket.org with address "echo.websocket.org"
>>>>   if failed port 80 protocol websocket
>>>>     host "echo.websocket.org"
>>>>     request "/"
>>>>     origin "http://www.websocket.com";
>>>>     version 13
>>>>   then alert
>>>> 
>>>> The test connects to websocket, performs ping/pong test and closes the 
>>>> connection.
>>>> 
>>>> If you want to test it, you can get the development Monit version here: 
>>>> https://bitbucket.org/tildeslash/monit/get/master.tar.gz
>>>> 
>>>> Compilation:
>>>> 
>>>>       tar -xzf master.tar.gz
>>>>       cd tildeslash-monit-*
>>>>       ./bootstrap && ./configure && make
>>>> 
>>>> The monit binary will be in current directory, you can install it to 
>>>> "/usr/local/bin" using "make install"
>>>> 
>>>> Regards,
>>>> Martin
>>>> 
>>>> 
>>>> On 24 Feb 2014, at 07:23, Mehul Ved <[email protected]> wrote:
>>>> 
>>>>> Hi,
>>>>> I have a node.js service that works as a websocket server. I am working 
>>>>> on monitoring it using monit. I haven't been able to find any information 
>>>>> about using websockets with monit either in the group archives or using 
>>>>> google search. Has anybody worked on this before?
>>>>> Is it possible to monitor websockets in monit currently without adding in 
>>>>> a websocket client script in between? I can definitely do that but wanted 
>>>>> to check if there's a better way to do it without any additional 
>>>>> component.
>>>>> --
>>>>> To unsubscribe:
>>>>> https://lists.nongnu.org/mailman/listinfo/monit-general
>>>> 
>>>> 
>>>> 
>>>> --
>>>> To unsubscribe:
>>>> https://lists.nongnu.org/mailman/listinfo/monit-general
>>>> 
>>>> --
>>>> To unsubscribe:
>>>> https://lists.nongnu.org/mailman/listinfo/monit-general
>>> 
>>> 
>>> 
>>> --
>>> To unsubscribe:
>>> https://lists.nongnu.org/mailman/listinfo/monit-general
>>> <websocket.pcap>--
>>> To unsubscribe:
>>> https://lists.nongnu.org/mailman/listinfo/monit-general
>> 
>> 

--
To unsubscribe:
https://lists.nongnu.org/mailman/listinfo/monit-general

Reply via email to