osmc 2014: monitoring voip systems | sebastian damm

22
Monitoring VoIP Systems Sebastian Damm [email protected]

Upload: netways

Post on 02-Jul-2015

244 views

Category:

Software


1 download

DESCRIPTION

While delivering VoIP solutions to customers for more than ten years, at sipgate we have gained experience in monitoring our VoIP setup. The talk will give an insight on how to monitor Asterisk, Kamailio, Yate and other vital parts of our setup through standard checks and own scripts. We will not only show how to monitor standard SIP, but also how to detect bottlenecks and misfunctions.

TRANSCRIPT

Page 1: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring VoIP Systems Sebastian Damm

[email protected]

Page 2: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Who we are, what we do• Düsseldorf based VoIP provider (since 2004) • active in Germany and UK • Private and Business customers • VoIP and Mobile products • some 100k users • almost 100 million minutes each month

Page 3: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

VoIP systems monitored• Asterisk (~100 servers) • Kamailio (12 servers) • Yate (12 servers) • RTP Proxy (12 servers) • ASR (http://en.wikipedia.org/wiki/Answer-seizure_ratio)

Page 4: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Our Monitoring systems• 2 Icinga servers

• almost 1k hosts • more than 5k services

• Cacti • Observium for network monitoring

Page 5: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring SIP• simple Perl script • UDP capable (TCP and TLS coming soon) • resolves SRV DNS records, checks all targets • Watch the response code!

• different systems answer differently

Page 6: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring Asterisk• Base monitoring (disk, memory, load) • SIP • Remote Manager

• Asterisk Version, Config version, G729 status, Channels, Uptime

• Open Files (SNMP extension) • IPtables status (SNMP extension)

Page 7: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring Asterisk

Page 8: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

check_manager.pl• first we called it separately for each service

• high load on the monitoring system • now: one script fills all services

• only the MANAGER service is active, all others are passive (with fallback command)

• can be called as active check for each service

Page 9: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

check_manager.plsub push_passive { my ($service,$state,$msg) = @_; my $timestamp = time;

eval { open CMD, ">>", $cmdfile or die $!; }; if ($@) { print "Could not open Command file!\n" if (defined($opts_verbose)); return; }

my $cmdmsg = sprintf("[%s] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%s;%s\n", $timestamp,$opts_host,$service,$ERRORS{$state},$msg);

print $cmdmsg if (defined($opts_verbose)); print CMD $cmdmsg;

close CMD;}

Page 10: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Integrating into Icinga• Service Definition

Active Check Passive Checkdefine service { service_description MANAGER hostgroup_name sipgw use local-service check_command check_manager}

define service { service_description AST_UPTIME hostgroup_name sipgw use local-service check_command check_manager_active!uptime is_volatile 1 active_checks_enabled 0 passive_checks_enabled 1 check_freshness 1 max_check_attempts 1 freshness_threshold 600}

Page 11: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Integrating into Icinga• Command Definition

Active Check Passive Check (Fallback)

define command{ command_name check_manager command_line $USER32$/check_manager \ -H $HOSTNAME$ -I $HOSTADDRESS$ \ -u $USER7$ -p $USER8$ \ -m 127.0.0.1:11211 \ -s SIPCHAN --g729}

define command{ command_name check_manager_active command_line $USER32$/check_manager \ -H $HOSTNAME$ -I $HOSTADDRESS$ \ -u $USER7$ -p $USER8$ \ -m 127.0.0.1:11211 \ -a $ARG1$}

Page 12: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Check Open Files

• consists of two scripts on the monitored system • one script run by cron every minute • other script triggered by SNMPd to read those files

Page 13: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring Kamailio• SIP • some variables through XMLRPC calls

• Memory • TCP Connections • Version

Page 14: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring Kamailio

Page 15: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

XMLRPC in Kamailio1. Load the moduleloadmodule "xmlrpc.so"modparam("xmlrpc", "route", "XMLRPC")

2. Handle XMLRPC callsroute["XMLRPC"] {

if(src_ip == 1.2.3.4) { # only answer to Monitoringset_reply_no_connect(); # optionaldispatch_rpc();

} else {xmlrpc_reply("403", "Forbidden");

}}

Page 16: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Querying Kamailiosub call_rpc { my ($method,@rpc_params) = @_; my (%r,$k);

my($rpc_call) = XMLRPC::Lite -> proxy("http://$opts_host:$opts_port") -> call($method, @rpc_params);

my $res= $rpc_call->result;

if (!defined $res){ print "Error querying Kamailio\n"; $res=$rpc_call->fault; %r=%{$res}; foreach $k (sort keys %r) { print("\t$k: $r{$k}\n"); } exit $ERRORS{'UNKNOWN'}; } else { return($res); }}

Page 17: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring Yate• SIP • everything else through SNMP

• SIGTRAN links (beware: element order can change!) • Uptime • Version • Channels • …

Page 18: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring Yate

Page 19: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring ASR

• percentage of answered calls / total calls • additionally: length of answered calls

• per Gateway, Carrier, Destination, Product • in Yate: configurable and readable via SNMP

Page 20: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Monitoring the rest• SIP connectivity to partners • Function tests (emergency calls, features) • ENUM • User Location • RTP Proxies • STUN • iptables Connection Tracking

Page 21: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

That’s itDownloads available at: http://sipg.at/osmc2014

And: We hire, too! http://www.sipgate.de/jobs/

Page 22: OSMC 2014: Monitoring VoIP Systems | Sebastian Damm

Thank you!