Ответ
В DevOps-практике логи визуализируют с помощью централизованных систем, которые агрегируют, индексируют и предоставляют интерфейс для поиска и построения графиков. Я чаще всего работаю со стеком ELK (Elasticsearch, Logstash/Fluentd, Kibana) и Grafana + Loki.
1. ELK-стек (классический подход):
- Fluentd / Logstash (Data Shipper): Собирает логи с нод (из
/var/log/containers/*.logв k8s), парсит их (например, из JSON) и обогащает метаданными (pod name, namespace). - Elasticsearch (Storage & Index): Принимает структурированные логи, индексирует их для быстрого поиска.
- Kibana (Visualization): Позволяет создавать дашборды с фильтрами по полям, временными графиками и агрегациями.
Пример дашборда в Kibana: Можно отобразить количество ошибок (уровень ERROR) по разным микросервисам за последний час, сгруппировав по полю kubernetes.container.name.
2. Grafana + Loki (легковесная альтернатива): Loki индексирует только метаданные логов (метки), а сами логи хранит в виде сжатого текста. Это делает его более экономичным. Запросы выполняются с помощью LogQL.
# В Grafana, используя источник данных Loki:
# Показать логи с уровнем ERROR из неймспейса production
{namespace="production"} |= "ERROR"
# Посчитать количество логов по уровню за 5-минутные интервалы
rate({container="app"} |~ "(ERROR|WARN|INFO)" [5m])
3. Для ad-hoc анализа на сервере я использую стандартные утилиты:
# Поиск ошибок в последних 1000 строках лога
tail -1000 /var/log/syslog | grep -i error
# Анализ JSON-логов (например, от structured logging)
cat app.log | jq '. | select(.level == "ERROR") | .message'
# Мониторинг лога в реальном времени с фильтрацией
tail -f /var/log/nginx/access.log | awk '$9 == 500 {print $0}'
Выбор решения зависит от объема данных, требований к скорости поиска и бюджета.
Ответ 18+ 🔞
А, ну вот, про логи поговорить хочешь? Ну это, блядь, святое дело, без этого нихуя не сделаешь. Сидишь такой, а у тебя сервис накрылся медным тазом, и ты нихуя не понимаешь, почему. Вот тут и начинается самое интересное — охота за строчками в этих ебуч