Added asterboard and check_web_site_size
parent
8e48aabf0f
commit
1e8f9c1f0f
@ -0,0 +1,73 @@
|
||||
There are some minor steps needed to install Asterboard and there are
|
||||
some assumptions as to how your data is logged.
|
||||
|
||||
*** ASSUMPTIONS
|
||||
|
||||
* Your data is sent from one or more Asterisk servers running v 1.8 or higher.
|
||||
|
||||
* Your data is tagged from Asterisk as being the "asterisk" program (this is
|
||||
the "-t" parameter from the setup-linux.sh script).
|
||||
|
||||
* Asterisk uses "from-trunk" context for all incoming calls and "from-internal"
|
||||
for all outgoing calls (or at least, the final context before sending
|
||||
calls out goes through from-internal).
|
||||
|
||||
|
||||
*** INSTALLING
|
||||
|
||||
Note: Older (pre 1.4.0) versions of NLS used a different directory for logstash
|
||||
patterns. If the directory in step 1a does not exist, use step 1b. You do not
|
||||
need to perform both steps.
|
||||
|
||||
1a) Copy "asterisk" to logstash's patterns directory:
|
||||
cp asterisk /usr/local/nagioslogserver/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.1.10/patterns
|
||||
|
||||
1b) Copy "asterisk" to older logstash patterns directory:
|
||||
cp asterisk /usr/local/nagioslogserver/logstash/patterns
|
||||
|
||||
|
||||
2) Log in to Nagios Log Server and go to "Administration"
|
||||
Go to "Global Configuration"
|
||||
Add a filter called "Asterisk" with the following content:
|
||||
|
||||
if [program] == 'asterisk' {
|
||||
grok {
|
||||
match => ['message', '%{ASTLOG}']
|
||||
}
|
||||
}
|
||||
|
||||
Save and Apply your new global configuration
|
||||
|
||||
3) Install the dashboard itself by going to the "Dashboard" screen
|
||||
Click the "Load" icon near the top right
|
||||
Select "Advanced" from the bottom of the pop-up
|
||||
Choose "Browse" and browse to where you saved the asterboard.json file
|
||||
|
||||
You can now save your new dashboard as whatever you want, but as it is primarily
|
||||
showing "Concurrent Calls" we use "Concurrent Calls."
|
||||
|
||||
New Asterisk log data will now be parsed into the following fields:
|
||||
|
||||
asterisk_app Set, Macro, Dial, etc
|
||||
asterisk_app_params Parameters to above
|
||||
asterisk_channel SIP/1234@context (for instance)
|
||||
asterisk_context 1234@from-intenal:1 or 1234@from-trunk:1
|
||||
asterisk_ext 1234
|
||||
asterisk_extension Internal extension used in transfers, etc
|
||||
asterisk_sip_channel SIP/1234
|
||||
asterisk_src_file pbx.c for outbound calls
|
||||
|
||||
These terms are also available for general Asterisk log file searching/analysis
|
||||
though some are not used or useful for this particular dashboard.
|
||||
|
||||
Note that if you added Asterisk data prior to loading the global filter, that
|
||||
data will not have the appropriate terms parsed and will not show up in the
|
||||
call details, but they will show up in the overall counts. Only new data added
|
||||
after applying the global filter will show phone numbers and trunk information.
|
||||
|
||||
|
||||
Feel free to contact me with questions:
|
||||
|
||||
Author: Eric Loyd <eric@bitnetix.com>
|
||||
Copyleft 2014 by Eric Loyd
|
||||
Last updated 23-Mar-2016
|
||||
@ -0,0 +1,51 @@
|
||||
SIP_HEADER [A-Z_]+
|
||||
ASTLEVEL (?:VERBOSE|ERROR|NOTICE|INFO|DEBUG|DTMF|WARNING)
|
||||
ASTLANGUAGE [a-z]{1,3}
|
||||
# Special pattern for "Ext." Logs
|
||||
ASTEXTNO [A-Za-z0-9_]+
|
||||
# Valid DTMF keys
|
||||
ASTDTMF [0-9#*]
|
||||
# Log source file (Normally a c file)
|
||||
ASTSRC [-a-z._0-9/]+
|
||||
# Registration info
|
||||
ASTREGISTRATION %{USERNAME}@%{IPORHOST}
|
||||
# Context
|
||||
ASTCONTEXTEXTENSION [A-Za-z0-9*#~_]+
|
||||
ASTCONTEXTNAME [-a-z0-9]+
|
||||
ASTCONTEXTPOSITION \d+
|
||||
ASTCONTEXT %{ASTCONTEXTEXTENSION:asterisk_ext}@%{ASTCONTEXTNAME}:%{ASTCONTEXTPOSITION}
|
||||
# Application
|
||||
ASTAPP [A-Z][A-Za-z0-9]+
|
||||
ASTAPP_AUDIOFILE [-a-zA-Z0-9_./]+
|
||||
# Interfaces
|
||||
AST_SIP_INTERFACE SIP/[-_A-Za-z0-9]+
|
||||
ASTINTERFACE %{AST_SIP_INTERFACE}
|
||||
# Channels
|
||||
ASTCHANNEL_SIP %{AST_SIP_INTERFACE:asterisk_sip_channel}-[a-f0-9]+
|
||||
ASTCHANNEL_LOCAL Local/[-a-z0-9@;]+
|
||||
ASTCHANNEL (:?%{ASTCHANNEL_SIP}|%{ASTCHANNEL_LOCAL})
|
||||
# Different log content types
|
||||
ASTCONTENT_CHANNELEVENT1 (:?CDR updated on|Timeout on|Stopped music on hold on|Started music on hold, class '%{ASTAPP_AUDIOFILE}', on|(:?Begin|End) MixMonitor Recording) %{ASTCHANNEL:asterisk_channel}
|
||||
ASTCONTENT_CHANNELEVENT2 (Locally bridging )?%{ASTCHANNEL:asterisk_channel}.*%{ASTCHANNEL:asterisk_channel}
|
||||
ASTCONTENT_CHANNELEVENT3 %{ASTCHANNEL:asterisk_channel} is ringing
|
||||
ASTCONTENT_EXECUTE Executing \[%{ASTCONTEXT:asterisk_context}\] %{ASTAPP:asterisk_app}\("%{ASTCHANNEL:asterisk_channel}", "%{GREEDYDATA:asterisk_app_params}"\) in new stack
|
||||
ASTCONTENT_CHANNELJUMP Channel '%{ASTCHANNEL:asterisk_channel}' jumping out of macro '%{ASTCONTEXTNAME:asterisk_context}'
|
||||
ASTCONTENT_GOTO Goto \(%{ASTCONTEXTNAME:asterisk_context},%{ASTCONTEXTEXTENSION:asterisk_extension},%{ASTCONTEXTPOSITION:asterisk_context_position}\)
|
||||
ASTCONTENT_SIPCOSMARK Using SIP RTP CoS mark %{NUMBER}
|
||||
ASTCONTENT_ASTMANAGER Manager '%{USERNAME:asterisk_manager_name}' logged (:?off|on) from %{IPORHOST:asterisk_manager_host}
|
||||
ASTCONTENT_CDRUPDATE on %{ASTCHANNEL:asterisk_channel}
|
||||
ASTCONTENT_PLAYAUDIO <%{ASTCHANNEL:asterisk_channel}> Playing '%{ASTAPP_AUDIOFILE:audiofile}' \(language '%{ASTLANGUAGE}'\)
|
||||
ASTCONTENT_REGISTRATION_TIMEOUT Registration for '%{ASTREGISTRATION}' timed out, trying again \(Attempt #%{NUMBER:asterisk_registration_attempt}\)
|
||||
ASTCONTENT_INVALID_EXTENSION Invalid extension '%{ASTCONTEXTEXTENSION:asterisk_extension}' in context '%{ASTCONTEXTNAME:asterisk_context}' on %{ASTCHANNEL}
|
||||
ASTCONTENT_CONNECTION_REFUSED Connect attempt from '%{IPORHOST:asterisk_connection_refused_host}' unable to authenticate
|
||||
ASTCONTENT_QUEUE_EVENT Added interface '%{ASTINTERFACE}' to queue '%{NOTSPACE:asterisk_queue}'
|
||||
ASTCONTENT_UNKNOWN_SIPMESSAGE Unable to parse %{SIP_HEADER:sip_header} message from %{ASTREGISTRATION:asterisk_external}
|
||||
ASTCONTENT_SPAWN Spawn extension \(%{ASTCONTEXTNAME:asterisk_context}, %{ASTCONTEXTEXTENSION:asterisk_extension}, %{ASTCONTEXTPOSITION:asterisk_context_position}\) exited .* on '%{ASTCHANNEL:asterisk_channel}'
|
||||
ASTCONTENT_USERINPUT User entered '%{DATA:asterisk_userinput}'
|
||||
ASTCONTENT_DTMF DTMF (:?begin|end)(:? passthrough| ignored)? '%{ASTDTMF:asterisk_dtmf_number}'(:? received)? on %{ASTCHANNEL}(:?, duration %{NUMBER:asterisk_dtmf_duration} ms)?
|
||||
ASTCONTENT [-=\s]*(:?%{ASTCONTENT_EXECUTE}|%{ASTCONTENT_CHANNELJUMP}|%{ASTCONTENT_GOTO}|%{ASTCONTENT_PLAYAUDIO}|%{ASTCONTENT_SPAWN}|%{ASTCONTENT_ASTMANAGER}|%{ASTCONTENT_DTMF}|%{ASTCONTENT_REGISTRATION_TIMEOUT}|%{ASTCONTENT_CHANNELEVENT1}|%{ASTCONTENT_CHANNELEVENT2}|%{ASTCONTENT_CHANNELEVENT3}|%{ASTCONTENT_INVALID_EXTENSION}|%{ASTCONTENT_CONNECTION_REFUSED}|%{ASTCONTENT_QUEUE_EVENT}|%{ASTCONTENT_USERINPUT}|%{ASTCONTENT_UNKNOWN_SIPMESSAGE}|%{ASTCONTENT_SIPCOSMARK}|%{GREEDYDATA})
|
||||
# different log types
|
||||
ASTLOG1 \[%{TIMESTAMP_ISO8601:timestamp}\] %{ASTLEVEL:severity}\[\d+\]\[.*\] %{ASTSRC:asterisk_src_file}:%{ASTCONTENT}
|
||||
ASTLOG2 \[%{TIMESTAMP_ISO8601:timestamp}\] %{ASTLEVEL:severity}\[\d+\] Ext. %{ASTEXTNO}: %{GREEDYDATA}
|
||||
ASTTIMEOUT Packet timed out after %{NUMBER}ms with no response
|
||||
ASTLOG ^(:?%{ASTLOG1}|%{ASTLOG2}|%{ASTTIMEOUT})
|
||||
@ -0,0 +1,45 @@
|
||||
#!/bin/sh
|
||||
|
||||
# curl -s https://www.homedepot.com/p/HDX-Black-5-Tier-Plastic-Garage-Storage-Shelving-Unit-36-in-W-x-74-in-H-x-18-in-D-241592/306331734 | grep -v href | md5sum | awk '{print $1}'
|
||||
|
||||
verbose=""
|
||||
size=0
|
||||
|
||||
while [ -n "$1" ]; do
|
||||
case "$1" in
|
||||
-v) verbose="true"; shift 1;;
|
||||
-u) url="$2"; shift 2;;
|
||||
-s) size="$2"; shift 2;;
|
||||
*) shift 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
# curl -skL "https://www.wyze.com/products/wyze-cam-v3" -w '%{size_download}' -o /dev/null
|
||||
agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||
[ -n "$verbose" ] && echo "DEBUG: curl --connect-timeout 10 -A \"$agent\" -skL \"$url\" -w \"%{size_download}\" -o /dev/null"
|
||||
checkSize=$(curl --connect-timeout 10 -A "$agent" -skL "$url" -w "%{size_download}" -o /dev/null)
|
||||
status=$?
|
||||
if [ "$status" != "0" ]; then
|
||||
sleep 2
|
||||
checkSize=$(curl --connect-timeout 10 -A "$agent" -skL "$url" -w "%{size_download}" -o /dev/null)
|
||||
status=$?
|
||||
fi
|
||||
|
||||
case $status in
|
||||
0) ;;
|
||||
3) echo "UNKNOWN: malformed URL $url" && exit 3;;
|
||||
6) echo "WARNING: could not resolve host for $url" && exit 3;;
|
||||
7) echo "WARNING: could not connect to host $url" && exit 1;;
|
||||
28) echo "WARNING: curl timeout" && exit 1;;
|
||||
35) echo "WARNING: TLS/SSL handshake failure - $output" && exit 1;;
|
||||
47) echo "WARNING: too many redirects" && exit 1;;
|
||||
52) echo "WARNING: $url returned no data" && exit 1;;
|
||||
esac
|
||||
|
||||
if [ "$size" = "$checkSize" ]; then
|
||||
echo "OK; received $size bytes|bytes=${checkSize}B"
|
||||
exit 0
|
||||
else
|
||||
echo "CRITICAL; $checkSize is not expected value of $size bytes|bytes=${checkSize}B"
|
||||
exit 2
|
||||
fi
|
||||
Loading…
Reference in New Issue