CentOS Extract如何监控状态
导读:监控 CentOS 中 extract 的实用方案 一、先明确监控对象 若“extract”指解压命令(如 tar、unzip、gzip 等),重点监控:解压进度、吞吐速率、CPU/内存、磁盘 I/O、是否异常退出。 若“extract”...
监控 CentOS 中 extract 的实用方案
一、先明确监控对象
- 若“extract”指解压命令(如 tar、unzip、gzip 等),重点监控:解压进度、吞吐速率、CPU/内存、磁盘 I/O、是否异常退出。
- 若“extract”是某个自定义程序/脚本/服务,重点监控:进程存活、资源占用、日志输出、返回码与告警。
二、解压过程的实时监控
- 进度与速率
- 使用 pv 观察管道流量(安装:sudo yum install pv):
- 示例:tar -xzvf file.tar.gz | pv > /dev/null
- 使用 tar 内置进度:–checkpoint 与 --checkpoint-action
- 示例:tar --checkpoint=1000 --checkpoint-action=dot file.tar.gz
- 使用 pv 观察管道流量(安装:sudo yum install pv):
- 资源与 I/O
- 实时资源:top/htop(安装:sudo yum install htop)
- 内存:free -h
- 系统概览:vmstat 1
- 磁盘 I/O:iostat -x 1(安装:sudo yum install sysstat)
- 进程级 I/O:iotop(安装:sudo yum install iotop)
- 进程级 CPU/内存:pidstat -p [PID] 1(需 sysstat)
- 故障排查与系统线索
- 进程与日志:ps aux | grep extract;journalctl -xe;必要时用 strace -e trace=file 跟踪文件操作(sudo yum install strace)
- 空间与连接:df -h;ss -tuln;ping/traceroute 做连通性验证
三、将 extract 纳入持续监控与告警
- 作为 systemd 服务托管
- 示例单元 extract.service:
- [Unit] Description=Extract Job
- [Service] Type=simple ExecStart=/usr/local/bin/do_extract.sh
- [Install] WantedBy=multi-user.target
- 常用命令:
- 启动/查看:systemctl start|status extract.service
- 实时日志:journalctl -u extract.service -f
- 示例单元 extract.service:
- 企业级监控
- Zabbix:通过 UserParameter 采集自定义指标(如解压耗时、返回码、速率),可做阈值与告警
- Prometheus:以脚本 Exporter 或 Pushgateway 上报指标,Grafana 可视化与告警
- Nagios:编写 check 脚本(检查进程存活、返回码、日志关键字),接入告警通道
四、可直接使用的监控脚本模板
- 功能:执行解压、记录开始/结束时间、返回码、最大内存、平均 CPU、退出状态;适配 tar.gz/zip。
- 保存为:/usr/local/bin/do_extract.sh(chmod +x)
- 使用:/usr/local/bin/do_extract.sh /data/file.tar.gz /data/out
#!/usr/bin/env bash
set -Eeuo pipefail
IN="$1"
OUT="${
2:-./}
"
LOG="/var/log/extract_$(date +%F_%H-%M-%S).log"
T0=$(date +%s)
# 0=tar.gz, 1=zip
TYPE=0
[[ "$IN" =~ \.zip$ ]] &
&
TYPE=1
cleanup() {
local rv=$?
local dur=$(( $(date +%s) - T0 ))
local maxrss_kb=0
local avgcpu_pct=0
# 解析最大内存(kB)与平均CPU(%)
if [[ -n "${
PID:-}
" ]];
then
maxrss_kb=$(ps -o rss= -p "$PID" | awk '{
m=$1>
m?$1:m}
END{
print m}
')
avgcpu_pct=$(ps -o %cpu= -p "$PID" | awk '{
s+=$1}
END{
printf "%.1f", s/NR}
')
fi
{
echo "start_time=$T0"
echo "end_time=$(date +%s)"
echo "duration_sec=$dur"
echo "exit_code=$rv"
echo "max_rss_kb=${
maxrss_kb:-0}
"
echo "avg_cpu_pct=${
avgcpu_pct:-0}
"
echo "input=$IN"
echo "output=$OUT"
}
>
>
"$LOG"
exit "$rv"
}
trap cleanup EXIT
mkdir -p "$OUT"
case "$TYPE" in
0)
# 若已安装 pv,可改为:tar -xzvf "$IN" | pv >
/dev/null
tar -xzvf "$IN" -C "$OUT"
;
;
1)
unzip -q "$IN" -d "$OUT"
;
;
*)
echo "Unsupported file: $IN" >
&
2
exit 2
;
;
esac
- 接入 systemd(/etc/systemd/system/extract.service):
- ExecStart=/usr/local/bin/do_extract.sh /data/file.tar.gz /data/out
- StandardOutput=journal
- StandardError=journal
- 接入 Zabbix(示例 UserParameter,需先在 agent 配置并重启):
- UserParameter=extract.status[], grep -oP ‘exit_code=\K\d+’ "/var/log/extract_.log" | tail -1
- UserParameter=extract.duration[], grep -oP ‘duration_sec=\K\d+’ "/var/log/extract_.log" | tail -1
- 在 Zabbix 创建监控项与触发器(如 exit_code != 0 或 duration 超过阈值)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Extract如何监控状态
本文地址: https://pptw.com/jishu/787847.html
