lvs_rrd生成监控图形

Update: 2012-12-24

参考:http://salogs.com

net-snmp-lvs-module

利用net-snmp-lvs-module 给net-snmp加个模块,然后配合cacti的相关模板来实现监控。由于针对64位系统的net-snmp-lvs-module只支持到rhel4因此放弃使用。

相关网址:net-snmp-lvs-module-0.0.4.tar.gz: http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/files/net-snmp-lvs-module-0.0.4.tar.gz

lvs_rrd工具生成图形

lvs_rrd[ http://www.tepedino.org/lvs-rrd/ ]工具实现了网页的形式来查看lvs状态图功能。其主要有两个脚本组成:信息收集脚本和图像绘制脚本。信息收集脚本是将lvs的信息生成rrd格式的数据文件,然后利用图像绘制脚本生成图像,并生成一个php页面,这个页面中引用其所生成的图像,这样我们可以通过web页面的形式查看生成的php页面,就可以时时的查看lvs的状态信息了。

lvs_rrd需要部署在LVS-Master和LVS-Backup上,更准确的说lvs_rrd中的信息收集脚本一定要在LVS director 上运行。通过配置图像生成脚本和图像的生成目录,我们可以将他们时时的复制到其他的服务器中。这里为了方便起见我将它们部署到了LVS director上。

下面简单的介绍部署的步骤

安装rrdtool

yum install rrdtool bc

这两个文件根据自己的情况设置一下就可以了。

设置采集

将收集信息的脚本添加到计划任务中

#/etc/crontab
* * * * * root /data/www/lvs/lvs.rrd.update 2> /dev/null > /dev/null
# 不安装php环境,每5分钟生成一次图表
*/5 * * * * root /data/www/lvs/graph-lvs.sh -H 2> /dev/null > /data/www/lvs/graphs/index.html

生成图形参数

graph-lvs.sh [-lH] [-I VIP] [-P port] [-i IP] [-p port]
    -l      Lazy (Generate graphs at most once per 5 minutes)
    -H      Output an HTML page.
    -I VIP      Graph only servers in this virtual server
    -P port     Graph only VIPs on this port
    -i IP       Graph only this real server IP
    -p port     Graph only this real server port
    -r      Reverse (flip) active and inactive (positive to negative)
    -s      Separate Active/Inactive graphs (nullifies -r)

为各services生成图表

#!/bin/sh
# graphs.sh
# add to /etc/crontab
# */5 * * * * root /data/www/lvs/graphs.sh >> /data/www/lvs/graphs/log_`date +\%Y\%m`.txt 2>&1

#name:vip:port
PROD_services="
ALL:ALL:ALL
MGW:172.16.16.151:80
VTGW:172.16.16.152:80
CCGW:172.16.16.153:8080
Portal:172.16.16.154:80
DC:172.16.16.158:80
FGW:172.16.16.159:8080"

pre_PROD_services="
ALL:ALL:ALL
preMGW:172.16.16.102:80
preVTGW:172.16.16.103:80
preCCGW:172.16.16.104:8080
prePortal:172.16.16.105:80
preFGW:172.16.16.108:8080
preDC:172.16.16.106:80"

services=$PROD_services
#services=$pre_PROD_services
IPVSADM="/sbin/ipvsadm"
OUT="/data/www/lvs/graphs"
GRAPH_LVS="/data/www/lvs/graph-lvs.sh"
start_time=`date +'%Y-%m-%d %H:%M:%S'`
Index_Body=""
for s in `echo "$services"|grep -v ^$|grep -v ^#`
do
        name=`echo $s|cut -d\: -f 1`
        vip=`echo $s|cut -d\: -f 2`
        port=`echo $s|cut -d\: -f 3`
        if [ "$name" = "ALL" ];then
                $GRAPH_LVS -H > ${OUT}/${name}.html
        else
                $GRAPH_LVS -H -I "$vip" -P "$port" > ${OUT}/${name}.html
        fi
        Index_Body="${Index_Body}\n<tr><td>$name</td><td><a href="${name}.html">${vip}:${port}</a></td></tr>"
done

echo -e "<html>
        <head>
                <title>Linux Virtual Server</title>
                <meta HTTP-EQUIV="Refresh" CONTENT="320">
        </head>
         <body bgcolor='E3E3E3'>
         <table border=1>
         $Index_Body
         </table>
         <br>
         Last update: $start_time - `date +'%Y-%m-%d %H:%M:%S'`
         <br>
         <pre>
         $($IPVSADM -Ln)
         </pre>
       </body>
 </html>" > ${OUT}/index.html

exit 0

nginx图表查看站点

#nginx.conf
#user nginx;
worker_processes  2;
 
error_log  /var/log/nginx/error.log;
#pid        /var/run/nginx.pid;
worker_rlimit_nofile 10240;
 
events {
    use epoll;
    worker_connections  10240;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
     
    access_log    /var/log/nginx/access.log;
 
    log_format main
          '$remote_addr - $remote_user [$time_local] '
          '"$request" $status $bytes_sent '
          '"$http_referer" "$http_user_agent" '
          '"$gzip_ratio" "$connection" "$request_time"';
 
    #server_names_hash_bucket_size 64
    proxy_read_timeout 200;
    keepalive_timeout 65;
    sendfile on;
    #tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;
 
    gzip on;
    gzip_min_length 1k;
    #gzip_proxied any;
    gzip_buffers 4 32k;
    #gzip_types text/plain text/css text/xml application/xml application/atom+xml;
    gzip_types text/plain text/css text/xml;
    gzip_disable "MSIE [1-6]\.";
 
    ignore_invalid_headers    on;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 128k;
 
    include sites-enabled/*.conf;

server {
    #backends
    listen 80 default;
    #server_name 127.0.0.1;
 
    charset utf-8;
 
    # Allow file uploads
    client_max_body_size 20M;
    #index  index.html index.htm;

    #autoindex on;
    #autoindex_exact_size off;
    #autoindex_localtime on;
 
    #access_log off;
    access_log /var/log/nginx/lvs.access.log main;
    error_log /var/log/nginx/lvs.error.log warn;

    root   /data/www/lvs/graphs; 

} #End server
 
} #end http

Other