0

我编写了一个 bash 脚本,我想用它来通过 pushgateway 监控 Synology 上的备份。

该脚本应在备份文件夹中搜索子文件夹,将最新文件写入变量并将文件的年龄和大小写入数组。

为了最终将其提供给推送网关,我列出了所有带有索引的指标。所有文件夹或文件都可用。如果我执行脚本,通常找不到一个或多个索引。如果我一一手动执行命令,我会得到正确的输出。

这是脚本:

#!/bin/bash
set -e

backup_dir=$1

for dir in $(find "$backup_dir" -maxdepth 1 -mindepth 1 -type d \( ! -name @eaDir \)); do
    if compgen -G "${dir}/*.vib" > /dev/null; then
        latest_vib=$(ls -t1 "$dir"/*.vib | head -1)
        age_vib=$(( ( $(date +%s) - $(stat -c %Y "$latest_vib") ) ))
        size_vib=$(stat -c %s "$latest_vib")

        arrage_vib+=("${age_vib}")
        arrsize_vib+=("${size_vib}")
    fi
    if compgen -G "${dir}/*.vbk" > /dev/null; then
        latest_vbk=$(ls -t1 "$dir"/*.vbk | head -1)
        age_vbk=$(( ( $(date +%s) - $(stat -c %Y "$latest_vbk") ) ))
        size_vbk=$(stat -c %s "$latest_vbk")

        arrage_vbk+=("${age_vbk}")
        arrsize_vbk+=("${size_vbk}")
    fi

    min_dir=$(echo "$dir" | cut -d'/' -f4- | tr '[:upper:]' '[:lower:]')
    sign_dir=${min_dir//_/-}
    arrdir+=("${sign_dir}")
done

echo "${arrdir[4]}"
echo "${arrage_vib[4]}"

cat << EOF | curl -ks -u user:pw --data-binary @- https://pushgateway/metrics/job/backup/instance/instance_name
    # HELP backup_age displays the age of backups in seconds
    # TYPE backup_age gauge
    backup_age_vib{dir="${arrdir[1]}"} ${arrage_vib[1]}
    backup_age_vib{dir="${arrdir[2]}"} ${arrage_vib[2]}
    backup_age_vib{dir="${arrdir[3]}"} ${arrage_vib[3]}
    backup_age_vib{dir="${arrdir[4]}"} ${arrage_vib[4]}
    backup_age_vbk{dir="${arrdir[1]}"} ${arrage_vbk[1]}
    ...
    # HELP backup_size displays the size of backups in bytes
    # TYPE backup_size gauge
    backup_size_vib{dir="${arrdir[1]}"} ${arrsize_vib[1]}
    ...
EOF

我希望你能帮助我并指出我犯的错误。我也对脚本的一般优化持开放态度,因为我认为可以更好地解决它,提高性能或优化。我从这里有几行代码;-)。

提前谢谢了。

4

0 回答 0