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

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

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

Требования

  • Сервер Ubuntu 16.04, настроенный по этому мануалу.
  • Полностью зарегистрированное доменное имя (здесь для примера используется example.com).
  • DNS-записи А для example.com и www.example.com, направленные на внешний IP-адрес вашего сервера. Больше информации в мануале Как настроить имя хоста.
  • Веб-сервер Nginx, установленный по мануалу Установка Nginx в Ubuntu 16.04.
  • Виртуальный хост Nginx (создать такой можно с помощью руководства Создание сертификата Let’s Encrypt для виртуального хоста Nginx в Ubuntu 16.04).
  •  Опционально: для настройки аутентификации GitHub нужен аккаунт организации на GitHub.

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

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

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

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

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

Читайте также: Шифрование и подпись сообщений с помощью GPG

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

curl https://packagecloud.io/gpg.key | sudo apt-key add -

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

sudo add-apt-repository "deb https://packagecloud.io/grafana/stable/debian/ stretch main"

Примечание: Хотя этот мануал написан для Ubuntu 16.04, packagecloud предоставляет только пакеты Debian, Python, RPM и RubyGem. Вы можете использовать репозиторий для Debian, поскольку пакет Grafana, который он содержит, подходит и для Ubuntu. Просто используйте репозиторий stretch для получения последней версии Grafana.

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

sudo apt-get update

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

apt-cache policy grafana

На выходе вы увидите, какая версия будет установлена и откуда будет извлекаться пакет. Убедитесь, что версия для установки будет извлекаться из официального репозитория Grafana по адресу https://packagecloud.io/grafana/stable/debian.

grafana:
Installed: (none)
Candidate: 4.6.2
Version table:
4.6.2 500
500 https://packagecloud.io/grafana/stable/debian stretch/main amd64 Packages
...

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

sudo apt-get install grafana

Запустите Grafana:

sudo systemctl start grafana-server

Убедитесь, что Grafana запустилась:

sudo systemctl status grafana-server

Вывод содержит информацию о процессе Grafana, включая его состояние, идентификатор процесса (PID), использование памяти и т. д.

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

grafana-server.service - Grafana instance
Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2017-12-07 12:10:33 UTC; 19s ago
Docs: http://docs.grafana.org
Main PID: 14796 (grafana-server)
Tasks: 6
Memory: 32.0M
CPU: 472ms
CGroup: /system.slice/grafana-server.service
└─14796 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins
...

Добавьте сервис в автозагрузку:

sudo systemctl enable grafana-server

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

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.

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

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

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

sudo nano /etc/nginx/sites-available/example.com

Найдите этот блок:

...
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
...

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

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

...
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
...

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

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

sudo nginx -t

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

Наконец, активируйте изменения, перезагрузив Nginx.

sudo systemctl reload nginx

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

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

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

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

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

На следующем экране инструмент будет приветствовать вас в Home Dashboard. Здесь вы можете добавлять источники данных, а также создавать, просматривать и изменять дашборды.

Нажмите на маленький логотип Grafana в верхнем левом углу экрана, чтобы открыть главное меню приложения. Затем наведите мышь на кнопку admin, чтобы открыть дополнительный набор параметров меню. Нажмите кнопку Profile.

Теперь вы находитесь на странице User Profile, где вы можете изменить имя, адрес электронной почты и имя пользователя (Name, Email и Username), связанные с вашей учетной записью. Вы также можете обновить другие параметры: тему пользовательского интерфейса и пароль.

Введите свое имя, адрес электронной почты и имя пользователя, которое вы хотите использовать в поля Name, Email и Username соответственно, а затем нажмите кнопку Update в разделе Information, чтобы сохранить настройки.

Вы также можете изменить тему пользовательского интерфейса и часовой пояс в соответствии с вашими потребностями. Для этого измените параметры Theme и Timezone, а затем нажмите кнопку Update в разделе Preferences, чтобы сохранить изменения. Grafana предлагает темы интерфейса Dark и Light, а также тему Default (по умолчанию это Dark).

Наконец, измените пароль, связанный с вашей учетной записью, нажав кнопку Change Password в нижней части страницы. Это откроет страницу для смены пароля.

Введите текущий пароль (admin) в поле Old Password, а затем введите пароль, который вы хотите использовать, в поля New Password и Confirm Password.

Нажмите Change Password, чтобы сохранить новую информацию, или нажмите Cancel, чтобы отказаться от изменений.

После этого вы вернетесь на страницу User Profile, где вы увидите зеленый квадратик в верхнем правом углу экрана – в нем говорится, что пароль пользователя изменен (User password changed).

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://example.com, чтобы убедиться, что кнопка 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.
  • 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://example.com
...

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

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

sudo systemctl restart grafana-server

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

sudo systemctl status grafana-server

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

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

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

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

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

Если вы попытаетесь пройти аутентификацию с учетной записью 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 как часть стека мониторинга системы, читайте мануалы:

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

Tags: , ,