nmon 日志记录、轮换并存储到数据库

nmon 日志记录、轮换并存储到数据库

这篇文章有两个部分。

捕获和记录

我想在 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 格式的工具中,这是非常特殊的。

相关内容