Как автоматически получать оповещения по электронной почте об ошибках в приложении Google

Я поддерживаю множество приложений Google App Engine, и очень сложно постоянно отслеживать все мои серверы, если они работают бесперебойно.

Очень неловко просыпаться только после того, как пользователь жалуется на сбои системы.

Можно ли постоянно обновлять информацию о состоянии моего сервера?

Могу ли я получить почту или что-то в этом случае, если это ошибка в моем приложении для приложений Google?

Не могу дождаться, когда Google выполнит это требование

Ответ 1

Вы можете запланировать задание cron, которое может сделать это для вас

Сначала создайте запись в cron.yaml

- description: Houston we have a problem Finder
  url: /errorfinder/
  schedule: every 3 hours
  timezone: Asia/Kolkata

Затем создайте запись в app.yaml

handlers:
- url: /errorfinder/
  script: errorfinder.app
  secure: always 

Теперь сохраните файл errorfinder.py со следующим содержимым

import base64
import datetime
import logging
import time
import urllib
import webapp2
from google.appengine.api.logservice import logservice
from google.appengine.api import mail

class MainHandler(webapp2.RequestHandler):
    def get(self):    
      # Set up end time for our query.
      end_time = time.time()
      start_time = end_time  - 10800 # 3 hours before now . same as cronjob interval
      html = ''
      report_needed = False
      # Iterate through all the RequestLog objects, displaying some fields and
      # iterate through all AppLogs beloging to each RequestLog count times
      for req_log in logservice.fetch(start_time=start_time, end_time=end_time, minimum_log_level=logservice.LOG_LEVEL_WARNING, include_app_logs=True):
            report_needed = True
            html = html + '<br /> REQUEST LOG <br />'
            html = html + 'IP: %s <br /> Method: %s <br /> Resource: %s <br />' % (req_log.ip, req_log.method, req_log.resource)
            html = html + 'Date: %s<br />' % datetime.datetime.fromtimestamp(req_log.end_time).strftime('%D %T UTC')

            for app_log in req_log.app_logs:
                html = html + '<br />&emsp; APP LOG<br />'
                html = html + '&emsp; Date: %s<br />' % datetime.datetime.fromtimestamp(app_log.time).strftime('%D %T UTC')
                html = html + '&emsp; Message: <b>%s</b><br />' % app_log.message
                html = html + '<br /><br /><br /><br />'
      if(report_needed):
           mail.send_mail(sender="Beagle Bot <[email protected]>",
                to='[email protected]',
                subject='Houston we have a problem ..',
                body=html,
                html=html,
                reply_to='[email protected]')
      self.response.out.write(html)

app = webapp2.WSGIApplication([('/errorfinder/', MainHandler)], debug=True)

Вы можете сделать поиск ошибок близким к реальному времени, уменьшив интервал задания cron

Ответ 2

Теперь это возможно с Stackdriver (приобретенным Google и интегрированным с Google Cloud Platform/App Engine).

введите описание изображения здесь

Ответ 3

В случае ошибок нет автоматического способа отправки сообщений тревоги.

Вам нужно будет создать собственное решение: создайте задание cron, которое анализирует журналы и отправляет электронную почту об ошибках. Возможно, совокупность аналогичных ошибок вместе. Вместо электронных писем вы можете автоматически создать отчет об ошибке в своей системе отслеживания проблем.