需要脚本将PIX / ASA日志格式化为CSV格式

时间:2010-12-14 18:03:32

标签: perl cisco gawk asa pix

我正在开发一个项目来将服务器上的各种解析为csv。有没有人有一个好的perl脚本或gawk语句,可以将标准的PIX / ASA日志解析为CSV ...

感谢。

1 个答案:

答案 0 :(得分:1)

我帮助编写了PIX / ASA日志的内部解析,我无法分享。例如,我们希望获得所有与交通相关的消息的源和目的地信息。我们最终创建了一个单独解析每个消息代码的模块。另一个障碍是协议名称和name声明等信息显示为别名,而不是日志中的数字或IP。 CPAN模块PIX :: Walker可以帮助解决这些问题。

如果你想要的只是严重性,代码和信息,你可以使用:

#!/usr/bin/perl

use strict;

if (-e $ARGV[0]) {
 open(INFILE,$ARGV[0]);
} else {
 die "Cannot open logfile $ARGV[0]\n";
}

foreach my $line (<INFILE>) {
 chomp $line;
 if (/^%(ASA|PIX)-(\d{1})-(\d{6}): (.*)/) {
  print "\"" . $1 . "\",\"" . $2 . "\",\"" . $3 . "\"\n";
 }
}

但如果这就是你想要的,我建议使用syslog-ng和mysql,配置如下:

options {
        long_hostnames(off);
        sync(100);
        stats(43200);
        use_fqdn(no);
        keep_hostname(yes);
        owner (nglog);
};

source udpsource { udp(ip(0.0.0.0) port(514));};

parser asa {
 csv-parser(colunms("ASA_SEV", "ASA_CODE", "ASA_TXT")
 flags(escape-none)
 delimiters("-:")
 );
};

destination d_sql { 
  sql(type(mysql)
  host("logserver") username("syslog-ng") password("password")
  database("logs")
  table("ASAlogs")
  columns("datetime", "host", "severity", "code", "message")
  values("$R_DATE", "$HOST", "$ASA_SEV", "$ASA_CODE", "$ASA_TXT")
  indexes("datetime", "host", "severity", "code"));
};

log { source{udpsource};
    log {parser(asa); destination(d_sql)};
};

这样,它就可以在数据库中运行报告。您还可以创建一个非常简单的PHP或Ruby on Rails Web前端。