Какой хороший способ собирать журналы из экземпляров Amazon EC2?
Мое приложение размещено на кластере Amazon EC2. Каждый экземпляр записывает события в файлы журнала. Мне нужно собрать (и данные мои) по этим журналам в конце каждого дня. Какой рекомендуемый способ сбора этих журналов в центральном месте? Я подумал о нескольких вариантах, не уверен, куда идти:
- scp их к экземпляру с использованием задания cron
- Записывать все события через TCP/IP в экземпляр
Ответы
Ответ 1
Мы используем Logstash на каждом хосте (развернутом через Puppet) для сбора и отправки событий журнала в очередь сообщений (RabbitMQ, но может быть Redis) на центральном хосте. Другой экземпляр Logstash извлекает события, обрабатывает их и записывает результат в ElasticSearch. A Kibana веб-интерфейс используется для поиска через эту базу данных.
Он очень способный, легко масштабируется и очень гибкий. В Logstash имеется множество фильтров для обработки событий с различных входов и может выводиться на множество сервисов, одним из которых является ElasticSearch. В настоящее время мы отправляем около 1,2 миллиона событий журнала в день из наших экземпляров EC2, на легком оборудовании. Задержка для события журнала от события до поиска составляет около 1 секунды в нашей настройке.
Вот некоторые документы по этой настройке: https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html и демонстрация интерфейса поиска Kibana с некоторыми живыми данными.
Ответ 2
Этот вопрос старый (декабрь 2014 года), но по-прежнему занимает высокое место во время поиска Google по этой теме.
Теперь Amazon предоставляет возможность сделать это через CloudWatch. Он имеет возможность сопоставлять шаблону с сообщением журнала и запускать аварийные сигналы на основе событий, происходящих в приложении. В зависимости от характера данных, которые необходимо выполнить, может быть возможно использовать их API для получения желаемых, совокупных событий. См. http://aws.amazon.com/blogs/aws/cloudwatch-log-service/
Ответ 3
Я использую Loggly и, похоже, трюк
http://loggly.com/
Он позволяет мне отправлять все мои журналы через tcp на свою службу и иметь центральное место для мониторинга всех моих файлов журнала,
Он также позволяет мне архивировать мои файлы журналов на S3, который тоже хорош.
Ответ 4
Я не пробовал это для этой цели, но Amazon, похоже, рекомендует использовать SimpleDB:
http://aws.amazon.com/simpledb/usecases_logging/
Вот пакет, который вам может пригодиться - он говорит, что вы можете использовать его для захвата stdout/stderr в SimpleDB:
http://code.google.com/p/simpledb-appender/
Ответ 5
Посмотрите бесплатную версию Splunk - она будет обрабатывать коллекцию файлов удаленных журналов, а также даст вам действительно хороший инструменты поиска и анализа.
Ответ 6
Использовать syslog-ng, популярный инструмент, который передает сообщения журнала через TCP, факультативно зашифрованный.
http://www.balabit.com/network-security/syslog-ng/
Ответ 7
Я еще не реализовал его, но я столкнулся с Facebook Scribe, и это кажется хорошей идеей. https://github.com/facebookarchive/scribe
Пока я получаю это, я делаю то, что вы упоминаете для # 1 - у меня есть задание cron, которое использует sftp для вытягивания файлов. Я выбрал это, потому что, даже если я сделал # 2, у меня были экземпляры, где машина ec2 сработала, и мне все равно пришлось вытаскивать лог файлы.
Ответ 8
* Отказ от ответственности: я работаю в Сумо:
Sumo Logic Free - относительно простой вариант:
https://www.sumologic.com/pricing/