Pull to refresh

Comments 22

Спасибо за статью, приятно видеть, что ELK стек активно развивается.
Я еще не пробовал filebeat, но у меня сразу возникают два вопроса:
1 — если будет рестарт filebeat, то как он узнает с какого места перечитывать файл? Или же он снова начнет отправлять все файлы?
2 — Вы сказали, что logstash не должен отвечать за доставку данных и этим должен заниматься filebeat. Но не объяснли — почему? :)
Он хранит состояние работы и в частности смещение файла до которого он уже отправил данные
2 — Вы сказали, что logstash не должен отвечать за доставку данных и этим должен заниматься filebeat. Но не объяснли — почему? :)

Logstash может выступать в качестве шиппера логов, конечно, но футпринт, мягко говоря, значительный. Написан на JRuby, требует целую JVM и гору памяти. Ставить такого монстра на каждый хост — лучше ресурсы веб-серверу или аппликухе отдать… А вот filebeat — это наследник logstash-forwarder (экс. lumberjack) — написан на Go, быстрый, портабельный (один бинарник) и нетребовательный к ресурсам. Что еще надо от агента?

Здравствуйте. Ответ на вопрос 1: filebeat ведет свой реестр, чтобы знать где было последнее чтение. Можно посмотреть здесь: https://www.elastic.co/guide/en/beats/filebeat/current/_updating_the_registry_file.html
Ответ на вопрос 2: Даже если посмотреть на сайт https://www.elastic.co то в разделении по продуктам вы увидете, что logstash занимается своими задачами, а доставка данных вынесена в отдельные сервисы. Этих сервисов у вас может быть много, а сервер обработки данных 1.
Вообще не понял, где тут ELK контейнер?
Вот тут https://github.com/sqshq/ELK-docker отличный docker-compose для сбора ELK.
Прежде чем строить ELK инфраструктуру настоятельно рекомендую оценить потянет ли она ваши объемы логирования и во что выльется поддержка. Я уже больше года пытаюсь приручить этого зверя (в частности для логирования из контейнеров) и на данный момент принято решение отказаться от ELK, использовать обычный syslog, логи загружать в hadoop и анализировать уже там. Для отслеживания ситуации в реальном времени использовать стриминг on demand возможно с минимальной фильтрацией. ELK не взлетел, хотя мы очень старались.
Расскажите подробнее. Стоит такая же задача.
Почему приняли решение отказаться?
Производительность сильно упала по сравнению с syslog? Что, если в ELK отправлять не всё подряд, а наиболее значимую информацию?

для отслеживания ситуации в реальном времени использовать стриминг on demand

Как вы это реализуете и с помощью чего?
Вот мои предыдущие комментарии на эту тему:

https://habrahabr.ru/company/uteam/blog/278729/#comment_8799489
https://habrahabr.ru/post/275815/#comment_8751947

Кратко подытоживая: причины отказа низкая производительность, плохое масштабирование и проблемы со стабильностью. На данный момент у меня кластер А 10 машин (каждая машина 24 ядра 48 гб памяти) с трудом тянет 15к логов в секунду. На кластере Б памяти 128 гб на машину, что дает порядка 50к логов в секунду. Это при дневных индексах, 7-ми дневно ретеншене и около 1000 шард на кластер А, около 3000 шард на кластер Б. Если переключится на часовые индексы и снизить ретеншен до 3-х дней количество шард на кластере Б поднимается до 25к и он начинает падать с завидной периодичностью. У всех машин стоит по 4 диска 1.8тб. На кластере А количество документов около 7г и диски заняты от 26% до 45%, на кластере Б документов около 3.5г, диски заняты от 9% до 14%. Полный траффик логов у меня 130 логов/с, что значит мне нужно кластер А расширить до как минимум 200 машин, что будет 2 миллиона долларов только на покупку железа, обслуживание встанет в отдельные деньги. Глядя на подобные суммы начинаешь уже задумываться о спланке, который безумно дорог, но тебе вообще не надо думать об инфраструктуре.

Real time log streaming пока в стадии обдумывания. Самое простое решение, которое на данный момент обсуждается, это логировать все в локальные файлы на лог сервере с очень короткой ротацией и tail-ом отдавать их по http возможно фильтруя grep-ом. Но это предварительно, возможно все будет сложнее.

Отвечая на ваш вопрос об ограничении трафика в ELK: да, на маленьких объемах все работает нормально. Только вот объяснить людям, что не надо лить в логи все подряд (у меня был прецедент, когда начали заливали целиком http ответы, каждый log entry был за 100к) задача крайне не простая. И опять же мое крайне субъективное мнение: когда кто-то требует ELK утверждая, что только так он может гарантировать нормальную работу своего сервиса скорее всего что-то сильно не так с самим сервисом.
Интересный опыт, спасибо. Подскажите, а к какому решению в итоге пришли? Что занимается сбором/агрегацией потока логов у вас?
В настоящий момент scribe, но ведется работа над новой инфраструктурой, пока, к сожалению, стадия дизайна-обсуждений.
Буду с нетерпением ждать результатов на хабре. Надеюсь они будут :)
Было бы круто, если бы вы подробнее описали конкретные проблемы, с которыми столкнулись. Особенно те, что повлияли на решение об отказе.
Прошло много времени, но может вы поделитесь инструкцией как вы использовали обычный syslog, логи загружали в hadoop и анализировали уже там? Спасибо
К сожалению приоритеты поменялись и этот проект был заморожен. В качестве компромиса тем, кто очень хотел ELK разрешили использовать ELK в aws. Это дорого, но как минимум на нас не лежит ответственность за поддержку.

у sebp/elk есть один минус — до недавнего времени он не использовал тэги, кроме latest. Сейчас с этим чуть лучше. Мы на эти грабли наступили однажды, когда latest переключился на новый logstash, который стал несовместим с нашими конфигами. Рекомендую в продакшене использовать не один контейнер, а три, примерно по такой схеме:


logstash:
  image: logstash:2.1.1
  links:
    - elasticsearch
elasticsearch:
  image: elasticsearch:2.2.2
kibana:
  image: kibana:4.3.1
  ports:
    - 5601:5601
  links:
    - elasticsearch

Тоже пользуемся ELK стеком. У меня на гитхабе есть докер-компоуз конфигурация с ELK и куратором (для регулярного удаления устаревших индексов, выполнения optimize итп), автоматической настройкой темплейтов Логстеша для Эластиксерча (по всем битсам) — может кому пригодится.


На текущем проекте в проде используем именно такую конфигурацию с небольшой кастомизацией. На наших объемах все работает хорошо.


Почему вы решили весь ELK стек положить в один контейнер? Это ведь противоречит одной из главных идей Докера — один процесс на контейнер, со всеми вытекающими плюсами.

Полностью с вами согласен о разделении «сервис- контейнер», но здесь я имею в виду именно быстрый старт с использованием уже готовых контейнеров для исследования гипотезы подходит вам это решение или нет.
Например в моем случае стояла цель сделать прототип, показать коллегам и получить добро на внедрение в продуктив.
Насколько мне известно, то Rsyslog умеет напрямую писать в Elasticsearch. И более того, говорят, он умеет добавлять дополнительные поля и другие штуки логстеша. Кто-то тестировал такое?
Sign up to leave a comment.

Articles