1 |
stephdl |
1.1 |
diff -Nur smeserver-zabbix-agent-0.1/root/etc/e-smith/templates/etc/sudoers/00zabbixAgentAlias smeserver-zabbix-agent-0.1_mod/root/etc/e-smith/templates/etc/sudoers/00zabbixAgentAlias |
2 |
|
|
--- smeserver-zabbix-agent-0.1/root/etc/e-smith/templates/etc/sudoers/00zabbixAgentAlias 2011-10-26 18:20:16.000000000 +0200 |
3 |
|
|
+++ smeserver-zabbix-agent-0.1_mod/root/etc/e-smith/templates/etc/sudoers/00zabbixAgentAlias 2011-10-26 18:29:27.000000000 +0200 |
4 |
|
|
@@ -6,14 +6,6 @@ |
5 |
|
|
$runasroot .= "\n"; |
6 |
|
|
$OUT .= 'Cmnd_Alias ZABBIX_AGENT_ROOT = '.$runasroot; |
7 |
|
|
|
8 |
|
|
-if ( -x '/usr/sbin/asterisk' ){ |
9 |
|
|
- $OUT.=<<"HERE" |
10 |
|
|
- |
11 |
|
|
-Cmnd_Alias ZABBIX_AGENT_ASTERISK = /var/lib/zabbix/bin/check_asterisk * |
12 |
|
|
- |
13 |
|
|
-HERE |
14 |
|
|
-} |
15 |
|
|
- |
16 |
|
|
} |
17 |
|
|
Cmnd_Alias ZABBIX_AGENT_MYSQL = /usr/bin/du -s /var/lib/mysql |
18 |
|
|
|
19 |
|
|
diff -Nur smeserver-zabbix-agent-0.1/root/etc/e-smith/templates/etc/sudoers/30zabbixAgent smeserver-zabbix-agent-0.1_mod/root/etc/e-smith/templates/etc/sudoers/30zabbixAgent |
20 |
|
|
--- smeserver-zabbix-agent-0.1/root/etc/e-smith/templates/etc/sudoers/30zabbixAgent 2011-10-26 18:20:16.000000000 +0200 |
21 |
|
|
+++ smeserver-zabbix-agent-0.1_mod/root/etc/e-smith/templates/etc/sudoers/30zabbixAgent 2011-10-26 18:29:41.000000000 +0200 |
22 |
|
|
@@ -1,9 +1,2 @@ |
23 |
|
|
zabbix ALL=(root) NOPASSWD: ZABBIX_AGENT_ROOT |
24 |
|
|
zabbix ALL=(mysql) NOPASSWD: ZABBIX_AGENT_MYSQL |
25 |
|
|
-{ |
26 |
|
|
-if ( -x '/usr/sbin/asterisk' ){ |
27 |
|
|
- $OUT.=<<"HERE" |
28 |
|
|
-zabbix ALL=(asterisk) NOPASSWD: ZABBIX_AGENT_ASTERISK |
29 |
|
|
-HERE |
30 |
|
|
-} |
31 |
|
|
-} |
32 |
|
|
diff -Nur smeserver-zabbix-agent-0.1/root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_asterisk smeserver-zabbix-agent-0.1_mod/root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_asterisk |
33 |
|
|
--- smeserver-zabbix-agent-0.1/root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_asterisk 2011-10-26 18:20:16.000000000 +0200 |
34 |
|
|
+++ smeserver-zabbix-agent-0.1_mod/root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_asterisk 2011-10-26 18:30:24.000000000 +0200 |
35 |
|
|
@@ -1,15 +1,25 @@ |
36 |
|
|
{ |
37 |
|
|
|
38 |
|
|
if ( -x '/usr/sbin/asterisk' ){ |
39 |
|
|
+ my $login = ""; |
40 |
|
|
+ my $user = ${'zabbix-agent'}{'AsteriskManagerLogin'} || ''; |
41 |
|
|
+ my $pass = ${'zabbix-agent'}{'AsteriskManagerPassword'} || ''; |
42 |
|
|
+ if ($user ne ''){ |
43 |
|
|
+ $login .= "--user=$user"; |
44 |
|
|
+ } |
45 |
|
|
+ if ($pass ne ''){ |
46 |
|
|
+ $login .= " --secret=$pass"; |
47 |
|
|
+ } |
48 |
|
|
$OUT.=<<"HERE" |
49 |
|
|
# Type: Agent or Agent (active) |
50 |
|
|
-# Key: asterisk[key] where key can be max_latency, sip_peers, iax2_peers, channels, calls, version |
51 |
|
|
-# Type of information: Numeric (integer 64bit) or characters (for version) |
52 |
|
|
+# Key: asterisk[key] where key can be max_latency, sip_peers, channels, internal_calls, |
53 |
|
|
+# outgoing_calls, incoming_calls, external_calls, duration_internal or duration_external |
54 |
|
|
+# Type of information: Numeric (integer 64bit) |
55 |
|
|
# Units: depends on the key |
56 |
|
|
# Custom multiplier: Do not use |
57 |
|
|
# Store Value: As is |
58 |
|
|
|
59 |
|
|
-UserParameter=asterisk[*],/usr/bin/sudo -u asterisk /var/lib/zabbix/bin/check_asterisk_monitoring \$1 |
60 |
|
|
+UserParameter=asterisk[*],/var/lib/zabbix/bin/check_asterisk $login --what=\$1 |
61 |
|
|
|
62 |
|
|
HERE |
63 |
|
|
} |
64 |
|
|
diff -Nur smeserver-zabbix-agent-0.1/root/var/lib/zabbix/bin/check_asterisk smeserver-zabbix-agent-0.1_mod/root/var/lib/zabbix/bin/check_asterisk |
65 |
|
|
--- smeserver-zabbix-agent-0.1/root/var/lib/zabbix/bin/check_asterisk 2011-10-26 18:20:16.000000000 +0200 |
66 |
|
|
+++ smeserver-zabbix-agent-0.1_mod/root/var/lib/zabbix/bin/check_asterisk 2011-10-26 18:22:45.000000000 +0200 |
67 |
|
|
@@ -1,63 +1,210 @@ |
68 |
|
|
-#!/bin/bash |
69 |
|
|
+#!/usr/bin/perl -w |
70 |
|
|
|
71 |
|
|
-# Asterisk check script |
72 |
|
|
-# by Steeve Avoungou Firewall Services |
73 |
|
|
+use Asterisk::AMI::Common; |
74 |
|
|
+use Getopt::Long; |
75 |
|
|
|
76 |
|
|
-PATH=$PATH:/usr/sbin:/usr/local/sbin |
77 |
|
|
+open STDERR, '>/dev/null'; |
78 |
|
|
|
79 |
|
|
-if [ $# -ne "1" ]; then |
80 |
|
|
- echo "Usage:" |
81 |
|
|
- echo "$0 <arg>" |
82 |
|
|
- echo "Where <arg> can be one of version, sip_peers, iax2_peers, max_latency, channels, calls" |
83 |
|
|
- exit 1 |
84 |
|
|
-fi |
85 |
|
|
- |
86 |
|
|
- |
87 |
|
|
-case "$@" in |
88 |
|
|
- |
89 |
|
|
- # Show version of asterisk: |
90 |
|
|
- version) |
91 |
|
|
- echo $(asterisk -rx 'core show version') |
92 |
|
|
- ;; |
93 |
|
|
- |
94 |
|
|
- # Count SIP peers |
95 |
|
|
- sip_peers) |
96 |
|
|
- echo $(asterisk -rx 'sip show peers'| grep -v 'Name/username' | egrep -v '[[:digit:]] sip peers' | wc -l) |
97 |
|
|
- ;; |
98 |
|
|
- |
99 |
|
|
- # Display the higher latency |
100 |
|
|
- max_latency) |
101 |
|
|
- max_latency=0 |
102 |
|
|
- for i in $(asterisk -rx 'sip show peers' | awk '{print $8}' | grep -o '[0-9][0-9]*'); do |
103 |
|
|
- if [ "$i" -gt "$max_latency" ]; then |
104 |
|
|
- max_latency=$i |
105 |
|
|
- fi |
106 |
|
|
- done |
107 |
|
|
- for i in $(asterisk -rx 'iax2 show peers' | awk '{print $8}' | grep -o '[0-9][0-9]*'); do |
108 |
|
|
- if [ "$i" -gt "$max_latency" ]; then |
109 |
|
|
- max_latency=$i |
110 |
|
|
- fi |
111 |
|
|
- done |
112 |
|
|
- echo $max_latency |
113 |
|
|
- ;; |
114 |
|
|
- |
115 |
|
|
- # Count IAX2 peers |
116 |
|
|
- iax2_peers) |
117 |
|
|
- echo $(asterisk -rx 'iax2 show peers' | grep -v 'Name/Username' | egrep -v '[[:digit:]] iax2 peers' | wc -l) |
118 |
|
|
- ;; |
119 |
|
|
- |
120 |
|
|
- # Count number of active channels |
121 |
|
|
- channels) |
122 |
|
|
- echo $(asterisk -rx "core show channels" | grep 'active channel' | awk '{print $1}') |
123 |
|
|
- ;; |
124 |
|
|
- |
125 |
|
|
- # Count number of active calls |
126 |
|
|
- calls) |
127 |
|
|
- echo $(asterisk -rx "core show channels" | grep 'active call' | awk '{print $1}') |
128 |
|
|
- ;; |
129 |
|
|
- |
130 |
|
|
- *) |
131 |
|
|
- echo 'ZBX_NOTSUPPORTED' |
132 |
|
|
- ;; |
133 |
|
|
-esac |
134 |
|
|
+# Set some default |
135 |
|
|
+my $host = '127.0.0.1'; |
136 |
|
|
+my $port = '5038'; |
137 |
|
|
+my $user = 'zabbixagent'; |
138 |
|
|
+my $secret = 'zabbixsecret'; |
139 |
|
|
+my $what = 'sip_peers'; |
140 |
|
|
+ |
141 |
|
|
+GetOptions( |
142 |
|
|
+ "host=s" => \$host, |
143 |
|
|
+ "port=s" => \$port, |
144 |
|
|
+ "user=s" => \$user, |
145 |
|
|
+ "secret=s" => \$secret, |
146 |
|
|
+ "what=s" => \$what |
147 |
|
|
+); |
148 |
|
|
+ |
149 |
|
|
+our $ast = Asterisk::AMI::Common->new( |
150 |
|
|
+ PeerAddr => $host, |
151 |
|
|
+ PeerPort => $port, |
152 |
|
|
+ Username => $user, |
153 |
|
|
+ Secret => $secret |
154 |
|
|
+ ); |
155 |
|
|
+ |
156 |
|
|
+die "Unable to connect to asterisk manager" unless ($ast); |
157 |
|
|
+ |
158 |
|
|
+ |
159 |
|
|
+sub help{ |
160 |
|
|
+ print<<"EOF"; |
161 |
|
|
+ |
162 |
|
|
+usage: $0 --host=asterisk.domain.tld --port=5038 --user=manager --secret=azerty --what=sip_peers |
163 |
|
|
+ |
164 |
|
|
+--what can take the following argument: |
165 |
|
|
+ |
166 |
|
|
+ * sip_peers: number of connected sip peers |
167 |
|
|
+ * max_latency: highest latency of connected sip_peers |
168 |
|
|
+ * channels: total number of active channels |
169 |
|
|
+ * internal_calls: number of active internal calls |
170 |
|
|
+ * outgoing_calls: number of active outgoing calls (external) |
171 |
|
|
+ * incoming_calls: number of active incoming calls (external) |
172 |
|
|
+ * external_calls: number of external calls (in + out) |
173 |
|
|
+ * duration_internal: actual highest duration of internal calls |
174 |
|
|
+ * duration_external: actual highest duration of external calls |
175 |
|
|
+ |
176 |
|
|
+EOF |
177 |
|
|
+ |
178 |
|
|
+ |
179 |
|
|
+if ($what eq 'sip_peers'){ |
180 |
|
|
+ print get_connected_peers_num('sip'); |
181 |
|
|
+} |
182 |
|
|
+elsif ($what eq 'max_latency'){ |
183 |
|
|
+ print get_max_peer_latency(); |
184 |
|
|
+} |
185 |
|
|
+elsif($what eq 'channels'){ |
186 |
|
|
+ print get_active_channels_num(); |
187 |
|
|
+} |
188 |
|
|
+elsif ($what eq 'internal_calls'){ |
189 |
|
|
+ print get_internal_call_num(); |
190 |
|
|
+} |
191 |
|
|
+elsif ($what eq 'outgoing_calls'){ |
192 |
|
|
+ print get_outgoing_call_num(); |
193 |
|
|
+} |
194 |
|
|
+elsif ($what eq 'incoming_calls'){ |
195 |
|
|
+ print get_incoming_call_num(); |
196 |
|
|
+} |
197 |
|
|
+elsif ($what eq 'external_calls'){ |
198 |
|
|
+ print get_outgoing_call_num() + get_incoming_call_num(); |
199 |
|
|
+} |
200 |
|
|
+elsif ($what eq 'duration_internal'){ |
201 |
|
|
+ print get_max_duration_internal(); |
202 |
|
|
+} |
203 |
|
|
+elsif ($what eq 'duration_external'){ |
204 |
|
|
+ print get_max_duration_external(); |
205 |
|
|
+} |
206 |
|
|
+else{ |
207 |
|
|
+ help(); |
208 |
|
|
+ $ast->disconnect(); |
209 |
|
|
+ exit (1); |
210 |
|
|
+} |
211 |
|
|
+ |
212 |
|
|
+$ast->disconnect(); |
213 |
|
|
+exit(0); |
214 |
|
|
+ |
215 |
|
|
+# Return the number of connected peers for |
216 |
|
|
+# the specified protocol (only SIP supporteed for now) |
217 |
|
|
+sub get_connected_peers_num{ |
218 |
|
|
+ my $proto = shift; |
219 |
|
|
+ my $peers; |
220 |
|
|
+ if ($proto eq 'sip'){ |
221 |
|
|
+ $peers = get_sip_peers(); |
222 |
|
|
+ } |
223 |
|
|
+ else{ |
224 |
|
|
+ return 'unsupported protocol'; |
225 |
|
|
+ } |
226 |
|
|
+ my $num = 0; |
227 |
|
|
+ foreach my $peer (keys %{$peers}){ |
228 |
|
|
+ my $status = $peers->{$peer}->{'Status'}; |
229 |
|
|
+ $num++ if ($status =~ m/^OK/); |
230 |
|
|
+ } |
231 |
|
|
+ return $num; |
232 |
|
|
+} |
233 |
|
|
+ |
234 |
|
|
+# Return the list of SIP peers (as a hashref) |
235 |
|
|
+sub get_sip_peers{ |
236 |
|
|
+ return $ast->sip_peers(); |
237 |
|
|
+} |
238 |
|
|
+ |
239 |
|
|
+# Return the highest latency of all the peers |
240 |
|
|
+sub get_max_peer_latency{ |
241 |
|
|
+ my $peers = get_sip_peers(); |
242 |
|
|
+ my $latency = 0; |
243 |
|
|
+ foreach my $peer (keys %{$peers}){ |
244 |
|
|
+ my $status = $peers->{$peer}->{'Status'}; |
245 |
|
|
+ $status =~ /\((\d+)\sms\)/; |
246 |
|
|
+ $latency = $1 if ($1 > $latency); |
247 |
|
|
+ } |
248 |
|
|
+ return $latency; |
249 |
|
|
+} |
250 |
|
|
+ |
251 |
|
|
+# Return channels list as a hashref |
252 |
|
|
+sub get_channels(){ |
253 |
|
|
+ return $ast->channels(); |
254 |
|
|
+} |
255 |
|
|
+ |
256 |
|
|
+# Return the number of channels |
257 |
|
|
+sub get_active_channels_num{ |
258 |
|
|
+ my $channels = get_channels(); |
259 |
|
|
+ my $num = 0; |
260 |
|
|
+ foreach my $chan (keys %{$channels}){ |
261 |
|
|
+ $num++; |
262 |
|
|
+ } |
263 |
|
|
+ return $num; |
264 |
|
|
+} |
265 |
|
|
+ |
266 |
|
|
+# Return the number of active channels |
267 |
|
|
+sub get_up_channels_num{ |
268 |
|
|
+ my $channels = get_channels(); |
269 |
|
|
+ my $num = 0; |
270 |
|
|
+ foreach my $chan (keys %{$channels}){ |
271 |
|
|
+ my $status = $channels->{$chan}->{'State'}; |
272 |
|
|
+ $num++ if ($status eq 'Up'); |
273 |
|
|
+ } |
274 |
|
|
+ return $num; |
275 |
|
|
+} |
276 |
|
|
+ |
277 |
|
|
+# Return the number of outgoing calls |
278 |
|
|
+sub get_outgoing_call_num{ |
279 |
|
|
+ my $channels = get_channels(); |
280 |
|
|
+ my $num = 0; |
281 |
|
|
+ foreach my $chan (keys %{$channels}){ |
282 |
|
|
+ my $context = $channels->{$chan}->{'Context'}; |
283 |
|
|
+ my $status = $channels->{$chan}->{'State'}; |
284 |
|
|
+ $num++ if ($context eq 'macro-dialout-trunk' and $status eq 'Up'); |
285 |
|
|
+ } |
286 |
|
|
+ return $num; |
287 |
|
|
+} |
288 |
|
|
+ |
289 |
|
|
+# Return the number of incoming calls |
290 |
|
|
+sub get_incoming_call_num{ |
291 |
|
|
+ my $channels = get_channels(); |
292 |
|
|
+ my $num = 0; |
293 |
|
|
+ foreach my $chan (keys %{$channels}){ |
294 |
|
|
+ my $context = $channels->{$chan}->{'Context'}; |
295 |
|
|
+ my $status = $channels->{$chan}->{'State'}; |
296 |
|
|
+ $num++ if ($context =~ /^from\-(trunk|pstn|zaptel|dahdi)/ and $status eq 'Up'); |
297 |
|
|
+ } |
298 |
|
|
+ return $num; |
299 |
|
|
+} |
300 |
|
|
+ |
301 |
|
|
+# Return the number of internal calls |
302 |
|
|
+sub get_internal_call_num{ |
303 |
|
|
+ my $channels = get_channels(); |
304 |
|
|
+ my $num = 0; |
305 |
|
|
+ foreach my $chan (keys %{$channels}){ |
306 |
|
|
+ my $context = $channels->{$chan}->{'Context'}; |
307 |
|
|
+ my $status = $channels->{$chan}->{'State'}; |
308 |
|
|
+ $num++ if (($context eq 'macro-dial' or $context eq 'from-internal') and $status eq 'Up'); |
309 |
|
|
+ } |
310 |
|
|
+ return $num |
311 |
|
|
+} |
312 |
|
|
+ |
313 |
|
|
+# Return the max duration of current internal calls |
314 |
|
|
+sub get_max_duration_internal{ |
315 |
|
|
+ my $channels = get_channels(); |
316 |
|
|
+ my $max = 0; |
317 |
|
|
+ foreach my $chan (keys %{$channels}){ |
318 |
|
|
+ my $dur = $channels->{$chan}->{'Seconds'}; |
319 |
|
|
+ my $context = $channels->{$chan}->{'Context'}; |
320 |
|
|
+ $max = $dur if (($context eq 'macro-dial' or $context eq 'from-internal') and $dur > $max); |
321 |
|
|
+ } |
322 |
|
|
+ return $max |
323 |
|
|
+} |
324 |
|
|
+ |
325 |
|
|
+# Return the max duration of current external calls (in or out) |
326 |
|
|
+sub get_max_duration_external{ |
327 |
|
|
+ my $channels = get_channels(); |
328 |
|
|
+ my $max = 0; |
329 |
|
|
+ foreach my $chan (keys %{$channels}){ |
330 |
|
|
+ my $dur = $channels->{$chan}->{'Seconds'}; |
331 |
|
|
+ my $context = $channels->{$chan}->{'Context'}; |
332 |
|
|
+ $max = $dur if (($context eq 'macro-dialout-trunk' or $context =~ /^from\-(trunk|pstn|zaptel|dahdi)/) and $dur > $max); |
333 |
|
|
+ } |
334 |
|
|
+ return $max |
335 |
|
|
+} |
336 |
|
|
|