ncc.zabbix_fbsd_templates
10:8e4f72f0be61 Browse Files
+ Мониторим не только сами активные сетевые сервисы, но и их зависимости, #1 + Версия, для отслеживания состояния набора скиптов через zabbix, #3 + Возможность мониторинга дополнительных пакетов, задаётся в конфиге, #2 + Не позволяем запиститься с отсутствующей директорией состояний, #4
src/aw.fbsd-mon-helper/bin/lounch.sh src/aw.fbsd-mon-helper/lib/common.sh src/aw.fbsd-mon-helper/lib/pkg.sh src/aw.fbsd-mon-helper/version zbx_export_templates.yaml
1.1 --- a/src/aw.fbsd-mon-helper/bin/lounch.sh Tue Oct 15 22:57:53 2024 +0300 1.2 +++ b/src/aw.fbsd-mon-helper/bin/lounch.sh Thu Oct 17 22:38:18 2024 +0300 1.3 @@ -4,6 +4,12 @@ 1.4 APP_ROOT="$(dirname "$BIN_ROOT")" 1.5 STATE_ROOT="$APP_ROOT/var" 1.6 1.7 +if ! [ -d "$STATE_ROOT" ]; then 1.8 + echo "NO STATE ROOT DIR: ${STATE_ROOT}" >&2 1.9 + exit 1 1.10 +fi 1.11 + 1.12 + 1.13 cat /dev/null > "$STATE_ROOT/status" 1.14 1.15 . "$APP_ROOT/lib/log.sh" 1.16 @@ -21,6 +27,8 @@ 1.17 exit 1 1.18 fi 1.19 1.20 +USER_MON_PKG_LIST="$TMP_ROOT/user_pkg_mon" 1.21 +touch "${USER_MON_PKG_LIST}" 1.22 1.23 my_exit () { 1.24 if [ -d "$TMP_ROOT" ] ; then 1.25 @@ -30,8 +38,8 @@ 1.26 1.27 trap my_exit 0 1.28 1.29 +. "$APP_ROOT/lib/common.sh" 1.30 . "$APP_ROOT/config.sh" 1.31 -. "$APP_ROOT/lib/common.sh" 1.32 . "$APP_ROOT/lib/fbsd_up.sh" 1.33 . "$APP_ROOT/lib/pkg.sh" 1.34
2.1 --- a/src/aw.fbsd-mon-helper/lib/common.sh Tue Oct 15 22:57:53 2024 +0300 2.2 +++ b/src/aw.fbsd-mon-helper/lib/common.sh Thu Oct 17 22:38:18 2024 +0300 2.3 @@ -4,4 +4,8 @@ 2.4 2.5 sleep_some () { 2.6 sleep "$(get_rand_sec)" 2.7 +} 2.8 + 2.9 +add_pkg_mon () { 2.10 + echo "$1" >> "${USER_MON_PKG_LIST}" 2.11 } 2.12 \ No newline at end of file
3.1 --- a/src/aw.fbsd-mon-helper/lib/pkg.sh Tue Oct 15 22:57:53 2024 +0300 3.2 +++ b/src/aw.fbsd-mon-helper/lib/pkg.sh Thu Oct 17 22:38:18 2024 +0300 3.3 @@ -3,6 +3,7 @@ 3.4 3.5 v_pkg_detail_status="$STATE_ROOT/pkg_detail" 3.6 v_pkg_update_status="$STATE_ROOT/pkg_update" 3.7 +v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list" 3.8 3.9 pkg_init () { 3.10 if ! [ -d "$v_pkg_detail_status" ]; then 3.11 @@ -15,6 +16,37 @@ 3.12 log "Update pakages" 3.13 pkg update 2>&1 | log 3.14 # Обновление базы аудита происходит на получении общих данных по пакетам 3.15 + 3.16 + touch "${v_pkg_detail_status_list}" 3.17 +} 3.18 + 3.19 +pkg_get_detail_pkg_list () { 3.20 + local vl_pkg_fullname 3.21 + local vl_buf 3.22 + 3.23 + cat "${USER_MON_PKG_LIST}" | while read vl_buf; do 3.24 + vl_pkg_fullname=$(pkg query '%n-%v' "${vl_buf}") 3.25 + [ -n "${vl_pkg_fullname}" ] && echo "${vl_pkg_fullname}" >> "${v_pkg_detail_status_list}" 3.26 + done 3.27 + 3.28 + service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read vl_buf; do 3.29 + if ! [ -f "$vl_buf" ] ; then 3.30 + continue 3.31 + fi 3.32 + 3.33 + vl_pkg_fullname="$(pkg which "$vl_buf" | awk '$0 ~ "was installed by package" {print $6}')" 3.34 + 3.35 + if [ -z "$vl_pkg_fullname" ] ; then 3.36 + log "$vl_buf have no matched pkg" 3.37 + continue 3.38 + fi 3.39 + 3.40 + { 3.41 + echo "${vl_pkg_fullname}" 3.42 + pkg query '%rn' "${vl_pkg_fullname}" 3.43 + pkg query '%dn' "${vl_pkg_fullname}" 3.44 + } >> "${v_pkg_detail_status_list}" 3.45 + done 3.46 } 3.47 3.48 pkg_make_detail () { 3.49 @@ -25,61 +57,54 @@ 3.50 local vl_status_file 3.51 local vl_pkg_status 3.52 3.53 - service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read svc_file; do 3.54 - if ! [ -f "$svc_file" ] ; then 3.55 - continue 3.56 - fi 3.57 + pkg_get_detail_pkg_list 3.58 + cat "${v_pkg_detail_status_list}" | sort | uniq | while read vl_pkg_fullname; do 3.59 + log "Working with $vl_pkg_fullname" 3.60 3.61 - vl_pkg_fullname="$(pkg which "$svc_file" | awk '$0 ~ "was installed by package" {print $6}')" 3.62 - if [ -z "$vl_pkg_fullname" ] ; then 3.63 - log "$svc_file have no matched pkg" 3.64 - continue 3.65 - fi 3.66 + vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")" 3.67 + vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")" 3.68 + vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")" 3.69 + vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')" 3.70 3.71 - vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")" 3.72 - vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")" 3.73 - vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")" 3.74 - vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')" 3.75 + case "$vl_pkg_status" in 3.76 + = ) 3.77 + vl_pkg_status=OK 3.78 + ;; 3.79 3.80 - case "$vl_pkg_status" in 3.81 - = ) 3.82 - vl_pkg_status=OK 3.83 - ;; 3.84 + "<" ) 3.85 + vl_pkg_status="NEED UPDATE" 3.86 + ;; 3.87 3.88 - "<" ) 3.89 - vl_pkg_status="NEED UPDATE" 3.90 - ;; 3.91 + ">" ) 3.92 + vl_pkg_status="REPO VERSION LOWER" 3.93 + ;; 3.94 3.95 - ">" ) 3.96 - vl_pkg_status="REPO VERSION LOWER" 3.97 - ;; 3.98 + "?" ) 3.99 + vl_pkg_status="NO PACKAGE IN REPO" 3.100 + ;; 3.101 3.102 - "?" ) 3.103 - vl_pkg_status="NO PACKAGE IN REPO" 3.104 - ;; 3.105 - 3.106 - "!" ) 3.107 - vl_pkg_status="ERROR" 3.108 - log_err -s "${vl_pkg_name}: pkg can not compare version of package" 3.109 - ;; 3.110 + "!" ) 3.111 + vl_pkg_status="ERROR" 3.112 + log_err -s "${vl_pkg_name}: pkg can not compare version of package" 3.113 + ;; 3.114 3.115 - * ) 3.116 - log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}" 3.117 - vl_pkg_status="ERROR" 3.118 - ;; 3.119 + * ) 3.120 + log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}" 3.121 + vl_pkg_status="ERROR" 3.122 + ;; 3.123 3.124 - esac 3.125 + esac 3.126 3.127 - vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}" 3.128 - pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \ 3.129 - > "${vl_status_file}" 3.130 + vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}" 3.131 + pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \ 3.132 + > "${vl_status_file}" 3.133 3.134 - printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file" 3.135 - pkg audit "$vl_pkg_fullname" \ 3.136 - | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \ 3.137 - > "${vl_status_file}.audit" 3.138 + printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file" 3.139 + pkg audit "$vl_pkg_fullname" \ 3.140 + | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \ 3.141 + > "${vl_status_file}.audit" 3.142 3.143 - done 3.144 + done 3.145 } 3.146 3.147 pkg_check_up_status () {
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/src/aw.fbsd-mon-helper/version Thu Oct 17 22:38:18 2024 +0300 4.3 @@ -0,0 +1,1 @@ 4.4 +v0.r202410.1 4.5 \ No newline at end of file
5.1 --- a/zbx_export_templates.yaml Tue Oct 15 22:57:53 2024 +0300 5.2 +++ b/zbx_export_templates.yaml Thu Oct 17 22:38:18 2024 +0300 5.3 @@ -7,7 +7,7 @@ 5.4 - uuid: 188bbd004fd94b4d8bbaee4333ca8077 5.5 template: 'AWNET FreeBSD Template' 5.6 name: 'AWNET FreeBSD Template' 5.7 - description: 'Версия: v0.r202410.2' 5.8 + description: 'Версия: v0.r202410.3' 5.9 groups: 5.10 - name: Templates/AWNET 5.11 items: 5.12 @@ -188,6 +188,15 @@ 5.13 name: 'Во время сбора данных посредником произошли ошибки' 5.14 opdata: '{ITEM.VALUE}' 5.15 priority: AVERAGE 5.16 + - uuid: e3968cfbd4244ada8e7ab7c8a1758e44 5.17 + name: 'Версия набора скриптов' 5.18 + key: 'vfs.file.contents["{$AW.FBSD.HELPER_PATH}/version"]' 5.19 + value_type: TEXT 5.20 + trends: '0' 5.21 + preprocessing: 5.22 + - type: DISCARD_UNCHANGED_HEARTBEAT 5.23 + parameters: 5.24 + - 24h 5.25 discovery_rules: 5.26 - uuid: 27e0563f78b146d1bd00263ea2b98e9a 5.27 name: 'Контроль состояния активированных сервисов'