Как установить и настроить систему мониторинга Graphite в Ubuntu 22.04
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите необходимые пакеты
- Шаг 3. Установите Graphite и Graphite Web
- Шаг 4. Установка и настройка PostgreSQL
- Шаг 5. Настройка Graphite Carbon и Web
- Настроить углерод
- Настройка Graphite Web
Graphite — это инструмент с открытым исходным кодом, используемый для отслеживания и построения графиков производительности компьютерных систем. Вы можете использовать его для отслеживания производительности веб-сайтов, приложений, бизнес-служб и сетевых серверов. Он отличается высокой гибкостью и может быть настроен таким образом, чтобы вы могли воспользоваться преимуществами как подробного представления, так и широких обзоров производительности и работоспособности отслеживаемых вами показателей.
Graphite состоит из нескольких компонентов: веб-приложения, серверной части хранилища под названием Carbon и библиотеки базы данных, называемой шепотом. В этом руководстве вы научитесь устанавливать и настраивать Graphite на сервере Ubuntu 22.04.
Предпосылки
-
A server running Ubuntu 22.04.
-
A Fully Qualified domain name (FQDN) pointing to the server. For our tutorial, we will use the
graphite.example.com
domain. -
A non-root user with sudo privileges.
-
The uncomplicated Firewall(UFW) is enabled and running.
-
Make sure everything is updated.
$ sudo apt update && sudo apt upgrade
-
Install basic utility packages. Some of them may already be installed.
$ sudo apt install wget curl nano unzip -y
Шаг 1. Настройте брандмауэр
Прежде чем устанавливать какие-либо пакеты, первым шагом является настройка брандмауэра для разрешения соединений HTTP и HTTPS.
Проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть что-то вроде следующего.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Разрешить порты HTTP и HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Проверьте статус еще раз для подтверждения.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Шаг 2 — Установите необходимые пакеты
Мы установим Graphite с помощью менеджера пакетов PIP Python. Первым шагом является установка пакетов, необходимых для установки.
$ sudo apt install vim python3-dev python3-pip libcairo2-dev libffi-dev build-essential
Шаг 3 — Установите Graphite и Graphite Web
Мы установим Graphite в каталог
/opt/graphite
.$ export PYTHONPATH="/opt/graphite/lib/:/opt/graphite/webapp/" $ sudo pip install --no-binary=:all: https://github.com/graphite-project/whisper/tarball/master $ sudo pip install --no-binary=:all: https://github.com/graphite-project/carbon/tarball/master $ sudo pip install --no-binary=:all: https://github.com/graphite-project/graphite-web/tarball/master
Шаг 4 — Установите и настройте PostgreSQL
Для установки мы будем использовать официальный репозиторий APT PostgreSQL. Выполните следующую команду, чтобы добавить ключ PostgreSQL GPG.
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
Добавьте репозиторий APT в список источников.
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Обновите системный репозиторий.
$ sudo apt update
Теперь вы можете установить PostgreSQL и вспомогательные пакеты, используя следующую команду.
$ sudo apt install postgresql postgresql-contrib libpq-dev
Проверьте состояние службы PostgreSQL.
$ sudo systemctl status postgresql ? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Tue 2022-09-27 10:09:35 UTC; 4s ago Process: 4456 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4456 (code=exited, status=0/SUCCESS) CPU: 1ms Sep 27 10:09:35 matrix systemd[1]: Starting PostgreSQL RDBMS... Sep 27 10:09:35 matrix systemd[1]: Finished PostgreSQL RDBMS.
Вы можете видеть, что служба включена и работает по умолчанию.
Войдите в оболочку PostgreSQL.
$ sudo -su postgres psql
Создайте пользователя базы данных для Graphite.
postgres=# CREATE USER graphite WITH PASSWORD 'your_password';
Создайте базу данных для Graphite и передайте право собственности пользователю graphite.
postgres=# CREATE DATABASE graphitedb WITH OWNER graphite;
Выйдите из оболочки PostgreSQL.
postgres=# \q
Шаг 5 — Настройте Graphite Carbon и Web
Следующим шагом будет настройка Graphite Carbon и Graphite web.
Настроить углерод
Carbon включает в себя три услуги:
- carbon-cache: принимает метрики и записывает их на диск.
- углеродное реле: реплицирует данные.
- углеродный агрегатор: запускается перед службой углеродного кэша для буферизации метрик с течением времени перед их отправкой в Whisper.
Настройка углеродного кэша необходима, но углеродный ретранслятор и углеродный агрегатор необязательны.
Создайте файл
carbon.conf
, используя данный файл примера.$ sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
Затем создайте конфигурацию схем хранения.
$ sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
Откройте файл конфигурации схемы хранения.
$ sudo nano /opt/graphite/conf/storage-schemas.conf
Внутри вы найдете такие записи, как
[carbon] pattern = ^carbon\. retentions = 60:90d
Это означает, что шаблон, соответствующий регулярному выражению
^carbon\.
, должен сохранять данные с политикой хранения 60:90d, что означает- частота записи показателя: 60 секунд.
- продолжительность хранения этих значений: 90 дней.
Вы можете добавить свою запись. Давайте возьмем пример
test
, т. е. мониторинг точек данных и наши записи точек данных будут начинаться со строкиtest
. Эта запись должна быть добавлена перед записью по умолчанию, упомянутой внизу файла.[test] pattern = ^test\. retentions = 10s:10m,1m:1h
Это будет соответствовать любым показателям, начинающимся с
test
. Он будет хранить данные, которые собирает дважды, с различной степенью детализации. Первое определение (1 с: 10 мин) будет создавать точку данных каждые десять секунд. Он будет хранить данные только в течение десяти минут. Второе определение будет создавать точку данных каждую минуту. Он соберет все данные за последнюю минуту (шесть точек, поскольку предыдущее определение создает точку каждые десять секунд) и объединит их для создания точки. Он хранит данные на этом уровне детализации в течение одного часа.Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Запустите службу
carbon-cache
.$ sudo /opt/graphite/bin/carbon-cache.py start
Настройка графитовой сети
Следующим шагом является настройка веб-приложения Graphite.
Создайте секретный ключ для приложения Graphite. Скопируйте отображаемый ключ для дальнейшего использования.
$ python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())' sp%71)6b$%^bc(7xpz1d!)x3(azog01&k^8l02*!y0#)72p07y
Создайте файл настроек веб-приложения.
$ sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py
Вам необходимо настроить веб-приложение Graphite с параметрами базы данных. Откройте
local_settings.py
для редактирования.$ sudo nano /opt/graphite/webapp/graphite/local_settings.py
Раскомментируйте переменную
SECRET_KEY
и введите для нее случайное значение.SECRET_KEY = 'your-secret-key'
Раскомментируйте переменную
ALLOWED_HOSTS
.ALLOWED_HOSTS = [ '*' ]
Раскомментируйте переменную
TIME_ZONE
и установите для нее соответствующее значение.TIME_ZONE = 'Asia/Kolkata'
Раскомментируйте переменную
USE_REMOTE_USER_AUTHENTICATION
и установите для нее значениеTRUE
, чтобы удаленный пользователь прошел аутентификацию перед внесением каких-либо изменений в базу данных.USE_REMOTE_USER_AUTHENTICATION = True
Измените настройки базы данных.
DATABASES = { 'default': { 'NAME': 'graphitedb', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'graphite', 'PASSWORD': 'your_password', 'HOST': '127.0.0.1', 'PORT': '' } }
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Установите некоторые необходимые компоненты для оболочки Pythons PostgreSQL.
$ sudo pip install psycopg2-binary
Выполните следующую команду, чтобы импортировать схему базы данных.
$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py migrate --settings=graphite.settings
Вы получите следующий вывод.
Operations to perform: Apply all migrations: account, admin, auth, contenttypes, dashboard, events, sessions, tagging, tags, url_shortener Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying account.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying dashboard.0001_initial... OK Applying events.0001_initial... OK Applying sessions.0001_initial... OK Applying tagging.0001_initial... OK Applying tagging.0002_on_delete... OK Applying tags.0001_initial... OK Applying url_shortener.0001_initial... OK
Затем соберите статические файлы.
$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py collectstatic --settings=graphite.settings
Установите правильные параметры владения.
$ sudo chown -R www-data:www-data /opt/graphite/storage/ $ sudo chown -R www-data:www-data /opt/graphite/static/ $ sudo chown -R www-data:www-data /opt/graphite/webapp/
Создайте пользователя root для входа.
$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py createsuperuser --settings=graphite.settings Username (leave blank to use 'root'): navjot Email address: Password: Password (again): Superuser created successfully.
Он попросит вас создать суперпользователя. Этот пользователь будет использоваться позже для подключения к приложению Graphite.
Шаг 6 — Настройте Apache
Graphite по умолчанию поставляется с конфигурационными файлами Apache. Установите сервер Apache.
$ sudo apt install apache2 libapache2-mod-wsgi-py3
Создайте файл
mod_wsgi
.$ sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
Скопируйте файл конфигурации примера графита в расположение Apache.
$ sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf
Откройте файл конфигурации Graphite для редактирования.
$ sudo nano /etc/apache2/sites-available/graphite.conf
Измените номер порта в первой строке с
80
на127.0.0.1:8080
. Помещение127.0.0.1
перед ним ограничивает его доступ через Интернет.<VirtualHost 127.0.0.1:8080>
Добавьте свое доменное имя.
ServerName graphite.example.com #Replace with your domain
Добавьте следующие строки ниже строки
Alias /static/ /opt/graphite/static/
.#Add below lines <Directory /opt/graphite/static/> Require all granted </Directory>
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Отключите виртуальный хост по умолчанию и включите файл виртуального хоста Graphite.
$ sudo a2dissite 000-default $ sudo a2ensite graphite
Нам также нужно указать Apache прослушивать порт 8080 и прекратить прослушивание порта 80, потому что мы будем использовать Nginx в качестве прокси-сервера.
Откройте файл
/etc/apache2/ports.conf
для редактирования.$ sudo nano /etc/apache2/ports.conf
Найдите строку
Listen 80
и замените ее следующей.Listen 127.0.0.1:8080
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите сервер Apache.
$ sudo systemctl restart apache2
Чтобы убедиться, что Graphite работает правильно и доступен, выполните следующую команду.
$ curl 127.0.0.1:8080
Вы получите следующий вывод.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <!-- Copyright 2008 Orbitz WorldWide Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <html> <head> <title>Graphite Browser</title> </head> <frameset rows="80,*" frameborder="1" border="1"> <frame src="/browser/header" name="Header" id='header' scrolling="no" noresize="true" /> <frame src="/composer?" name="content" id="composerFrame"/> </frameset> </html>
Это подтверждает, что он работает нормально.
Шаг 7 — Установите Nginx
Мы будем использовать Nginx в качестве прокси-сервера для Apache. Таким образом, мы получаем все преимущества безопасности и скрытности, используя существующую конфигурацию, предоставляемую Graphite.
Ubuntu 22.04 поставляется с более старой версией Nginx. Чтобы установить последнюю версию, вам необходимо скачать официальный репозиторий Nginx.
Импортировать ключ подписи Nginxs.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Добавьте репозиторий для стабильной версии Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Обновите системные репозитории.
$ sudo apt update
Установите Нгинкс.
$ sudo apt install nginx
Проверьте установку.
$ nginx -v nginx version: nginx/1.22.0
Запустите сервер Nginx.
$ sudo systemctl start nginx
Шаг 8 — Установите SSL
Нам нужно установить Certbot для создания SSL-сертификата. Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.
Ubuntu 22.04 поставляется с установленным по умолчанию Snapd. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена.
$ sudo snap install core $ sudo snap refresh core
Установите Сертбот.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на каталог
/usr/bin
.$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Выполните следующую команду, чтобы сгенерировать SSL-сертификат.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d graphite.example.com
Приведенная выше команда загрузит сертификат в каталог
/etc/letsencrypt/live/graphite.example.com
на вашем сервере.Создайте групповой сертификат Диффи-Хеллмана.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Проверьте службу планировщика обновлений Certbot.
$ sudo systemctl list-timers
Вы найдете
snap.certbot.renew.service
в качестве одной из запланированных для запуска служб.NEXT LEFT LAST PASSED UNIT ACTIVATES ................................................................................................................................. Wed 2022-09-28 00:00:00 UTC 7h left Tue 2022-09-27 00:00:01 UTC 16h ago logrotate.timer logrotate.service Wed 2022-09-28 02:39:09 UTC 10h left Tue 2022-09-27 09:42:42 UTC 6h ago apt-daily.timer apt-daily.service Wed 2022-09-28 06:02:00 UTC 13h left n/a n/a snap.certbot.renew.timer snap.certbot.renew.service
Чтобы проверить, нормально ли работает обновление SSL, выполните пробный запуск процесса.
$ sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. Ваш сертификат будет продлен автоматически.
Шаг 9 — Настройте Nginx
Откройте файл
/etc/nginx/nginx.conf
для редактирования.$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой
include /etc/nginx/conf.d/*.conf;
.server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Создайте и откройте файл
/etc/nginx/conf.d/uvdesk.conf
для редактирования.$ sudo nano /etc/nginx/conf.d/graphite.conf
Вставьте в него следующий код.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name graphite.example.com; access_log /var/log/nginx/graphite.access.log; error_log /var/log/nginx/graphite.error.log; # SSL ssl_certificate /etc/letsencrypt/live/graphite.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/graphite.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/graphite.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 8.8.8.8; location / { proxy_set_header Connection "upgrade"; proxy_set_header Upgrade $http_upgrade; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:8080; proxy_redirect off; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name graphite.example.com; return 301 https://$host$request_uri; }
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса после завершения.
Проверьте синтаксис файла конфигурации Nginx.
$ 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 restart nginx
Шаг 10. Получите доступ к графиту и используйте его
Посетите URL-адрес
https://graphite.example.com
в своем браузере, и вы увидите следующий экран.Щелкните ссылку «Войти» в правом верхнем углу, чтобы открыть страницу входа. Введите свои учетные данные суперпользователя, созданные на шаге 5, и нажмите кнопку входа, чтобы продолжить.
Существует несколько способов передачи данных в Graphite. Мы добавили в Схему хранилища сопоставитель шаблонов, согласно которому любой шаблон, начинающийся с теста, будет записан как наш шаблон. Давайте добавим некоторые случайные данные, используя следующую команду.
$ echo "test.count 9 `date +%s`" | nc -q0 127.0.0.1 2003;
Это добавит в систему одну метрику данных со значением 9. Давайте добавим еще несколько данных, перебирая значения в цикле.
$ for i in 4 6 8 16 2; do echo "test.count $i `date +%s`" | nc -q0 127.0.0.1 2003; sleep 6; done
Вернитесь к панели инструментов Graphite и откройте «Метрики» >> «Тест» >> «Подсчет» на левой боковой панели. Вы должны увидеть что-то вроде следующего.
Теперь вы можете начать использовать его для мониторинга. Вы также можете комбинировать его с Grafana, чтобы получить высокий уровень настройки.
Заключение
На этом мы завершаем наше руководство по установке и настройке Graphite на сервере Ubuntu 22.04 вместе с Nginx в качестве прокси-сервера. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.