Установка и защита Grafana в Ubuntu 18.04

Grafana – это открытый инструмент для мониторинга и визуализации данных, который интегрируется со сложными данными из таких источников, как PrometheusInfluxDBGraphite и ElasticSearch. Grafana позволяет создавать оповещения и специальные фильтры, а также упрощает взаимодействие с другими членами команды с помощью встроенных функций совместного доступа.

В данном мануале вы научитесь устанавливать Grafana и защищать этот инструмент с помощью сертификата SSL и обратного прокси-сервера Nginx, а также менять настройки Grafana по умолчанию.

Читайте также:

Требования

1: Установка Grafana

Вы можете установить Grafana, загрузив пакет прямо с официального сайта проекта или из репозитория APT. Поскольку репозиторий APT упрощает установку и управление обновлениями для Grafana, мы будем использовать этот метод.

Читайте также: Основы управления пакетами: apt, yum, dnf, pkg

Хотя Grafana доступна в официальном репозитории пакетов Ubuntu 18.04, версия в нем может быть устаревшей, поэтому лучше использовать официальный репозиторий Grafana.

Загрузите GPG с помощью curl и перенаправьте вывод в apt-key.

Читайте также:

Это добавит ключ в список доверенных ключей APT и позволит вам загрузить и проверить подписанный GPG пакет Grafana.

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

В этой команде параметр -q отключает сообщения об обновлении статуса wget, а -O выводит файл, который вы загрузили в терминал. Благодаря этому в в apt-key попадет только содержимое загруженного файла.

Теперь добавьте репозиторий Grafana в список APT:

sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

Обновите кэш APT, чтобы обновить списки пакетов.

sudo apt update

Убедитесь, что Grafana будет установлена из своего репозитория:

apt-cache policy grafana

На выходе вы увидите версию Grafana, которая будет установлена, и откуда будет извлекаться пакет. Убедитесь, что версия для установки извлекается из официального репозитория Grafana по адресу https://packages.grafana.com/oss/deb.

grafana:
Installed: (none)
Candidate: 6.3.3
Version table:
6.3.3 500
500 https://packages.grafana.com/oss/deb stable/main amd64 Packages
...

Теперь можно установить инструмент:

sudo apt install grafana

Запустите сервер Grafana:

sudo systemctl start grafana-server

Убедитесь, что сервер запущен. Для этого проверьте статус:

sudo systemctl status grafana-server

Вы получите такой вывод:

grafana-server.service - Grafana instance
Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2019-08-13 08:22:30 UTC; 11s ago
Docs: http://docs.grafana.org
Main PID: 13630 (grafana-server)
Tasks: 7 (limit: 1152)
...

Вывод содержит информацию о процессе Grafana, включая состояние, идентификатор процесса (PID) и т. д. Если состояние сервиса не active (running),  просмотрите вывод и повторите предыдущие шаги, чтобы устранить проблему.

Затем добавьте сервис в автозагрузку:

sudo systemctl enable grafana-server

Вы увидите:

Synchronizing state of grafana-server.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.

Результат подтверждает, что systemd создала все нужные симлинки для автозапуска Grafana. Если вы получили сообщение об ошибке, следуйте инструкциям в терминале, чтобы устранить их, прежде чем продолжить.

2: Настройка обратного прокси-сервера

SSL-сертификат гарантирует защиту ваших данных путем шифрования всех соединений Grafana. Но для начала нужно перенастроить Nginx.

Откройте конфигурационный файл Nginx, созданный при настройке виртуального хоста Nginx для Let’s Encrypt.

sudo nano /etc/nginx/sites-available/your_domain

Найдите в нем такой блок:

...
location / {
try_files $uri $uri/ =404;
}
...

Поскольку Nginx уже поддерживает SSL и весь трафик уже проходит через Nginx, вам осталось только настроить Nginx для передачи запросов в Grafana, что по умолчанию работает через порт 3000.

Удалите строку try_files в этом блоке location и замените ее следующим кодом, который начинается с proxy_.

...
location / {
proxy_pass http://localhost:3000;
}
...

Теперь трафик будет проксироваться по правильным портам.

Сохраните и закройте файл.

Убедитесь, что в файле нет ошибок:

sudo nginx -t

Вывод должен сообщить, что синтаксис в порядке и проверка прошла успешно:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы получили сообщение об ошибках, следуйте инструкциям на экране, чтобы устранить их.

Чтобы изменения вступили в силу, перезагрузите Nginx.

sudo systemctl reload nginx

Теперь вы можете открыть страницу входа в систему Grafana по умолчанию. В веб-браузере перейдите по ссылке https://example.com. Если вы не можете получить доступ к Grafana, убедитесь, что брандмауэр поддерживает трафик по порту 443, а затем проверьте предыдущие инструкции.

3: Обновление учетных данных

В каждой стандартной установке Grafana используются одни и те же учетные данные, потому на начальном этапе нужно обновить их – это очень важно для безопасности.

Откройте в браузере https://your_domain. Вы увидите страницу входа по умолчанию: на ней будет логотип Grafana, форма с просьбой ввести имя пользователя и пароль, кнопка Log in и ссылка  «Forgot your password?».

Введите admin в поля User и Password, а затем нажмите кнопку Log in.

На следующем экране вам будет предложено выбрать новый пароль.

Придумайте надежный пароль, введите его в поле New password и Confirm new password.

Теперь можно нажать Save, чтобы сохранить изменения, или Skip, чтобы пропустить этот шаг. Если вы нажмете Skip, программа предложит вам изменить стандартный пароль при следующем входе.

Чтобы защитить свой экземпляр Grafana, нажмите Save. Вы вернетесь на страницу Home Dashboard.

4: Отключение регистрации и анонимного доступа к Grafana

Grafana предоставляет параметры, позволяющие посетителям создавать аккаунты и просматривать дашборды без регистрации. Поскольку Grafana доступна в интернете, эти функции делают вашу установку уязвимой. Однако если Grafana недоступна в Интернете или не работает с конфиденциальными данными, вы можете не блокировать их.

Откройте главный конфигурационный файл Grafana:

sudo nano /etc/grafana/grafana.ini

Найдите директиву allow_sign_up под заголовком [users].

...
[users]
# disable user signup / registration
;allow_sign_up = true
...

Если директива имеет значение true, она добавляет на экран входа кнопку Sign Up, а это позволяет пользователям регистрироваться и получать доступ к Grafana.

Значение false удаляет кнопку Sign Up и повышает безопасность Grafana.

Если вы не хотите разрешать анонимным посетителям регистрироваться, раскомментируйте эту директиву, удалив точку с запятой в начале строки, а затем установите значение false.

...
[users]
# disable user signup / registration
allow_sign_up = false
...

Найдите директиву enabled под заголовком [auth.anonymous].

...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

Значение true в этой директиве дает незарегистрированным пользователям возможность получить доступ к вашему дашборду. Значение false ограничивает доступ, и дашборд смогут использовать только зарегистрированные пользователи.

Если вы хотите запретить анонимный доступ к дашбордам, раскомментируйте эту директиву, а затем установите значение false.

...
[auth.anonymous]
enabled = false
...

Сохраните и закройте файл.

Перезапустите сервер Grafana:

sudo systemctl restart grafana-server

Чтобы убедиться, что все работает, проверьте состояние Grafana:

sudo systemctl status grafana-server

Как и раньше, в выводе вы увидите active (running). Если это не так, просмотрите сообщения терминала для получения дополнительной справки.

Теперь откройте в браузере https://your_domain, чтобы убедиться, что кнопка Sign Up исчезла и вы не можете войти в систему без учетных данных.

Если вы видите кнопку Sign Up или можете анонимно войти в систему, повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить работу.

На данный момент Grafana полностью настроена и готова к использованию.

5: Настройка приложения OAuth GitHub (опционально)

В качестве альтернативы можно настроить аутентификацию Grafana через GitHub – это предоставит доступ к установке всем членам зарегистрированной организации GitHub. Это особенно полезно, если вы хотите дать другим разработчикам возможность участвовать в развитии проекта, не создавая при этом индивидуальных учетных данных Grafana для каждого из них.

Войдите в аккаунт вашей организации на GitHub и перейдите на страницу профиля, https://github.com/settings/profile.

Кликните по названию организации под Organization settings в меню навигации слева.

На следующем экране вы увидите Organization profile, где вы можете изменить параметры, такие как отображаемое имя, адрес электронной почты и URL-адрес организации.

Поскольку для аутентификации пользователей через GitHub Grafana использует OAuth – открытый стандарт для предоставления доступа сторонним пользователям к локальным ресурсам – вам нужно создать новое приложение OAuth в GitHub.

Кликните по ссылке OAuth Apps в Developer settings в нижнем левом углу.

Если у вас еще нет приложений OAuth, связанных с вашей организацией в GitHub, вы увидите сообщение No Organization Owned Applications. В противном случае вы увидите список приложений OAuth, уже подключенных к вашей учетной записи.

Нажмите кнопку Register an application, чтобы продолжить.

На следующем экране укажите следующие данные об установке Grafana:

  • Application Name –уникальное имя приложения, которое поможет вам отличить его от других приложений OAuth.
  • Homepage URL – эта ссылка помогает GitHub найти Grafana (введите сюда https://your_domain, где your_domain – ваш домен).
  • Application Description – краткое описание приложения OAuth, помогает определить его цель.
  • Application callback URL – это адрес, по которому пользователи будут отправляться после успешной аутентификации. Для Grafana это поле должно содержать ссылку https://example.com/login/github.

Имейте в виду, пользователи Grafana, входящие в систему через GitHub, будут видеть значения, введенные вами в первые три предыдущих поля, поэтому обязательно введите в них соответствующую информацию.

Заполнив форму, нажмите кнопку Register application.

Вы будете перенаправлены на страницу, на которой будут ключи Client ID и Client Secret, связанные с новым приложением OAuth. Запишите эти значения – позже их нужно будет добавить в главный конфигурационный файл Grafana.

Важно! Ключи Client ID и Client Secret нужно хранить в секрете, так как злоумышленники могут использовать их для атак.

6: Настройка Grafana для поддержки аутентификации OAuth (опционально)

Откройте главный конфигурационный файл Grafana:

sudo nano /etc/grafana/grafana.ini

Найдите заголовок [auth.github] и раскомментируйте этот раздел, удалив точку с запятой в начале каждой строки, кроме команды team_ids=, которую мы не будем использовать в этом мануале.

Затем настройте Grafana для поддержки аутентификации GitHub. Для этого нужно указать ключи client_id и client_secret.

  • Установите в enabled и allow_sign_up значение true. Это включит поддержку аутентификации GitHub и разрешит членам организации создавать собственные учетные записи. Обратите внимание, этот параметр отличается от свойства allow_sign_up в разделе [users], который вы изменили на шаге 4.
  • Укажите client_id и client_secret, полученные вами при создании приложения GitHub OAuth.
  • В allowed_organizations укажите имя вашей организации, чтобы гарантировать, что только члены вашей организации могут зарегистрироваться и войти в Grafana.

В результате конфигурация будет выглядеть так:

...
[auth.github]
enabled = true
allow_sign_up = true
client_id = your_client_id_from_github
client_secret = your_client_secret_from_github
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
;team_ids =
allowed_organizations = your_organization_name
...

Теперь Grafana знает о приложении GitHub все, что нужно, но для завершения настройки вам необходимо включить перенаправление. Это делается путем установки значения root_url под заголовком [server].

...
[server]
root_url = https://your_domain
...

Сохраните и закройте файл

Перезапустите Grafana:

sudo systemctl restart grafana-server

Убедитесь, что сервис запущен:

sudo systemctl status grafana-server

Если в выводе нет строки active (running),  обратитесь за помощью к сообщениям в терминале.

Теперь проверьте свою новую систему аутентификации по ссылке https://your_domain. Если вы уже вошли в Grafana, нажмите на маленький логотип Grafana в нижнем левом углу экрана, наведите указатель мыши на свое имя и нажмите Sign out в меню, которое появится рядом.

На странице входа в систему под оригинальной кнопкой Log in вы увидите новый раздел, где будет кнопка GitHub с логотипом GitHub.

Нажмите на эту кнопку для перенаправления на GitHub.

Затем нажмите зеленую кнопку Authorize your_github_organization.

Примечание: Убедитесь, что ваша учетная запись GitHub является членом вашей заявленной организации, а ваш адрес электронной почты Grafana совпадает с электронной почтой GitHub. Если вы попытаетесь пройти аутентификацию с учетной записью GitHub, которая не является членом заявленной организации, вы получите сообщение Login Failed:

User not a member of one of the required organizations

Если учетная запись GitHub является членом заявленной организации, а адрес электронной почты Grafana соответствует вашему адресу электронной почты GitHub, вы сможете войти в систему с помощью аккаунта Grafana.

Но если вы попробуете войти через учетную запись пользователя, у которого еще нет аккаунта Grafana, Grafana создаст новую учетную запись пользователя с разрешениями Viewer, благодаря чему новые пользователи смогут использовать только существующие дашборды.

Чтобы изменить разрешения по умолчанию для новых пользователей, откройте главный конфигурационный файл Grafana.

sudo nano /etc/grafana/grafana.ini

Найдите строку auto_assign_org_role под заголовком [users] и раскомментируйте ее.

Задайте этой директиве одно из этих значений:

  • Viewer – пользователи смогут работать только с существующими дашбордами.
  • Editor – пользователи смогут изменять существующие и создавать новые дашборды.
  • Admin – пользователь имеет права на любое действие.

...
[users]
...
auto_assign_org_role = Viewer
...

Сохраните изменения и перезапустите Grafana:

sudo systemctl restart grafana-server

Проверьте состояние сервиса:

sudo systemctl status grafana-server

Если состояние не active (running), исправьте ошибки, следуя подсказкам в терминале.

Заключение

Теперь у вас есть готовая к работе установка Grafana с настроенной аутентификацией.

На сайте проекта вы найдете список дашбордов (официальных и собранных сообществом). Также много полезного можно найти в документации Grafana.

Tags: , , ,