Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Логи: больше - лучше, 
но как же с этим жить?

Логи: больше - лучше, 
но как же с этим жить?

С ростом количества сервисов и нагрузки растет и объём логов. Рано или поздно для компании наступает момент, когда использовать такие инструменты как grep не целесообразно. На докладе вы узнаете, как мы переезжали с сервера на bash’е на elasticsearch для поиска по логам.

Avatar for Vladislav Senin

Vladislav Senin

April 05, 2019
Tweet

Other Decks in Programming

Transcript

  1. hh.ru: ожидание 2 СТО, нанимает первого тестировщика мой стул и


    половина стола столы для будущих сотрудников человек-ML, ищет вакансии
 для вас замаскированный
 MAC PRO
  2. hh.ru: реальность 3 front1 front2 frontN api hh m.hh backoffice

    … xmlback search relations session negotiations billing mailer salary-stat hh-test … …
  3. • более 150 инженеров • 2 дц • 50+ сервисов

    • 150+ машин, 780+ инстансов • терабайты логов в сутки • часовая ротация в сервисах • льются самописным демоном на отдельную машину и раскладываются по директориям • старее чем за сутки сжимаются xz Intro !4
  4. Просто по логам: • “дедовский” способ: grep/xzgrep По request id:

    • “особый” request id: timestamp+hash • бэк на bash+python и binary search по файлам • первый же ответ кэшируется на стороне nginx !7 Как будем что-то искать? Подробнее https://www.youtube.com/watch?v=8k2dPiUZXtI&t=1658s
  5. • масштабируемость • отказоустойчивость • временнóе ограничение для поиска по

    request id • grep/xzgrep по логам • дальнейшая обработка Проблемы !8
  6. Плюсы: • быстрый полнотекстовый поиск • масштабируемость и отказоустойчивость •

    уже был удачный опыт эксплуатации elasticsearch Минусы: • накладные расходы на индексацию • эксплуатационная поддержка еще n сервисов Elasticsearch! !9
  7. • 3 инстанса • 2x Intel(R) Xeon(R) CPU E5-2640 v4

    @ 2.40GHz x10/20 • диски 12x8Tb 7200 rpm • по 128 Gb RAM на машинах А что по железу? !10
  8. Плюсы: • все слышали, юзают - мейнстрим Минусы: • под

    logstash нужно дополнительное железо • logstash - хороший сервис, жаль не работает ELK: elasticsearch + logstash + kibana !11
  9. Плюсы: • filebeat легковесный и надёжный демон для доставки логов

    • elasticsearch ingest API: гибко, меньшие накладные расходы по сравнению с logstash Минусы: • теперь всё делает elastic, следовательно больше нагрузки на cpu EF: elasticsearch + filebeat !12 Подробнее https://dzone.com/articles/elasticsearch-ingest-node-vs-logstash-performance-2
  10. raw logs: 2019-04-03 17:10:02.372+0300 127.0.0.1 - GET 200 2 noRequestId

    /status structured logs: {"ts":"2019-04-03 17:10:02.372+0300","cache":"-","method":"GET","ip":"127.0.0.1","time": 2,"rid":"noRequestId","uri":"/status","status":200} Structured logs !16
  11. Cоставим пример запроса: • простое совпадение по фразе • ограничим

    выдачу последним часом и 100 результатами • с обратной сортировкой по timestamp, т.к. хотим самые свежие логи • перечислим несколько полей, например: ts, hostname, lvl, msg, exception, rid, status и uri Окей, окей, но поискать-то теперь как? !18
  12. curl -X POST localhost:9211/ indexname/_search --data ‘{"size": 100,"query":{"bool":{"must": [{"match_phrase":{"msg": {"query":"some

    text","analyzer":"whitespace"}}}],"filter": {"range":{"ts":{"gte":"now-1h/ h","lte":"now/h"}}}}},"sort":[{"ts": {"order":"DESC"}}],"_source": ["ts","beat.hostname","lvl","msg","excep tion","rid","status","uri"]}' -H "Content- Type:application/json" Окей, окей, но поискать-то теперь как? !19 curl запрос ответ
  13. curl -X POST localhost:9211/ indexname/_search --data ‘{"size": 100,"query":{"bool":{"must": [{"match_phrase":{"msg": {"query":"some

    text","analyzer":"whitespace"}}}],"filter": {"range":{"ts":{"gte":"now-1h/ h","lte":"now/h"}}}}},"sort":[{"ts": {"order":"DESC"}}],"_source": ["ts","beat.hostname","lvl","msg","excep tion","rid","status","uri"]}' -H "Content- Type:application/json" Окей, окей, но поискать-то теперь как? !20 curl запрос ответ
  14. Идеальный вариант: • простой интерфейс • “склеивать” логи в удобный

    для чтения людьми формат • возможность доработки новых фич Хочется всё и сразу? !24
  15. • до 500к dps (document per second) на индексацию в

    пике, присутствует существенный запас по железу • масштабируемо и отказоустойчиво • поиск по логам стал значительно быстрее • простой интерфейс с дополнительными плюшками Итого !26
  16. • лить через kafka • trace id в приложениях и

    визуализация трассировки в elmo • прикрутить в помощь тестированию Что дальше? !27