Skip to content
Snippets Groups Projects
Verified Commit edf76bfa authored by Jörg Sachse's avatar Jörg Sachse
Browse files

feat: implement fully functional Check_MK monitoring of NetApp NFS shares...

feat: implement fully functional Check_MK monitoring of NetApp NFS shares including history data and dynamic alert thresholds
parent 7db519cf
Branches
No related tags found
No related merge requests found
Pipeline #10024 failed
......@@ -33,7 +33,8 @@ roles_path = ./:../:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles
# https://docs.ansible.com/ansible/latest/reference_appendices/config.html#display-skipped-hosts
# DEFAULT: display_skipped_hosts = true
display_skipped_hosts = false
display_ok_hosts = false
# display_ok_hosts = false
display_ok_hosts = true
use_persistent_connections=true
......
......@@ -37,8 +37,9 @@
#DOC# - https://www.ssh.com/ssh/keygen/
#DOC# - https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.dot-cm-cmpr-910%2Fvolume__show.html
if [[ ! ( ${BASH_VERSINFO[0]} -eq 4 ) && ( ${BASH_VERSINFO[1]} -ge 2 ) || \
! ( ${BASH_VERSINFO[0]} -gt 4 ) ]]; then
BASH_MIN_VERSION="4.2"
# This sorts ascending by version number. If the first version number in the sorted list is equal to our minimal version number, then we can be sure that the installed version of Bash is newer.
if [[ "${BASH_MIN_VERSION}" == "$( echo -e "${BASH_VERSINFO[0]}.${BASH_VERSINFO[1]}\n${BASH_MIN_VERSION}" | sort -V | tail -n1 )" ]]; then
echo "Only Bash versions 4.2 or above are supported. Aborting execution."
exit 1
fi
......@@ -62,6 +63,7 @@ NETAPP_FIELDS="size,available,used,percent-used"
# Include config file not using variable path
# based on http://mywiki.wooledge.org/BashFAQ/028
if [[ -e "/etc/check_mk/check_netapp_nfs_shares.cfg" ]]; then
# shellcheck disable=SC1091
source "/etc/check_mk/check_netapp_nfs_shares.cfg"
else
echo "Configuration at ${CONFIGFILE} expected, but not found. Aborting execution." && exit 1
......@@ -74,46 +76,23 @@ function help () {
sed -rn 's/^#DOC# ?//;T;p' "$0"
}
function get_mgmt_ip_from_network () {
case ${1} in
${PATTERN_VLAN11})
echo "${MGMT_VLAN11}"
;;
${PATTERN_VLAN13})
echo "${MGMT_VLAN13}"
;;
${PATTERN_VLAN14})
echo "${MGMT_VLAN14}"
;;
${PATTERN_VLAN20})
echo "${MGMT_VLAN20}"
;;
*)
echo "unsupported subnet"
;;
esac
}
# IMPORTANT: Set lock using "flock", NOT "touch"!!! It's atomic and doesn't have to be cleared after the script ran.
(
flock -n 9 || exit 1
NFS_SHARES=$( mount | grep "type nfs" | cut -d " " -f 1 )
NFS_SHARES=$( findmnt --raw --noheadings --types "nfs4" | cut -d " " -f 2 )
for SHARE in ${NFS_SHARES}; do
VOLUME_IP=$( echo "${SHARE}" | cut -d ":" -f 1 )
MGMT_IP=$( get_mgmt_ip_from_network "${VOLUME_IP}" )
[[ "${MGMT_IP}" == "unsupported subnet" ]] && echo "There's no NetApp management IP for this subnet." && next
NETAPP_VOLUME=$( echo "${SHARE}" | cut -d ":" -f 2 | cut -d '/' -f 3 )
RESULT=$( ssh -o StrictHostKeyChecking=no "${SSH_USER}"@"${MGMT_IP}" -C -i "${IDENTITY_FILE}" "${NETAPP_SETTINGS} volume show -vserver ${NETAPP_VSERVER} -volume ${NETAPP_VOLUME} -fields $NETAPP_FIELDS" )
RESULT=$( ssh -o StrictHostKeyChecking=no "${SSH_USER}"@"${MGMT}" -C -i "${IDENTITY_FILE}" "${NETAPP_SETTINGS} volume show -vserver ${NETAPP_VSERVER} -volume ${NETAPP_VOLUME} -fields $NETAPP_FIELDS" )
[[ -z "${RESULT}" ]] && echo "Didn't get a valid answer from NetApp system for ${NETAPP_VOLUME}."
RESULT=$( echo "${RESULT}" | tail -n 2 | tr -d '\r' )
OLDIFS=${IFS}
IFS=";"
echo "${RESULT}" | while read -r RES_VSERVER RES_VOLUME RES_SIZE RES_AVAILABLE RES_USED RES_PERCENT; do
status="P" # Status dynamisch berechnen
itemname="NFS-Share_/vol/${RES_VOLUME}/@${RES_VSERVER}"
itemname="NFS-Share ${RES_VOLUME}/@${RES_VSERVER}"
perf_values="Size=${RES_SIZE}|Used=${RES_USED}|Available=${RES_AVAILABLE}|PercentUsed=${RES_PERCENT::-1};80;90"
statustext="NFS share fill levels as read from NetApp storage system from vServer ${RES_VSERVER} for volume '/vol/${RES_VOLUME}'. Size: $(( RES_SIZE/1024/1024/1024 )) GB, Used: $(( RES_USED/1024/1024/1024 )) GB, Available: $(( RES_AVAILABLE/1024/1024/1024 )) GB, Percent Used: ${RES_PERCENT}.\\n"
echo "${status} ${itemname} ${perf_values} ${statustext}"
echo "${status} '${itemname}' ${perf_values} ${statustext}"
done
IFS=${OLDIFS}
done
......
---
- name: CMK installieren
- name: Install ChecK_MK and dependencies.
ansible.builtin.package:
name: "check-mk-agent"
name: ["check-mk-agent", "needrestart"]
state: latest
- name: Ordner für Check_MK-Plugins anlegen
......@@ -30,15 +30,14 @@
loop:
- name: "nrpe/check_needrestart.sh"
- name: "local/600/check_netapp_nfs_shares.sh"
when: ansible_distribution == "Debian"
# - name: install SSH private key for NetApp NFS share monitoring
# copy:
# src: "{{ role_path }}/../ansible_vaults/{{ role_name }}/.ssh/id_ed25519_netapp_report"
# dest: "/usr/lib/check_mk_agent/.ssh/id_ed25519_netapp_report"
# owner: "root"
# group: "root"
# mode: "0400"
- name: Install SSH private key for NetApp NFS share monitoring.
ansible.builtin.copy:
src: "{{ role_path }}/../ansible_vaults/{{ role_name }}/.ssh/id_ed25519_netapp_report"
dest: "/usr/lib/check_mk_agent/.ssh/id_ed25519_netapp_report"
owner: "root"
group: "root"
mode: "0400"
- name: Check_MK-Plugins installieren (offizielle Plugins)
ansible.builtin.get_url:
......@@ -101,4 +100,4 @@
dest: "/etc/check_mk/check_netapp_nfs_shares.cfg"
owner: "root"
group: "root"
mode: "0600"
mode: "0o600"
......@@ -101,7 +101,7 @@
- name: Check_MK-Plugins installieren
ansible.builtin.import_tasks: "install_checkmk_plugins.yml"
tags: [monitoring]
tags: [cmk, checkmk, check_mk, check-mk, monitoring]
- name: root-Shell einrichten
ansible.builtin.import_tasks: "configure_root_shell.yml"
......
......@@ -32,23 +32,11 @@ IDENTITY_PATH="/usr/lib/check_mk_agent/.ssh/"
# Mandatory: yes
IDENTITY_FILE="${IDENTITY_PATH}id_${IDENTITY_ALGORITHM}_netapp_report"
### Subnet patterns for determining management IP.
### Use subnet string with Bash glob "*" at the end as shown in example.
### NetApp management Hostname.
### IPs are automatically resolved for the correct host subnet by DNS.
# Default: (none)
# Mandatory: yes
# PATTERN_EXAMPLE="123.34.45.*"
PATTERN_VLAN11="{{ check_netapp_nfs_shares.vault_pattern_vlan11 }}"
PATTERN_VLAN13="{{ check_netapp_nfs_shares.vault_pattern_vlan13 }}"
PATTERN_VLAN14="{{ check_netapp_nfs_shares.vault_pattern_vlan14 }}"
PATTERN_VLAN20="{{ check_netapp_nfs_shares.vault_pattern_vlan20 }}"
### NetApp management IPs for each VLAN.
# Default: (none)
# Mandatory: yes
MGMT_VLAN11="{{ check_netapp_nfs_shares.vault_mgmt_vlan11 }}"
MGMT_VLAN13="{{ check_netapp_nfs_shares.vault_mgmt_vlan13 }}"
MGMT_VLAN14="{{ check_netapp_nfs_shares.vault_mgmt_vlan14 }}"
MGMT_VLAN20="{{ check_netapp_nfs_shares.vault_mgmt_vlan20 }}"
MGMT="{{ check_netapp_nfs_shares.vault_mgmt }}"
#### NetApp output settings
# Default: NETAPP_SETTINGS="set -showallfields false;set -showseparator \";\";set -rows 0; set -units raw;"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment