• perl实现监控linux


    1、使用root用户telnet进入linux系统

    2、修改DNS以下两种方法

    A、通过setup命令配置dns

    B、通过在/etc目录下创建resolv.conf文件

    3、查看DNS是否配置成功

    [root@BL360-25]# cat/etc/resolv.conf

    nameserver 202.107.117.11

    nameserver 202.107.117.12

    1、使用root用户telnet进入linux系统

    2、#提示符下,输入cpan

    提示:Are you ready for manual configuration? [yes]

    输入:no

    进入cpan>状态

    1、在cpan>提示下,输入o conf urllist push http://www.cpan.org/ 

    2、在cpan>提示下,输入o conf urllist push ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/

    3、执行过程中无任何输出后,在cpan>提示下,输入o conf commit,提示:commit: wrote /usr/lib/perl5/5.8.8/CPAN/Config.pm,表示成功

    1、在cpan>提示下,输入o conf http_proxy http://proxy.neusoft.com:8080

    2、在cpan>提示下,输入o conf proxy_user 用户名

    3、在cpan>提示下,输入o conf proxy_pass 密码

    4、执行过程中无任何输出后,在cpan>提示下,输入o conf commit,提示:commit: wrote /usr/lib/perl5/5.8.8/CPAN/Config.pm,表示成功

    在cpan>提示下,输入install Sys::Statistics::Linux

    Fetching with LWP:

    http://www.cpan.org/authors/01mailrc.txt.gz

    Going to read root/。。。。。。

    UNIVERSAL::require

    Shall I follow them and prepend them to the queue

    of modules we are processing right now? [yes] yes 

    提示是否安装相关模块,请输入yes

    All tests successful.

    最后测试都通过表示安装成功

    1、将linuxperfstat.tar包拷贝到linux系统,并解压出LinuxDiskStat.pm和linuxperfstat文件

    2、设置可执行权限

    chmod +x linuxperfstat

    3、linuxperfstat -h - 打印帮助

    具体使用方法请看readme.doc

    more linuxperfstat

    #!/usr/bin/perl -w

    use strict;
    use warnings;
    use Sys::Statistics::Linux;
    use Data::Dumper;
    use LinuxDiskStat;

    my $loop = 0; # current loop number
    my $PAGESIZE = 20; # max lines per header
    my $lines = $PAGESIZE; # counter for lines printed

    #
    # Process command line args
    #
    usage() if defined $ARGV[0] and $ARGV[0] =~ /^(-h|--help|0)$/;

    # process [interval [count]],
    my ($interval, $loop_max);
    if (defined $ARGV[0]) {
    $interval = $ARGV[0];
    $loop_max = defined $ARGV[1] ? $ARGV[1] : 2**32;
    usage() if $interval == 0;
    }
    else {
    $interval = 1;
    $loop_max = 1;
    }

    sub sim_show

    {
    my ($rh_siminfo) = @_;
    my $str = "";
    foreach (sort(keys(%$rh_siminfo)))
    {
    $str .= "$_: $rh_siminfo->{$_} ";
    }
    return $str;
    }

    my $lxs = Sys::Statistics::Linux->new(
    cpustats => {
    init => 1,
    },
    diskstats => {
    init => 1,
    },
    netstats => {
    init => 1,
    },
    memstats => {
    init => 1,
    },
    );
    my $lxs_diskstat = LinuxDiskStat->new;
    $lxs_diskstat->init;
    my $NIC_SPEED = 100_000_000;

    while (1) {

    ### Print header
    if ($lines++ >= $PAGESIZE) {
    $lines = 0;
    printf "%-20s %28s ", "", "------ Utilisation ------";
    printf "%-20s %7s %6s %6s %6s ", "Time", "%CPU",
    "%Mem", "%Disk", "%Net";
    }
    my $stat = $lxs->get;
    my $time = $lxs->gettime;
    my $disk_stat = $lxs_diskstat->get;

    #
    # Calculate utilisation
    #
    my $ucpu = fetch_cpu($stat);
    my $umem = fetch_mem($stat);
    my $udisk = fetch_disk($disk_stat);
    my $unet = fetch_net($stat);

    printf "%-20s %7s %6s %6s %6s ",$time, $ucpu, $umem, $udisk, $unet;
    ### Check for end
    last if ++$loop == $loop_max;
    ### Interval
    sleep $interval;
    }

    sub fetch_cpu
    {
    my ($rh_stat) = @_;
    my $str_cpu = "";
    if(defined($rh_stat->cpustats->{cpu}->{total}))
    {
    $str_cpu = $rh_stat->cpustats->{cpu}->{total};
    $str_cpu = sprintf "%.2f", $str_cpu;
    }
    return $str_cpu;
    }
    sub fetch_mem
    {
    my ($rh_stat) = @_;
    my $str_mem = "";
    if(defined($rh_stat->memstats))
    {
    $str_mem = 100-$rh_stat->memstats->{memfree}/$rh_stat->memstats->{memtotal}*100;
    $str_mem = sprintf "%.2f", $str_mem;
    }
    return $str_mem;
    }
    sub fetch_disk
    {
    my ($rh_stat) = @_;
    my $str_disk = "";
    if(defined($rh_stat->{hda}->{ticks}))

    {
    $str_disk = $rh_stat->{hda}->{ticks}/10;
    $str_disk = sprintf "%.2f", $str_disk;
    }
    elsif(defined($rh_stat->{sda}->{ticks}))
    {
    $str_disk = $rh_stat->{sda}->{ticks}/10;
    $str_disk = sprintf "%.2f", $str_disk;
    }
    elsif(defined($rh_stat->{xvdb1}->{ticks}))
    {
    $str_disk = $rh_stat->{xvdb1}->{ticks}/10;
    $str_disk = sprintf "%.2f", $str_disk;
    }
    return $str_disk;
    }
    sub fetch_net
    {
    my ($rh_stat) = @_;
    my $str_net = "";
    if(defined($rh_stat->netstats->{eth0}->{ttbyt}))
    {
    $str_net = ($rh_stat->netstats->{eth0}->{ttbyt}*800)/$NIC_SPEED;
    $str_net = sprintf "%.2f", $str_net;
    }
    return $str_net;
    }
    # usage - print usage and exit.
    #

    sub usage {
    print STDERR <<END;
    USAGE: linuxperfstat [-h] | [interval [count]]
    eg, linuxperfstat # print summary since boot only
    linuxperfstat 5 # print continually every 5 seconds
    linuxperfstat 1 5 # print 5 times, every 1 second
    END
    exit 1;
    }

  • 相关阅读:
    if...else if...else和switch语句的注意点
    oracle如何用sql查看触发器?
    jfinal如何调用存储过程?
    struts2中s:iterator 标签的使用详解 及 OGNL用法
    Protobuf3 语法指南
    Golang的优雅重启
    从外部设置传入Go变量
    Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解
    Linux文件系统深度讨论【转】
    Go语言中的byte和rune区别、对比
  • 原文地址:https://www.cnblogs.com/jinyz/p/3977413.html
Copyright © 2020-2023  润新知