加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用perl分析web log 数据存储redis

发布时间:2020-12-15 23:53:52 所属栏目:大数据 来源:网络整理
导读:package redisControl;use strict;use warnings;use Redis;use Data::Dumper;use POSIX qw(strftime);sub new { my $self = {}; my $class = shift; bless $self; return $self;}# 插入数值到redissub insertHKey { my $self = shift; my ( $r,$sIp,$cIp,$da
package redisControl;
use strict;
use warnings;
use Redis;
use Data::Dumper;

use POSIX qw(strftime);

sub new {
    my $self  = {};
    my $class = shift;
    bless $self;
    return $self;
}

# 插入数值到redis
sub insertHKey {
    my $self = shift;
    my ( $r,$sIp,$cIp,$date,$timestamp,$count,$seal,$type,$level ) = @_;
    $r->hmset(
        'blackList',#设置key
        "$sIp:$cIp:date"      => $date,#设置日期
        "$sIp:$cIp:timestamp" => $timestamp,#设置unix时间戳
        "$sIp:$cIp:count"     => $count,#插入总次数
        "$sIp:$cIp:seal"      => $seal,#是否被封
        "$sIp:$cIp:type"      => $type,#IP或者CALL类型
        "$sIp:$cIp:level"     => $level         #哪种级别被封
    );
}

sub insertKey {
    my $self = shift;
    my ( $r,$level ) = @_;
    my $minDate = strftime( "%Y%m%d%H%M",localtime(time) );
    my $houDate = strftime( "%Y%m%d%H",localtime(time) );
    $r->sadd( $date           => "$sIp:$cIp" );    #按天来存储IP信息
    $r->sadd( $minDate        => "$sIp:$cIp" );    #按分钟存储IP信息
    $r->sadd( $houDate        => "$sIp:$cIp" );
    $r->sadd( "$sIp:$date"    => "$sIp:$cIp" );
    $r->sadd( "$sIp:$minDate" => "$sIp:$cIp" );
    $r->sadd( "$sIp:$houDate" => "$sIp:$cIp" );
    $r->set( "$sIp:$cIp:$date:count"     => $count );     #详细按天的数据
    $r->set( "$sIp:$cIp:$date:seal"      => $seal );
    $r->set( "$sIp:$cIp:$date:type"      => $type );
    $r->set( "$sIp:$cIp:$date:timestamp" => $timestamp );
    $r->set( "$sIp:$cIp:$date:level"     => $level );
    $r->set( "$sIp:$cIp:$minDate:count" => $count );   #详细按分钟的数据
    $r->set( "$sIp:$cIp:$minDate:seal"  => $seal );
    $r->set( "$sIp:$cIp:$minDate:type"  => $type );
    $r->set( "$sIp:$cIp:$minDate:timestamp" => $timestamp );
    $r->set( "$sIp:$cIp:$minDate:level"     => $level );
    $r->set( "$sIp:$cIp:$houDate:count" => $count );   #详细按小时的数据
    $r->set( "$sIp:$cIp:$houDate:seal"  => $seal );
    $r->set( "$sIp:$cIp:$houDate:type"  => $type );
    $r->set( "$sIp:$cIp:$houDate:timestamp" => $timestamp );
    $r->set( "$sIp:$cIp:$houDate:level"     => $level );

}

#IP每10分钟抽出最新
sub ipCountMin {
    my $self = shift;
    my ( $r,$data,$end ) = @_;

    #my $llen = $r->llen($data);

    my ($ser) = ( split /:/,$data )[0];
    my $list = $r->lrange( $data,$end );

    return $list;
}

#IP排行榜统计
sub ipTop {
    my $self = shift;
    my ( $r,$date ) = @_;
    my $top100Ip;
    my @ips = $r->sort( $date,"by","*:$date:count","limit",100,"desc" );
    for my $value (@ips) {
        push @{ $top100Ip->{$value} },$r->mget(
            "$value:$date:count","$value:$date:level","$value:$date:type","$value:$date:seal","$value:$date:timestamp"
          );
    }
    return $top100Ip;
}

#刷新每分钟IP的次数
sub realTimeDateIp {
    my $self = shift;
    my $sData;
    my ( $r,$sec) = @_;
    my $startTime = strftime( "%Y%m%d%H%M",localtime( time() - $sec ) );
    my $dataFrom = $r->smembers("$startTime")
      ;    #统计服务器的各个时间段IP成员
    unless ($dataFrom) {    #如果IP没有被封
        my $sIp;
        my $ifconfig = `ifconfig`;
        $sIp = $1
          if $ifconfig =~
          /eth0(?!:)[sS]+?inet[^:]+:((?:d{1,3}.){3}d{1,3})/
          ;                 #获取服务器IP
        $sData->{$sIp} = 0;
    }
    for (@$dataFrom) {
        my ( $sIp,$cIp ) = split /:/;
        $sData->{$sIp}++;
    }
    for my $sIp ( keys %$sData ) {
        $r->lpush( "$sIp:min" => $sData->{$sIp} )
          ;                 #根据IP分别统计每分钟的次数
    }
}

sub realHourDateIp {
    my $self = shift;
    my $sData;
    my ( $r,$sec) = @_;
    my $startTime = strftime( "%Y%m%d%H",$cIp ) = split /:/;
        $sData->{$sIp}++;
    }
    for my $sIp ( keys %$sData ) {
        $r->lpush( "$sIp:hour" => $sData->{$sIp} )
          ;                 #根据IP分别统计每小时的次数
    }
}

1;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读