monitoring voip systems

22
Monitoring VoIP Systems Sebastian Damm [email protected]

Upload: sipgate

Post on 16-Jul-2015

180 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Monitoring VoIP Systems

Monitoring VoIP Systems Sebastian Damm

[email protected]

Page 2: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

Our Monitoring systems• 2 Icinga servers

• almost 1k hosts • more than 5k services

• Cacti • Observium for network monitoring

Page 5: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

Monitoring Asterisk

Page 8: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

Monitoring Kamailio• SIP • some variables through XMLRPC calls

• Memory • TCP Connections • Version

Page 14: Monitoring VoIP Systems

Monitoring Kamailio

Page 15: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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: Monitoring VoIP Systems

Monitoring Yate• SIP • everything else through SNMP

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

Page 18: Monitoring VoIP Systems

Monitoring Yate

Page 19: Monitoring VoIP Systems

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: Monitoring VoIP Systems

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

Page 21: Monitoring VoIP Systems

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

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

Page 22: Monitoring VoIP Systems

Thank you!