将Linux日志转换为csv

ffvjumwh  于 12个月前  发布在  Linux
关注(0)|答案(3)|浏览(147)

我是Linux新手。很抱歉又问了这个问题。但我真的很感激如果有人能帮助我在这方面。我有麻烦如何转换我的Linux日志到csv文件更可读。
我的Apache日志如下:

[Sun Mar 01 06:01:30 2015] [error] [client 123.456.789.012] File does not exist: /var/www/html/

如何按列分隔它们,使用:日期(Sun Mar 01 06:01:30 2015),IP(123.456.789.012)仅IP,错误消息(File does not exist)和目标(/var/www/html/)?
谢谢你

wydwbb8l

wydwbb8l1#

有很多方法可以在shell脚本中实现它。将详细描述该方法并给予一个示例。
您必须确定分隔符来对字符串进行分区,您可以使用awk或sed命令根据分隔符对字段进行分区
例如,在你的情况下,你可以考虑']'作为定界符,使用定界符命令将行断开,如下所示:

cat logfile | awk -F']' '{print "$1, $2, $3"}' > new_log_file.csv
46qrfjad

46qrfjad2#

最简单的方法是使用自己的Logformat字符串。您可以修改标准LogFormat以使用TAB而不是空格作为分隔符。通常称为组合LogFormat的标准或通用日志格式如下所示:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
如果您想要一个TAB分隔的文件,只需在服务器配置文件中使用以下CustomLog语句:Customlog logs/tabbed-logfile "%h\t%l\t%u\t%t\t\"%r\"\t%>s\t%b\t\"%{Referer}i\"\t\"%{User-Agent}i\""

8gsdolmq

8gsdolmq3#

我使用report命令行实用程序:https://github.com/MatteoGuadrini/pyreports#command-line

$ cat mylog.yml
reports:
  - report:
    input:
     manager: 'log'
     filename: '/tmp/test_log.log'
     # Apache http log format
     params:
       pattern: '([(\d\.)]+) (.*) \[(.*?)\] (.*?) (\d+) (\d+) (.*?) (.*?) (\(.*?\))'
       headers: ['ip', 'user', 'date', 'req', 'ret', 'size', 'url', 'browser', 'host']
    output:
      manager: 'csv'
      filename: '/tmp/mylog.csv'

$ report mylog.yaml

我按照这个文档学习YAML语法:https://pyreports.readthedocs.io/en/latest/dev/cli.html#command-line-interface

相关问题