Введение
В этом учебном руководстве вы узнаете, как использовать Grafana для настройки решения мониторинга вашего приложения, а также:
- Изучите метрики и журналы
- Создадите дашборды
- Аннотируете дашборды
- Настроите правила оповещения
Кроме того, вы можете посмотреть нашу серию «Grafana для начинающих», в которой мы обсуждаем фундаментальные концепции, помогающие начать работу с Grafana.
Предварительные требования
- Docker
- Docker Compose (входит в состав Docker for Desktop для macOS и Windows)
- Git
Tip
Кроме того, вы можете попробовать этот пример в нашей интерактивной среде обучения: Основы Grafana.
Это полностью настроенная среда, в которой уже установлены все зависимости.
Оставляйте отзывы, сообщайте об ошибках и создавайте задачи в репозитории Grafana Killercoda.
Настройка примера приложения
В этом учебном руководстве используется пример приложения для демонстрации некоторых функций Grafana. Чтобы выполнить упражнения из этого руководства, вам нужно загрузить файлы на локальный компьютер.
На этом шаге вы настроите пример приложения, а также вспомогательные службы, такие как Loki.
Примечание: Prometheus, популярная база данных временных рядов (TSDB), уже настроен как источник данных в рамках этого учебного руководства.
-
Клонируйте репозиторий github.com/grafana/tutorial-environment.
git clone https://github.com/grafana/tutorial-environment.git -
Перейдите в каталог, в который вы клонировали этот репозиторий:
cd tutorial-environment -
Убедитесь, что Docker запущен:
docker psОтсутствие ошибок означает, что он запущен. Если вы получили ошибку, запустите Docker и снова выполните команду.
-
Запустите пример приложения:
docker-compose up -dПри первом запуске
docker-compose up -dDocker загружает все необходимые для учебного руководства ресурсы. В зависимости от скорости вашего интернет-соединения это может занять несколько минут.Примечание: Если на вашей системе уже запущены Grafana, Loki или Prometheus, вы можете увидеть ошибки, потому что Docker-образ пытается использовать порты, которые уже заняты вашими локальными установками. Остановите службы, а затем снова выполните команду.
-
Убедитесь, что все службы запущены и работают:
docker-compose psВ столбце State для всех служб должно быть указано
Up. -
Откройте пример приложения по адресу http://localhost:8081.
Grafana News
Пример приложения Grafana News позволяет публиковать ссылки и голосовать за понравившиеся.
Чтобы добавить ссылку:
-
В поле Title введите Example.
-
В поле URL введите https://example.com.
-
Нажмите Submit, чтобы добавить ссылку.
Ссылка появится в списке под заголовком Grafana News.
Чтобы проголосовать за ссылку, нажмите значок треугольника рядом с названием ссылки.
Открытие Grafana
Grafana — это платформа с открытым исходным кодом для мониторинга и наблюдения, которая позволяет визуализировать и исследовать состояние ваших систем.
- Откройте новую вкладку.
- Перейдите по адресу http://localhost:3000.
Note
Эта демонстрация не требует страницы входа или учётных данных. Однако если вы решите установить Grafana локально, вам нужно войти и предоставить учётные данные. В этом случае имя пользователя и пароль по умолчанию —
admin.
Первое, что вы увидите, — это главный дашборд, который поможет вам начать работу.
В левом верхнем углу вы видите значок меню. Нажатие на него открывает боковое меню, главное меню для навигации по Grafana.
Изучение ваших метрик
Grafana Explore — это рабочий процесс для устранения неполадок и исследования данных. На этом шаге вы будете использовать Explore для создания ad-hoc запросов, чтобы понять метрики, предоставляемые примером приложения. В частности, вы изучите запросы, полученные примером приложения.
Ad-hoc запросы — это запросы, выполняемые интерактивно с целью исследования данных. За ad-hoc запросом обычно следует другой, более конкретный запрос.
-
Нажмите значок меню и в боковом меню нажмите Explore. В левой верхней части находится раскрывающееся меню со списком доступных источников данных. Источник данных Prometheus уже должен быть выбран. Если нет, выберите Prometheus.
-
Убедитесь, что вы находитесь в режиме кода, проверив переключатель Builder/Code в правом верхнем углу панели запросов.
-
В редакторе запросов, где написано Enter a PromQL query…, введите
tns_request_duration_seconds_countи нажмите Shift + Enter. Появится график. -
В правом верхнем углу нажмите стрелку раскрывающегося списка на кнопке Run Query, а затем выберите 5s. Grafana выполняет ваш запрос и обновляет график каждые 5 секунд.
Вы только что сделали свой первый запрос PromQL! PromQL — мощный язык запросов, который позволяет выбирать и агрегировать данные временных рядов, хранящиеся в Prometheus.
tns_request_duration_seconds_count— это счётчик (counter), тип метрики, значение которой только увеличивается. Вместо визуализации фактического значения вы можете использовать счётчики для вычисления скорости изменения, то есть того, насколько быстро растёт значение. -
Добавьте функцию
rateв ваш запрос, чтобы визуализировать скорость запросов в секунду. Введите следующее в редакторе запросов, а затем нажмите Shift + Enter.rate(tns_request_duration_seconds_count[5m])Непосредственно под графиком есть область, в которой перечислен каждый временной ряд с цветным значком рядом с ним. Эта область называется легендой.
PromQL позволяет группировать временные ряды по их меткам, используя оператор агрегации
sum. -
Добавьте оператор агрегации
sumв ваш запрос, чтобы группировать временные ряды по маршруту:sum(rate(tns_request_duration_seconds_count[5m])) by(route) -
Вернитесь в пример приложения и создайте некоторый трафик, добавляя новые ссылки, голосуя или просто обновив браузер.
-
Вернувшись в Grafana, в правом верхнем углу нажмите выбор времени и выберите Last 5 minutes. Приблизив последние несколько минут, легче увидеть, когда вы получаете новые данные.
В зависимости от вашего варианта использования вы можете захотеть группировать по другим меткам. Попробуйте группировать по другим меткам, таким как status_code, изменив часть by(route) запроса на by(status_code).
Добавление источника данных журналов
Grafana поддерживает источники данных журналов, такие как Loki. Как и для метрик, сначала нужно добавить ваш источник данных в Grafana.
- Нажмите значок меню и в боковом меню нажмите Connections, а затем Data sources.
- Нажмите + Add new data source.
- В списке источников данных нажмите Loki.
- В поле URL введите
http://loki:3100. - Прокрутите страницу вниз и нажмите Save & Test, чтобы сохранить изменения.
Вы должны увидеть сообщение «Data source successfully connected». Теперь Loki доступен как источник данных в Grafana.
Изучение ваших журналов
Grafana Explore позволяет не только делать ad-hoc запросы для метрик, но и исследовать ваши журналы.
-
Нажмите значок меню и в боковом меню нажмите Explore.
-
В списке источников данных вверху выберите источник данных Loki.
-
Убедитесь, что вы находитесь в режиме кода, проверив переключатель Builder/Code в правом верхнем углу панели запросов.
-
Введите следующее в редакторе запросов, а затем нажмите Shift + Enter:
{filename="/var/log/tns-app.log"} -
Grafana отображает все журналы в файле журнала примера приложения. Высота каждой полосы на графике кодирует количество журналов, сгенерированных в это время.
-
Нажмите и перетащите курсор по полосам на графике, чтобы отфильтровать журналы по времени.
Loki позволяет фильтровать журналы не только по меткам, но и по конкретным вхождениям.
Давайте сгенерируем ошибку и проанализируем её с помощью Explore.
-
В примере приложения опубликуйте новую ссылку без URL, чтобы сгенерировать ошибку в браузере с текстом
empty url. -
Вернитесь в Grafana и введите следующий запрос, чтобы отфильтровать строки журнала по подстроке:
{filename="/var/log/tns-app.log"} |= "error" -
Нажмите на строку журнала с текстом
level=error msg="empty url", чтобы увидеть больше информации об ошибке.Примечание: Если вы находитесь в режиме Live, нажатие на журналы не показывает больше информации об ошибке. Вместо этого остановите и выйдите из живого потока, а затем нажмите на строку журнала там.
Журналы полезны для понимания того, что пошло не так. Позже в этом руководстве вы увидите, как можно сопоставить журналы с метриками из Prometheus, чтобы лучше понять контекст ошибки.
Создание дашборда
Дашборд даёт вам представление ваших данных с первого взгляда и позволяет отслеживать метрики с помощью различных визуализаций.
Дашборды состоят из панелей, каждая из которых представляет часть истории, которую вы хотите рассказать своим дашбордом.
Каждая панель состоит из запроса и визуализации. Запрос определяет, какие данные вы хотите отобразить, а визуализация определяет, как эти данные отображаются.
-
Нажмите значок меню и в боковом меню нажмите Dashboards.
-
На странице Dashboards нажмите New в правом верхнем углу и выберите New Dashboard в раскрывающемся списке.
-
Нажмите + Add visualization.
-
В открывшемся модальном окне выберите только что добавленный источник данных Prometheus.
-
На вкладке Query под графиком введите запрос из предыдущего раздела, а затем нажмите Shift + Enter:
sum(rate(tns_request_duration_seconds_count[5m])) by(route) -
В редакторе панели справа в разделе Panel options измените заголовок панели на «Traffic».
-
Нажмите Apply в правом верхнем углу, чтобы сохранить панель и вернуться к представлению дашборда.
-
Нажмите значок Save dashboard (дискета) в верхней части дашборда, чтобы сохранить дашборд.
-
Введите имя в поле Dashboard name, а затем нажмите Save.
Теперь у вас должна быть панель, добавленная в ваш дашборд.
Панель на дашборде Grafana
Аннотирование событий
Когда что-то идёт не так, часто помогает понимание контекста, в котором произошёл сбой. Время последнего развёртывания, изменения в системе или миграция базы данных могут дать представление о том, что могло вызвать простой. Аннотации позволяют представлять такие события непосредственно на ваших графиках.
В следующей части руководства мы смоделируем некоторые распространённые случаи, для которых кто-то добавил бы аннотации.
-
Чтобы вручную добавить аннотацию, нажмите в любом месте на линии графика, чтобы открыть всплывающую подсказку с данными, а затем нажмите Add annotation. Вы также можете нажать
CtrlилиCommandи нажать в любом месте графика, чтобы открыть диалоговое окно Add annotation. Примечание: возможно, вам сначала нужно сохранить дашборд. -
В поле Description введите Migrated user database.
-
Нажмите Save.
Grafana добавляет вашу аннотацию на график. Наведите указатель мыши на основание аннотации, чтобы прочитать текст.
Grafana также позволяет аннотировать временной интервал с помощью региональных аннотаций.
Добавьте региональную аннотацию:
- Нажмите и удерживайте Ctrl (или Cmd в macOS), затем нажмите и перетащите курсор по графику, чтобы выбрать область.
- В поле Description введите Performed load tests.
- В поле Tags введите testing.
- Нажмите Save.
Использование аннотаций для сопоставления журналов с метриками
Ручное аннотирование дашборда подходит для тех отдельных событий. Для регулярно происходящих событий, таких как развёртывание нового выпуска, Grafana поддерживает запрос аннотаций из одного из ваших источников данных. Давайте создадим аннотацию, используя источник данных Loki, который мы добавили ранее.
-
В верхней части дашборда нажмите значок Dashboard settings (шестерёнка).
-
Перейдите в Annotations и нажмите Add annotation query.
-
В поле Name введите Errors.
-
В поле Data source выберите Loki.
-
В поле Query введите следующий запрос:
{filename="/var/log/tns-app.log"} |= "error" -
Нажмите Apply. Grafana отображает список Annotations с вашей новой аннотацией.
-
Нажмите на название вашего дашборда, чтобы вернуться к вашему дашборду.
-
В верхней части вашего дашборда теперь есть переключатель для отображения результатов только что созданного запроса аннотации. Нажмите на него, если он ещё не включён.
-
Нажмите значок Save dashboard (дискета), чтобы сохранить изменения.
-
Чтобы проверить изменения, вернитесь в пример приложения, опубликуйте новую ссылку без URL, чтобы сгенерировать ошибку в браузере с текстом
empty url.
Строки журнала, возвращаемые вашим запросом, теперь отображаются как аннотации на графике.
Возможность объединять данные из нескольких источников данных на одном графике позволяет сопоставлять информацию из Prometheus и Loki.
Аннотации также очень хорошо работают вместе с правилами оповещения. В следующем и последнем разделе мы настроим правило оповещения для нашего приложения grafana.news, а затем запустим его. Это даст краткое введение в нашу новую платформу оповещения.
Создание правила оповещения под управлением Grafana
Правила оповещения позволяют выявлять проблемы в вашей системе через мгновение после их возникновения. Быстро выявляя непреднамеренные изменения в вашей системе, вы можете минимизировать перебои в работе ваших служб.
Новая платформа оповещения Grafana дебютировала в Grafana 8. Годом позже, в Grafana 9, она стала методом оповещения по умолчанию. На этом шаге мы создадим правило оповещения под управлением Grafana. Затем мы запустим наше новое правило оповещения и отправим тестовое сообщение на фиктивную конечную точку.
Самое базовое правило оповещения состоит из двух частей:
-
Точка контакта — точка контакта определяет, как Grafana доставляет экземпляр оповещения. Когда условия правила оповещения выполняются, Grafana уведомляет точки контакта или каналы, настроенные для этого правила оповещения.
Note
Экземпляр оповещения — это конкретное событие, соответствующее условию, определённому правилом оповещения, например, когда скорость запросов для конкретного маршрута внезапно возрастает.
Некоторые популярные каналы включают:
-
Правило оповещения — правило оповещения определяет одно или несколько условий, которые Grafana регулярно оценивает. Когда эти оценки соответствуют критериям правила, правило оповещения срабатывает.
Для начала давайте настроим точку контакта webhook. Как только у нас будет рабочая конечная точка, мы напишем правило оповещения и запустим уведомление.
Создание точки контакта для правил оповещения под управлением Grafana
На этом шаге мы создадим новую точку контакта. Эта точка контакта использует канал webhooks. Чтобы это заработало, нам также понадобится конечная точка для приёма уведомления об оповещении нашим каналом webhook. Мы можем использовать Webhook.site, чтобы быстро настроить эту тестовую конечную точку. Так мы сможем убедиться, что наш менеджер оповещений действительно отправляет уведомление куда-либо.
- Перейдите на Webhook.site.
- Скопируйте свой уникальный URL.
Ваша конечная точка webhook теперь ожидает первый запрос.
Далее настроим точку контакта в интерфейсе Alerting Grafana, чтобы отправлять уведомления на нашу конечную точку webhook.
-
Вернитесь в Grafana. В боковом меню Grafana наведите указатель на значок Alerting (колокольчик), а затем нажмите Manage Contact points.
-
Нажмите + Add contact point.
-
В поле Name введите Webhook.
-
В поле Integration выберите Webhook.
-
В поле URL вставьте конечную точку вашего webhook.
-
Нажмите Test, а затем Send test notification, чтобы отправить тестовое уведомление об оповещении на вашу конечную точку webhook.
-
Вернитесь к конечной точке webhook, которую вы создали ранее. Слева теперь появилась запись
POST /. Нажмите на неё, чтобы увидеть, какую информацию отправила Grafana. -
Вернитесь в Grafana и нажмите Save contact point.
Теперь мы создали тестовую конечную точку webhook и создали новую точку контакта Alerting в Grafana. Теперь мы можем создать правило оповещения и привязать его к этому новому каналу.
Добавление правила оповещения в Grafana
Теперь, когда Grafana знает, как нас уведомлять, пришло время настроить правило оповещения:
-
В боковом меню Grafana наведите указатель на значок Alerting (колокольчик), а затем нажмите Alert rules.
В этом учебном руководстве мы используем расширенные параметры для создания правила оповещения под управлением Grafana. Расширенные параметры позволяют нам определять запросы, выражения (используемые для обработки данных) и условие, которое должно быть выполнено для срабатывания оповещения (условие по умолчанию — это порог).
-
Нажмите + New alert rule.
-
В Section 1 назовите правило
fundamentals-test. -
В Section 2 переключите кнопку Advanced options.
-
Найдите поле query A и выберите ваш источник данных Prometheus.
-
Введите тот же запрос Prometheus, который мы использовали в нашей более ранней панели:
sum(rate(tns_request_duration_seconds_count[5m])) by(route) -
Оставьте выражения B и C как есть. Эти выражения (Reduce и Threshold соответственно) включаются по умолчанию при создании нового правила. Введите
0.2в качестве порогового значения. Подробнее о запросах и условиях можно прочитать здесь. -
Прокрутите вниз до конца раздела #2 и нажмите кнопку Preview. Вы должны увидеть возвращённые данные.
-
В Section 3 в поле Folder создайте новую папку, нажав
New folderи введя имя папки. Эта папка будет содержать наши правила оповещения. Например:fundamentals. Затем нажмитеcreate. -
В поле Evaluation group повторите описанный выше шаг, чтобы создать новую. Назовите её тоже
fundamentals. -
Выберите Evaluation interval (как часто оценивается правило оповещения). Например, каждые
10s(10 секунд). -
Установите период ожидания. Это время, в течение которого должно выполняться условие, прежде чем экземпляр оповещения перейдёт в состояние Firing и будет отправлено уведомление. Введите
0s. Для целей этого учебного руководства интервал оценки намеренно сделан коротким. Это упрощает тестирование. Эта настройка заставляет Grafana ждать, пока экземпляр оповещения не сработает в течение заданного времени, прежде чем Grafana отправит уведомление. -
В Section 4 выберите Webhook в качестве Contact point.
-
Нажмите Save rule and exit в верхней части страницы.
Срабатывание правила оповещения под управлением Grafana
Теперь мы настроили правило оповещения и точку контакта. Давайте посмотрим, сможем ли мы запустить правило оповещения под управлением Grafana, создав некоторый трафик на нашем примере приложения.
- Перейдите на localhost:8081.
- Добавьте новый заголовок и URL, многократно нажимайте кнопку голосования или обновите страницу, чтобы создать всплеск трафика.
Как только запрос sum(rate(tns_request_duration_seconds_count[5m])) by(route) вернёт значение больше 0.2, Grafana запустит наше правило оповещения. Перейдите к конечной точке webhook, которую мы создали ранее, и найдите отправленное уведомление об оповещении Grafana с деталями и метаданными.
Note
Правило оповещения может быть запущено конечной точкой
/metrics, к которой Grafana часто обращается при получении метрик из приложения. Если это произойдёт, вы можете увеличить значение Threshold в Section 2 для целей тестирования.
Отображение правил оповещения под управлением Grafana на вашем дашборде
В большинстве случаев также полезно отображать экземпляры оповещений Grafana как аннотации на вашем дашборде. Посмотрите видеоурок ниже, чтобы узнать, как отображать оповещение на вашем дашборде.
Давайте посмотрим, как это можно настроить.
-
В боковом меню Grafana наведите указатель на значок Alerting (колокольчик), а затем нажмите Alert rules.
-
Разверните папку
fundamentals > fundamentals, чтобы просмотреть созданное нами правило оповещения. -
Нажмите значок Edit и прокрутите вниз до Section 5.
-
Нажмите кнопку Link dashboard and panel и выберите дашборд и панель, к которым вы хотите добавить экземпляр оповещения в качестве аннотации.
-
Нажмите Confirm и Save rule and exit, чтобы сохранить все изменения.
-
В боковом меню Grafana перейдите к дашборду, нажав Dashboards и выбрав созданный вами дашборд.
-
Чтобы проверить изменения, выполните действия, описанные в разделе Срабатывание правила оповещения под управлением Grafana.
Теперь вы должны увидеть красный разбитый значок сердца рядом с названием панели, указывающий, что правило оповещения было запущено. Также отображается аннотация для экземпляра оповещения, представленная вертикальной красной линией.
Отображение правил оповещения под управлением Grafana на дашборде
Tip
В Начало работы с Grafana Alerting — часть 2 вы можете повысить свои навыки, изучив экземпляры оповещений и маршрутизацию уведомлений.
Резюме
В этом учебном руководстве вы узнали о фундаментальных функциях Grafana. Для этого мы запустили несколько Docker-контейнеров на вашей локальной машине. Когда вы будете готовы очистить эту локальную среду учебного руководства, выполните следующую команду:
docker-compose down -v
Дополнительные сведения
Ознакомьтесь со ссылками ниже, чтобы продолжить изучение стека LGTM Grafana.
