这篇文章有两个部分。
捕获和记录
我想在 24 小时内每 5 分钟自动捕获 nmon 数据,然后轮换文件。我假设我需要运行下面的命令并让 cron 在中午 12:00 启动它。
nmon -s 300 -c 288
问题 1:如何确保该流程在第二天开始并开始新流程之前不会继续运行?
Q2:我可以指定文件名以防止有人手动运行它并覆盖我的日志文件吗? (即主机名_YYYYMMDD.nmon)
数据库导入
文件写入后,我想将其导入到 mysql 数据库中。
我不确定这是否可以通过 shell 脚本来完成,或者我是否需要使用其他语言(如 Python)。
我开始编写下面的脚本,但我似乎陷入了一些领域。请随时修改我迄今为止所写内容中发现的任何错误。
脚本
#!/bin/bash
# nmon_log_rot_db.sh
# Variables
# nmon
NMON = '/usr/local/bin/nmon/nmon'
# Log Directory
LOGDIR = '/var/log/nmon/'
# Hostname
HOST = '/etc/hostname'
# Date
DATE = '/usr/bin/date +%y%m%d'
# File Name
FILE = ${LOGDIR}/${HOST}-${DATE}.nmon
# Kill current nmon process
command to kill nmon_log_rot_db.sh
???
# Log to Database
# connect to database
HOSTNAME = mysqlhost;
DBUSER = dbuser;
DBPASS = dbpass;
DBNAME = dbname;
# network table
ROW_ID|datetime|hostname|iface|rx KB/s|tx KB/s
# cpu table
ROW_ID|datetime|hostname|USER%|SYS%|WAIT%|IDLE
# mem table
ROW_ID|datetime|hostname|type (system or swap)|Total|Free|Used
# disk table
ROW_ID|datetime|hostname|disk_dev|busy|read|write
# Delete old log file
rm ${OLD_FILE}
# Start nmon
${NMON} -F ${FILE} -s 300 -c 288
答案1
s 和 c 标志的组合允许您控制 nmon 在批处理模式下运行的总持续时间。下面是运行 nmon 24 小时、每 60 秒记录一次统计信息的示例。
0 0 * * * /opt/nmon/nmon -f -s 60 -c 1440 -T -m /opt/nmon/nmon_logs/
在您的情况下,cron 表达式将记录如下:
0 0 * * * /opt/nmon/nmon -f -s 300 -c 288 -T -m /opt/nmon/nmon_logs/
nmon 二进制文件会自动将日期附加到导出的文件中,因此您不必担心文件名冲突,但是您可能希望确保旧文件在一段时间后被删除。
默认命名约定是 hostname_yyMMdd_HHmm.log 生成如下文件:NURSWGHBS001_151113_2300.log
然后,您可以将文件导入到任何不支持 nmon 格式的工具中,这是非常特殊的。