一个可扩展的amazon s3和cloudfront日志解析器。

s3stat的Python项目详细描述


这个python模块使用非常好的goaccess实用程序 为您提供一个令人惊叹的amazon日志文件分析器工具,它相对容易安装,而且非常 易于扩展。 需要goaccess版本:0.8.5(不适用于0.9+)

安装

pip install s3stat

这将在pythonpath中安装s3stat.py,以防您希望从命令行运行它。

快速启动

安装goaccess

您应该安装goaccess

注意

CloudFront日志文件处理需要goaccess 0.7.1+

生成aws用户

首先,您应该创建一个有权读取日志文件的用户,并且您应该准备好它的aws访问密钥。

  1. 登录aws console

  2. 创建一个新用户并选择为该用户生成访问密钥的选项

  3. 保存访问密钥和安全密钥,因为很快就需要它们了

  4. 打开用户的permissions选项卡,并附加新的用户策略。选择“自定义策略”,然后复制以下内容:

    {
      "Statement": [
        {
          "Sid": "Stmt1334764540928",
          "Action": [
            "s3:GetBucketAcl",
            "s3:GetBucketLogging",
            "s3:GetObject",
            "s3:ListAllMyBuckets",
            "s3:ListBucket",
            "s3:PutBucketAcl",
            "s3:PutBucketLogging",
            "s3:PutObject",
            "s3:PutObjectAcl"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::*"
          ]
        },
        {
          "Sid": "Stmt1334764631669",
          "Action": [
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:GetStreamingDistribution",
            "cloudfront:GetStreamingDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:ListStreamingDistributions",
            "cloudfront:UpdateDistribution",
            "cloudfront:UpdateStreamingDistribution"
          ],
          "Effect": "Allow",
          "Resource": [
            "*"
          ]
        }
      ]
    }
    

设置登录bucket

首先,您应该要求amazon为您的bucket和cloudfront发行版生成日志。

运行此脚本

s3stat.py <aws key> <aws secret> <bucket> <log_path>

这将下载今天的所有日志文件,并在控制台中启动goaccess实例。

有关更多选项,请运行:

s3stat.py -h

延伸

实际上,s3stat被设计成易于添加到pythonic工作流中,因此它定义了 一个可以子类化的类,以json格式处理结果。:

import s3stat

class MyS3Stat(s3stat.S3Stat):

    def process_results(self, json):
        print json

    def process_error(self, exception, data=None):
        print data
        raise exception

mytask = MyS3Stat(bucket, log_path, for_date, (aws_key, aws_secret))
mytask.run()

如果aws\u*参数是可选的,如果缺少,则从boto提供的环境变量中获取。 当前只在json解码失败时调用process_error方法,因此data是不可解码的字符串,而 异常是python引发的valueerror。

待办事项

  • 提供一个命令,将日志记录添加到指定的bucket和cloudfront分发版中

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
http POST请求Java CouchDB   java删除带有大量尾随0的浮点字符串上的科学符号   JavaEE5和Hibernate   java如何在Spring Social中获得比特定id更早的tweet   java是框架。revalidate()在事件后获取输出是否重要?   java为什么不能返回通用映射?   java如何理解和优化工厂方法的高自时间   java Eclipse 202006错误由于项目的生成路径不完整,因此未生成该项目   多线程是java。util。向量序列化线程安全?   在Eclipse和java中使用不同的构建配置。属性文件   编译Java:从命令行运行的问题   java如何知道消息是否已确认/取消?   Java铸造一套   java Android Seekbar progress已更改变量,给出错误