【问题标题】:Where can I find locust logs?我在哪里可以找到蝗虫原木?
【发布时间】:2014-09-25 22:35:42
【问题描述】:

我正在使用 locust 对我们的应用进行压力测试。

我收到错误,因为 POST 调用似乎不正确。我在哪里可以看到蝗虫的日志?我想看看 post call 的样子,看看有什么问题。

这是我的代码,以防有人能告诉我我做错了什么:

from locust import HttpLocust, TaskSet, task

json3 = """{"stack_name": "beenz-php-app-12", "disable_rollback": true, "template": "php", "timeout_mins": 60}"""

class MyTaskSet(TaskSet):
    @task
    def send(self):
             response = self.client.post("/stacks", json3, headers={'X-Auth-Key': 'xxxx', 'Content-Type': 'application/json', 'X-Auth-User': 'xxxx', 'Accept': 'application/json', 'X-Auth-Token':'xxxx'})
            print "Response status code:", response.status_code
            print "Response content:", response.content

class MyLocust(HttpLocust):
    task_set = MyTaskSet
    min_wait = 5000
    max_wait = 15000

谢谢!

【问题讨论】:

  • 我在 Locust 中看到了这个错误:HTTPError('500 Server Error: Server Error',)

标签: logging locust


【解决方案1】:

通过在启动 locust 时添加--logfile=locustfile.log 参数,您的print 消息将被重定向到一个名为locustfile.log 的文件,我认为这是您在问题中提到的日志

假设您的 locust 文件名为 locustfile.py。你在本地机器上运行 locust。您可以通过locust --host=http://127.0.0.1 --logfile=locustfile.log 启动 locust。然后你就可以在 http://127.0.0.1:8089/ 上运行 locust 测试了。

【讨论】:

    【解决方案2】:

    将以下代码添加到您的 locust 文件中:

    import logging
    log = logging.getLogger()
    log.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh = logging.FileHandler('locust.log')
    fh.setLevel(logging.DEBUG)
    

    现在您可以将记录器或打印语句保留到您的 "locust.log" 文件中。
    这应该会为您带来魔力。

    【讨论】:

      【解决方案3】:

      其他人提到的--logfile 选项可能是最简单的路线。请注意,您可能想要记录您的消息而不是打印它们。我认为 locust 设置了一个特殊的 stdout 记录器,以便 print 消息进入控制台,而不是日志文件。

      --logfile 的替代方法是利用 python 的日志系统添加您自己的文件附加程序。如果您需要滚动文件附加程序,或者拥有比 locust 配置的格式更喜欢的日志格式,这是一个不错的选择。

      以下是我们如何在 locust 测试中设置和使用日志记录的示例。注意任务集的每个实例如何记录到自己的记录器。这使得将日志文件过滤到单个 locust 变得很容易。另请注意,我们会将所有 HTTP 错误记录为警告。

      from locust import HttpLocust, TaskSet, task
      import itertools
      import logging
      import socket
      from logging.handlers import RotatingFileHandler
      
      def append_file_logger():
          root_logger = logging.getLogger()
          log_format = "%(asctime)s.%(msecs)03d000 [%(levelname)s] {0}/%(name)s : %(message)s".format(socket.gethostname())
          formatter = logging.Formatter(log_format, '%Y-%m-%d %H:%M:%S')
          file_handler = RotatingFileHandler('./locust.log', maxBytes=5 * 1024 * 1024, backupCount=3)
          file_handler.setFormatter(formatter)
          file_handler.setLevel(logging.INFO)
          root_logger.addHandler(file_handler)    
      
      append_file_logger()
      
      counter = itertools.count()
      
      class FooTaskSet(TaskSet):
          def on_start(self):
              self.logger = logging.getLogger('locust-%03d' % counter.next())
              self.logger.info('Hatching locust')
      
          @task
          def send(self):
              response = self.client.post(...)
              if not response.ok:
                  self.logger.warn('Error sending post') # TODO add status code, url, and reponse to the log 
      

      最终建议:如果您有多个任务,请将它们配置为以相同格式记录所有 http 错误。可以轻松地从您的日志中提取数据。

      【讨论】:

        【解决方案4】:

        response = self.client.post(... 开头的行有语法错误。最后一个字符串永远不会关闭:'X-Auth-Token':'xxxx}

        将其更改为'X-Auth-Token':'xxxx'},脚本应该可以正常工作。

        使用您发布的脚本(存在语法错误)启动 Locust 时,您将立即获得异常和堆栈跟踪。

        【讨论】:

        • 当我用 x 替换实际标记时,我想我不小心取出了结束引号。在我的脚本中,它就在那里。我看到的错误是 500 的。我想知道 Locust 的日志在哪里,这样我就可以看一下帖子的样子。当我使用具有相同 url、body 和 headers 的 Postman 时 - 它工作正常。
        • 我明白了。我不确定您指的是哪种日志。调试问题的一种方法是使用邮递员和 Locust 向requestb.in 发出请求,然后看看有什么不同。
        【解决方案5】:

        如果不明显,则没有默认设置。 https://github.com/locustio/locust/blob/master/locust/main.py

        第 167 行

        # log file
        parser.add_option(
            '--logfile',
            action='store',
            type='str',
            dest='logfile',
            default=None,
            help="Path to log file. If not set, log will go to stdout/stderr",
        )
        

        只需传递首选位置,以防如 lyen 所述作为后台进程运行。

        【讨论】:

          猜你喜欢
          • 2014-07-16
          • 2012-05-30
          • 2013-07-13
          • 2012-06-05
          • 2011-04-24
          • 2021-02-02
          • 2016-07-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多