[smokeping-users] TCPPing probe doesn't generate data
David Tomic
young_einstein at internode.on.net
Sun Jun 15 18:40:33 CEST 2008
G.W. Haywood wrote:
> Hi David,
>
> On Mon, 16 Jun 2008, David Tomic wrote:
>
>
>> I've also made sure that all the relevant paths are correct.
>>
>
> Are tcptraceroute and tcpping both in /usr/bin?
Yes. To be really pedantic they're just symlinks in /usr/bin ... but
they're there, and they're working just fine.
> What's the result of
> typing the commands
>
> which tcpping
>
> and
>
> which tcptraceroute
>
> ?
>
david at david-desktop:~$ which tcpping
/usr/bin/tcpping
david at david-desktop:~$ which tcptraceroute
/usr/bin/tcptraceroute
> Does it say /usr/bin/tcpping in your 'Probes' configuration file?
>
Yep.
*** Probes ***
+ TCPPing
binary = /usr/bin/tcpping
forks = 5
offset = 50%
step = 300
timeout = 15
> To be on the safe side I modified /usr/bin/tcpping so that the path
> /usr/bin/tcptraceroute is explicitly stated in the script and doesn't
> rely on some environment variable, which may or may not be set if you
> run the script automatically.
>
Would that be in both the _checksite() & _testsite() sections?
>
>>> Try commenting out all but the penultimate line there, so you have instead
>>>
>>> 8<----------------------------------------------------------------------
>>> # if echo "${ttr}" | egrep "\[(open|closed)\]" >/dev/null 2>&1; then
>>> # rtt=`echo "${ttr}" | awk '{print $5}'`
>>> # else
>>> rtt=`echo "${ttr}" | awk '{print $4}'`
>>> # fi
>>> 8<----------------------------------------------------------------------
>>>
>>>
>> I've done that, but unfortunately it doesn't seem to have helped.
>>
>> Now when I execute tcpping myself, I'm not getting the latency figures
>> returned properly.
>>
>
> That didn't work then. But it proves that you're modifying the right file. :)
>
I'll take that as a positive then! ;)
>
>> There still doesn't seem to be any data being passed through to
>> smokeping either. From 'smokeping --debug' I'm still just getting:
>>
>> 8<----------------------------------------------------------------------
>>
>> TCPPing: forks 5, timeout for each target 76
>> TCPPing: Executing /usr/bin/tcpping -C -x 5 203.16.214.17 80
>> TCPPing: Executing /usr/bin/tcpping -C -x 5 internode.on.net 80
>> TCPPing: 203.16.214.17: got
>> TCPPing: internode.on.net: got
>>
>> 8<----------------------------------------------------------------------
>>
>
> It's just a matter of putting some debugging in there to see why the
> right information isn't going where it's supposed to go.
>
>
>> I hope I'm correct in thinking that I shouldn't need to do anything
>> [beyond modifying tcpping] to actually have those changes take effect
>> within Smokeping.
>>
>
> I'm sure you don't need to restart anything, this is just a bash script
> and it won't be cached anywhere like Perl scripts can be sometimes.
>
Yes, that's what I thought. I just wanted to make sure that I wasn't
doing something really simple/stupid that I should have been. ;)
>
>> IE - Once I've modified/saved tcpping, then Smokeping should just
>> automatically pick up on the changes the next time it executes the
>> tcpping probe, correct?
>>
>
> Yes, it will just execute the new script. (Apparently it's doing
> that, because it fails in a different way, now. :)
>
HOORAY! :P
>>> With these debug lines inserted, but without my modification (sorry,
>>> my nasty hack:), you'll see that the information you need moves from
>>> field to field, depending on how you specify the host to be pinged:
>>>
>>>
>> ...
>> I've done that, and I'm getting the same sort of output as you, but [if
>> you'll pardon my ignorance] I'm still not really sure what that's
>> actually achieved?
>>
>
> It's supposed to be telling you what the output from tcptraceroute
> looks like and which fields are which. In my examples, fields 4 or 5
> might contain some number of milliseconds. It's those numbers which
> we need to get back to Smokeping via tcpping. Unfortunately, tcpping
> doesn't seem to be doing that. It's supposed to decide whether to use
> field 4 or field 5 in the bit of code that was (mostly) commented out
> by my nasty hack. We just need to know what's in the output from
> tcptraceroute, and if it looks right figure out why it isn't reaching
> Smokeping.
>
What concerns me though, is that it appears that Smokeping doesn't seem
to be getting ANY information back. If it was just a case of being sent
the *wrong* bit of information, then I could see how we'd have something
to work with.
The fact that it seems to be getting nothing at all though, has me just
a little bit worried.
> Let's step back a bit.
>
> Bash is a shell. It's the thing you're using when you type commands.
> Probably. You might be using a different shell, there are several to
> choose from. Bash is very powerful. You can write programs with it
> and run them from the command line. A program written in the Bash
> 'scripting' language is called a script. Bash scripts aren't very
> pretty. I guess you know that by now. :) Incidentally, when you run
> Bash itself you don't use the capital letter in its name. Not 'Bash',
> but 'bash'.
>
> Bash scripts can call other scripts, system utilties, whatever they
> need to get the job done. In general the user who invokes the script
> determines the permissions of the process(es) that execute, although
> there are ways around that.
>
> You have a Bash shell script called tcpping. When you run it, it uses
> a utility called tcptraceroute to fetch some information. It takes
> the output from tcptraceroute and parses it, that means it cuts out
> the bits that it wants (using a text processing utility called 'awk')
> and returns them to whatever program called it. That program may be
> Smokeping, your command line shell, or whatever.
>
That's fine ... I understand all of that! ;)
> There were two suggestions.
>
> The first was to make a modification to tcpping to cut out some of the
> code which parses the response from tcptraceroute. That apparently
> failed because the problem you have is different from the problem I
> saw when I fetched the version of the tcptraceroute utility which
> Debian provides for Etch and used it with the tcpping that I have.
>
> The second suggestion was to put some print statements (the 'bash'
> shell print statement is called 'echo') into the tcpping script in an
> effort to find out what the script is seeing. The bits of the script
> which contain the calls to awk are pulling out fields from the output
> from tcptraceroute. Here are the debugging statements I used:
>
> echo "${ttr}"
>
> This first line prints a bash variable called ttr. If you want to use
> the value of a bash variable you can wrap it in curly braces and put a
> dollar sign in front. As I said, not pretty. In the tcpping script,
> this variable has been set to the output from tcptraceroute, which is
> what we want to parse. An example of the tcptraceroute output in my
> last mail is (excluding the quotes) "255 192.168.0.43 [open] 0.184 ms".
>
> echo ""
>
> This prints a blank line. I just felt like it.
>
> echo "field 1 =" `echo "${ttr}" | awk '{print $1}'`
>
> Print the word "field" followed by the digit "1" and an equals sign
> followed by whatever happens when 'awk' pulls out the first field of
> its input, which in this case is whatever is in the variable ttr,
> which is 'piped' to awk (using the pipe character, '|').
>
> echo "field 2 =" `echo "${ttr}" | awk '{print $2}'`
> echo "field 3 =" `echo "${ttr}" | awk '{print $3}'`
> echo "field 4 =" `echo "${ttr}" | awk '{print $4}'`
> echo "field 5 =" `echo "${ttr}" | awk '{print $5}'`
> echo "field 6 =" `echo "${ttr}" | awk '{print $6}'`
>
> And so on, for five more fields.
>
> Why not post the output that you get?
>
david at david-desktop:~$ /usr/bin/tcpping -C -x 5 internode.on.net 80
255 corp.internode.on.net (203.16.214.17) [open] 24.965 ms
field 1 = 255
field 2 = corp.internode.on.net
field 3 = (203.16.214.17)
field 4 = [open]
field 5 = 24.965
field 6 = ms
24.965255 corp.internode.on.net (203.16.214.17) [open] 24.291 ms
<and then repeat for the other 4 probes>
>
>> I still don't seem to be getting any data sent through to smokeping?
>>
>
> That's because it isn't fixed yet. :)
>
Obviously ... HEHEHE :P
Thanks once again though. That was a pretty herculean post you just
made! ;)
More information about the smokeping-users
mailing list