Cacti图形数据自动导出脚本

此脚本在cacti服务器或者其他linux服务器中运行(其他服务器中运行需要打开数据库远程访问权限)

脚本通过crontab指定时间下载cacti中图形树中所有的图形的图形文件和CSV数据文件。

本脚本根据当前日期创建相应的图形和数据的每日和每月的文件夹并进行保存,方便查看

具体注意事项已经在脚本注释中做了详细解释


# Cacti图形数据自动导出脚本
# 本脚本通过自动查询图形树中所有的图形编号和图形名称,使用wget工具进行下载,
# 在图形树中添加图形以后,导出系统会在执行前自动查询数据库中最新的列表。
# 您要做的就是,将您需要导出的图形添加至图形树即可。

#使用此脚本前应首先更改Cacti图形和数据导出网页的验证模式,更改完毕后可免验证登录,有一定的风险,请慎重!
#注释掉graph_image.php和graph_xport.php文件中 [include("./include/auth.php");]行
#添加[include("./include/global.php");]

#使用以下命令添加crontab自动下载列表 我这里添加的是每日00:01分进行下载。添加完成后重启crond服务
#我这里将脚本文件保存在cacti文件夹中的file文件夹中,为了安全,可将脚本保存在别处,并在apache中添加虚拟目录,进行文件浏览。
# echo "01 00  * * * root  /var/www/html/file/export.sh > /dev/null 2>&1" > /etc/cron.d/export

# 陕西西普数据通信股份有限公司 运行与维护部
# By:Fenei  2016年1月14日
# QQ:407603129 EMAIL:babyfenei@qq.com
# http://babyfenei.blog.51cto.com

#!/bin/bash
USERNAME="root"           #数据库用户名
PASSWORD="passwd"    #数据库密码
DBNAME="cacti"            #Cacti使用的数据库名称                              
MYSQL_CMD="mysql  -u${USERNAME} -p${PASSWORD}"

rm -rf /tmp/list.log      #删除旧的下载列表文件
#select replace(title_cache,'*',) 此语句是去除图形标题中的*号 我的所有图形树中的图形都有*号 如果没有可将本语句改为 select title_cache,
select_db_sql="select replace(replace(replace(title_cache,'/','-'),' ',''),'*',''), graph_tree_items.local_graph_id  
from graph_tree_items left join graph_templates_graph 
on graph_templates_graph.local_graph_id=graph_tree_items.local_graph_id 
where graph_tree_items.local_graph_id <> 0 order by 'id' desc"
echo ${select_db_sql}  | ${MYSQL_CMD}  ${DBNAME}    > /tmp/list.log              #查询图形树表中的图形ID非0的数据并将结果保存至下载列表                   
                                                                                 #判断是否创建成功

                                     if [ $? -ne 0 ]                                            then
 echo "select databases ${DBNAME} failed ..." >>/var/log/export/log              #数据库查询失败时将添加失败日志到日志文件中
fi


cd /var/www/html/file
#此命令为指定导出文件所在目录,可根据需求更改。如不指定的话会造成下载到root目录。

#创建以日期为名称的文件夹
mkdir -p $(date -d 1 +%Y/%m/%d/image/)
mkdir -p $(date -d 1 +%Y/%m/month/image)
mkdir -p $(date -d 1 +%Y/%m/%d/data)
mkdir -p $(date -d 1 +%Y/%m/month/data)

#Cacti网址阐述 这里必须在后面加'/'号 否则报错
URL="http://localhost/"
#获取当日日期  判断是否是1号
DAY=`date +%d`


#下载日流量图

cat /tmp/list.log | awk 'NR>1' | while read name id
do
wget "${URL}graph_image.php?local_graph_id=${id}&rra_id=1" -O $(date -d 1 +%Y/%m/%d/image/)${name}.jpg
done


#下载月流量图

cat /tmp/list.log | awk 'NR>1' | while read name id
do
if [ "$DAY" = 01 ];then
wget "${URL}graph_image.php?local_graph_id=${id}&rra_id=3" -O $(date -d 1 +%Y/%m/month/image/)${name}.jpg
fi
done


#下载日流量数据表

cat /tmp/list.log | awk 'NR>1' | while read name id
do
wget "${URL}graph_xport.php?local_graph_id=${id}&rra_id=1" -O $(date -d 1 +%Y/%m/%d/data/)${name}.xls
done


#下载月流量数据表

cat /tmp/list.log | awk 'NR>1' | while read name id
do
if [ "$DAY" = 01 ];then
wget "${URL}graph_xport.php?local_graph_id=${id}&rra_id=3" -O $(date -d 1 +%Y/%m/month/data/)${name}.xls
fi
done

导出结果如图

Cacti图形数据自动导出脚本(一)_cacti 下载  自动导出 导出 流量


如果想查看导出列表的,也可使用如下php文件进行查询

<?php  
   //连接数据库的参数  
    $host = "localhost";  
    $user = "root";  
    $pass = "passwd";  
    $db = "cacti";  
    //创建一个mysql连接  
    $connection = mysql_connect($host, $user, $pass) or die("Unable to connect!");  
    //选择一个数据库  
    mysql_select_db($db) or die("Unable to select database!");  
    //开始查询  
    $query = "select replace(title_cache,'*',''),graph_tree_items.local_graph_id  
from graph_tree_items left join graph_templates_graph 
on graph_templates_graph.local_graph_id=graph_tree_items.local_graph_id 
where graph_tree_items.local_graph_id <> 0 order by 'id' desc";  
    //执行SQL语句  
    $result = mysql_query($query) or die("Error in query: $query. ".mysql_error());  
    //显示返回的记录集行数  
    if(mysql_num_rows($result)>0){  
        //如果返回的数据集行数大于0,则开始以表格的形式显示  
        echo "<table cellpadding=10 border=1>";  
        while($row=mysql_fetch_row($result)){  
            echo "<tr>";  
            echo "<td>".$row[0]."</td>";  
            echo "<td>".$row[1]."</td>";  
            echo "<td>".$row[2]."</td>";  
            echo "</tr>";  
        }  
        echo "</table>";  
    }  
    else{  
        echo "记录未找到!";  
    }  
    //释放记录集所占用的内存  
    mysql_free_result($result);  
    //关闭该数据库连接  
    mysql_close($connection);  
?>

查看结果如下

Cacti图形数据自动导出脚本(一)_cacti 下载  自动导出 导出 流量_02