目的:定期将df -h的信息写入数据库,方便随时查询,观察数据增长情况
这里使用python3,Centos7默认没安装python3,需手动安装
1、安装 Python3
自行配置好yum源,这里使用在线安装
# 设置阿里云YUM源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理 YUM 缓存并更新软件包列表
yum clean all
yum makecache
# 安装 gcc
yum install -y gcc gcc-c++
# 安装 Python3 (脚本中的 pyodbc 需要python36-devel)
yum install -y python36-devel python3
# 安装 unixODBC
yum install -y unixODBC-devel
# 安装 pyodbc
pip3 install pyodbc
# 验证安装情况
python3.6 --version
2、安装Microsoft ODBC Driver for SQL Server
按照以下顺序进行安装,下载
01-unixODBC-2.3.11-1.rh.x86_64
02-msodbcsql17-17.9.1.1-1.x86_64
03-mssql-tools-17.9.1.1-1.x86_64
也可以从微软官方网站自行下载其他版本
链接: https://packages.microsoft.com/rhel/7/prod/Packages/
rpm -ivh 01-unixODBC-2.3.11-1.rh.x86_64.rpm
rpm -ivh 02-msodbcsql17-17.9.1.1-1.x86_64.rpm
rpm -ivh 03-mssql-tools-17.9.1.1-1.x86_64.rpm
3、创建数据库表
CREATE TABLE [DiskUsage](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Timestamp] [datetime] NULL,
[Filesystem] [varchar](200) NULL,
[Sizes] [varchar](200) NULL,
[Used] [varchar](200) NULL,
[Avail] [varchar](200) NULL,
[UsePercent] [varchar](200) NULL,
[MountedOn] [varchar](200) NULL,
[IPADD] [varchar](200) NULL,
[HOST] [varchar](200) NULL
)
4、创建python脚本
vi disk_usage_to_sql.py
import socket
import os
import subprocess
import pyodbc
# 获取主机名
def get_hostname():
return socket.gethostname()
# 获取 df -h 输出
def get_disk_usage():
result = subprocess.run(['df', '-h'], stdout=subprocess.PIPE)
return result.stdout.decode('utf-8')
# 解析 df -h 输出
def parse_disk_usage(output):
lines = output.strip().split('\n')[1:] # 跳过标题行
data = []
for line in lines:
parts = line.split()
if len(parts) >= 6:
filesystem, size, used, available, use_percentage, mounted_on = parts
if (filesystem != 'tmpfs') and (filesystem != 'devtmpfs'): # 过滤tmpfs和devtmpfs
data.append((filesystem, size, used, available, use_percentage, mounted_on))
return data
# 将数据插入 SQL Server
def insert_into_sql_server(data):
host = get_hostname()
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=192.168.2.25;'
'DATABASE=dbname;'
'UID=user;'
'PWD=password;'
)
with pyodbc.connect(conn_str) as conn:
cursor = conn.cursor()
for row in data:
cursor.execute(
"INSERT INTO DiskUsage (Filesystem, Sizes, Used, Avail, UsePercent, MountedOn, IPADD, Host) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
row + ('192.168.0.36', host,) # 将主机名添加到每个数据行的末尾
)
conn.commit()
if __name__ == '__main__':
disk_usage_output = get_disk_usage()
parsed_data = parse_disk_usage(disk_usage_output)
insert_into_sql_server(parsed_data)
5、创建计划任务
# 授予脚本执行权限
chmod +x disk_usage_to_sql.py
# 编辑 crontab 文件
crontab -e
# 添加 cron 作业,每1小时运行一次
0 * * * * /usr/bin/python3 /opt/disk_usage_to_sql.py >> /opt/disk_usage_to_sql.log 2>&1
# 每1分钟运行一次
* * * * * /usr/bin/python3 /opt/disk_usage_to_sql.py >> /opt/disk_usage_to_sql.log 2>&1
# 每天2点运行一次
0 2 * * * /usr/bin/python3 /opt/disk_usage_to_sql.py >> /opt/disk_usage_to_sql.log 2>&1
# 查看执行记录
tail -f /var/log/cron