从Mailgun导出LTS的日志

时间:2016-03-14 14:56:19

标签: mailgun

有没有办法通过API将Mailgun的日志导出到本地文件以进行长期存储?我们需要将邮件日志保留在Mailgun提供的30天内。

谢谢!

3 个答案:

答案 0 :(得分:2)

您一次只能请求300个事件,因此您必须继续提取下一页,直到结果用完为止。然后,您可以使用日志项执行任何操作,例如生成csv或在数据库中添加项。查看https://documentation.mailgun.com/en/latest/api-events.html#events了解API文档。这是Python中的一个例子:

import requests
import csv
from datetime import datetime, timedelta

DATETIME_FORMAT = '%d %B %Y %H:%M:%S -0000'

def get_logs(start_date, end_date, next_url=None):
    if next_url:
        logs = requests.get(next_url,auth=("api", [YOUR MAILGUN ACCESS KEY]))
    else:
        logs = requests.get(
            'https://api.mailgun.net/v3/{0}/events'.format(
                [YOUR MAILGUN SERVER NAME]
            ),
            auth=("api", [YOUR MAILGUN ACCESS KEY]),
            params={"begin"       : start_date.strftime(DATETIME_FORMAT),
                    "end"         : end_date.strftime(DATETIME_FORMAT),
                    "ascending"   : "yes",
                    "pretty"      : "yes",
                    "limit"       : 300,
                    "event"       : "accepted",}
        )
    return logs.json()


start = datetime.now() - timedelta(2)
end = timezone.now() - timedelta(1)
log_items = []
current_page = get_logs(start, end)

while current_page.get('items'):
    items = current_page.get('items')
    log_items.extend(items)
    next_url = current_page.get('paging').get('next', None)
    current_page = get_logs(start, end, next_url=next_url)

keys = log_items[0].keys()
with open('mailgun{0}.csv'.format(start.strftime('%Y-%M-%d')), 'wb') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(log_items)

答案 1 :(得分:0)

有一个简单的python脚本来检索域的日志,但我还没有检查它是否命中了事件api而不是现在已弃用的日志API ...

https://github.com/getupcloud/python-mailgunlog

答案 2 :(得分:0)

您可以查看MailgunLogger。 这是一个开源项目,可以轻松地通过Docker进行部署,以将Mailgun事件提取并存储在数据库中。它具有完全简单但基本的搜索功能,并且允许您添加多个帐户/域。

通过Docker运行:

docker run -d -p 5050:5050 \
  -e "ML_DB_USER=username" \
  -e "ML_DB_PASSWORD=password" \
  -e "ML_DB_NAME=mailgun_logger" \
  -e "ML_DB_HOST=my_db_host" \
  --name mailgun_logger jackjoe/mailgun_logger

从那里开始,该界面指导您配置所有内容。

在OP情况下,可以仅使用数据库而不是提供的UI来更轻松地使用此项目。