shell监控数据库脚本(项目完善中ing)

shell监控数据库脚本

一个基本的shell脚本,监控数据库中的某个表是否有数据增长,并在没有增长时触发报警。

#!/bin/bash

# 数据库连接信息
DB_HOST="your_database_host"
DB_PORT="your_database_port"
DB_USER="your_database_username"
DB_PASSWORD="your_database_password"
DB_NAME="your_database_name"
TABLE_NAME="your_table_name"

# 报警邮件接收者信息
ALERT_EMAIL="your_alert_email_address"

# 查询数据库表记录数
last_count=$(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASSWORD -D $DB_NAME -e "SELECT COUNT(*) FROM $TABLE_NAME;" | tail -n 1)

# 循环监控
while true; do
    # 等待时间(单位:秒)
    sleep 3600
    
    # 查询数据库表记录数
    current_count=$(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASSWORD -D $DB_NAME -e "SELECT COUNT(*) FROM $TABLE_NAME;" | tail -n 1)
    
    # 检查记录数是否增长
    if [ $current_count -eq $last_count ]; then
        # 发送报警邮件
        echo "No data growth detected in $TABLE_NAME. Please investigate." | mail -s "Data Growth Alert" $ALERT_EMAIL
    fi
    
    # 更新记录数为最新值
    last_count=$current_count
done

更近一步的,继续监控Oracle数据库中的表并在没有数据增长时触发报警。脚本还会将上次运行的时间保存在一个文件中。

#!/bin/bash

# 数据库连接信息
DB_HOST="your_database_host"
DB_PORT="your_database_port"
DB_USER="your_database_username"
DB_PASSWORD="your_database_password"
DB_SERVICE="your_database_service_name"
TABLE_NAME="your_table_name"

# 报警邮件接收者信息
ALERT_EMAIL="your_alert_email_address"

# 文件路径用于存储上次运行的时间
LAST_RUN_FILE="/path/to/last_run.txt"

# 获取上次运行的时间
last_run=$(cat "$LAST_RUN_FILE")

# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")

# 查询数据库表记录数
last_count=$(sqlplus -S "$DB_USER/$DB_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$DB_HOST)(PORT=$DB_PORT))(CONNECT_DATA=(SERVICE_NAME=$DB_SERVICE)))" <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT COUNT(*) FROM $TABLE_NAME;
EXIT;
EOF
)

# 移除上次运行时间文件(在首次运行时,如果文件存在的话)
rm -f "$LAST_RUN_FILE"

# 将当前时间写入文件
echo "$current_time" > "$LAST_RUN_FILE"

# 循环监控
while true; do
    # 等待时间(单位:秒)
    sleep 3600

    # 查询数据库表记录数
    current_count=$(sqlplus -S "$DB_USER/$DB_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$DB_HOST)(PORT=$DB_PORT))(CONNECT_DATA=(SERVICE_NAME=$DB_SERVICE)))" <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT COUNT(*) FROM $TABLE_NAME;
EXIT;
EOF
    )
    
    # 检查记录数是否增长
    if [ "$current_count" -eq "$last_count" ]; then
        # 发送报警邮件
        echo "No data growth detected in $TABLE_NAME. Please investigate." | mail -s "Data Growth Alert" $ALERT_EMAIL
    fi

    # 更新记录数和上次运行时间为最新值
    last_count="$current_count"
    current_time=$(date +"%Y-%m-%d %H:%M:%S")
    echo "$current_time" > "$LAST_RUN_FILE"
done

脚本添加到Crontab中,以便定期运行监控任务。例如,可以使用以下命令编辑Crontab文件:

crontab -e

然后添加一行类似于以下内容的条目:

0 * * * * /path/to/your/script.sh

这将使脚本每小时执行一次。可根据需求调整Crontab的设置。

如果想要将脚本的运行时间和监控的表作为配置文件,可以将它们存储在一个单独的配置文件中,并在脚本中读取该文件的值。以下是修改后的脚本示例:

#!/bin/bash

# 读取配置文件中的值
source config.cfg

# 报警邮件接收者信息
ALERT_EMAIL="your_alert_email_address"

# 文件路径用于存储上次运行的时间
LAST_RUN_FILE="/path/to/last_run.txt"

# 获取上次运行的时间
last_run=$(cat "$LAST_RUN_FILE")

# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")

# 查询数据库表记录数
last_count=$(sqlplus -S "$DB_USER/$DB_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$DB_HOST)(PORT=$DB_PORT))(CONNECT_DATA=(SERVICE_NAME=$DB_SERVICE)))" <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT COUNT(*) FROM $TABLE_NAME;
EXIT;
EOF
)

# 移除上次运行时间文件(在首次运行时,如果文件存在的话)
rm -f "$LAST_RUN_FILE"

# 将当前时间写入文件
echo "$current_time" > "$LAST_RUN_FILE"

# 循环监控
while true; do
    # 等待时间(单位:秒)
    sleep $WAIT_TIME

    # 查询数据库表记录数
    current_count=$(sqlplus -S "$DB_USER/$DB_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$DB_HOST)(PORT=$DB_PORT))(CONNECT_DATA=(SERVICE_NAME=$DB_SERVICE)))" <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT COUNT(*) FROM $TABLE_NAME;
EXIT;
EOF
    )
    
    # 检查记录数是否增长
    if [ "$current_count" -eq "$last_count" ]; then
        # 发送报警邮件
        echo "No data growth detected in $TABLE_NAME. Please investigate." | mail -s "Data Growth Alert" $ALERT_EMAIL
    fi

    # 更新记录数和上次运行时间为最新值
    last_count="$current_count"
    current_time=$(date +"%Y-%m-%d %H:%M:%S")
    echo "$current_time" > "$LAST_RUN_FILE"
done

创建了一个名为config.cfg的配置文件,内容如下:

# 配置文件 config.cfg

# 数据库连接信息
DB_HOST="your_database_host"
DB_PORT="your_database_port"
DB_USER="your_database_username"
DB_PASSWORD="your_database_password"
DB_SERVICE="your_database_service_name"

# 监控表信息
TABLE_NAME="your_table_name"

# 等待时间(单位:秒)
WAIT_TIME=3600

可以通过修改配置文件而不是修改脚本本身来更改运行时间和监控的表,更灵活也更便于维护。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值