Мониторинг. · 11 min read · Oct 27, 2025

Как установить и настроить систему мониторинга Graphite на Ubuntu 22.04

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

Graphite состоит из нескольких компонентов: веб-приложения, хранилища, называемого Carbon, и библиотеки базы данных, называемой whisper. В этом учебном пособии вы научитесь устанавливать и настраивать Graphite на сервере Ubuntu 22.04.

Предварительные требования

  • Сервер с установленной Ubuntu 22.04.
  • Полностью квалифицированное доменное имя (FQDN), указывающее на сервер. Для нашего учебного пособия мы будем использовать домен graphite.example.com.
  • Пользователь, не являющийся root, с правами sudo.
  • Простой брандмауэр (UFW) включен и работает.
  • Убедитесь, что все обновлено. $ sudo apt update && sudo apt upgrade
  • Установите базовые утилиты. Некоторые из них могут быть уже установлены. $ 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 для установки. Выполните следующую команду, чтобы добавить GPG-ключ PostgreSQL.

$ 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 состоит из трех служб:

  • carbon-cache: принимает метрики и записывает их на диск.
  • carbon-relay: реплицирует данные.
  • carbon-aggregator: работает перед службой carbon-cache, чтобы буферизовать метрики со временем перед их отправкой в Whisper.

Настройка carbon-cache необходима, но carbon-relay и carbon-aggregator являются необязательными.

Создайте файл 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. Он будет хранить данные, которые он собирает, дважды, с различной детализацией. Первое определение (1s:10m) создаст точку данных каждые десять секунд. Он будет хранить данные только в течение десяти минут. Второе определение создаст точку данных каждую минуту. Он соберет все данные за последнюю минуту (шесть точек, поскольку предыдущее определение создает точку каждые десять секунд) и агрегирует их, чтобы создать точку. Он хранит данные на этом уровне детализации в течение одного часа.

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Запустите службу carbon-cache.

$ sudo /opt/graphite/bin/carbon-cache.py start

Настройка Graphite Web

Следующий шаг — настроить веб-приложение 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, когда будет предложено.

Установите некоторые предварительные условия для обертки PostgreSQL для Python.

$ 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: [email protected]
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

Скопируйте пример конфигурационного файла graphite в расположение 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 перед ним ограничивает доступ к нему через интернет.


Добавьте свое доменное имя.

ServerName graphite.example.com #Замените на ваше доменное имя

Добавьте следующие строки ниже строки Alias /static/ /opt/graphite/static/.

#Добавьте следующие строки

     Require all granted

Сохраните файл, нажав 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

Вы получите следующий вывод.





  
    Graphite Browser
  



  

    



Это подтверждает, что все работает нормально.

Шаг 7 - Установка Nginx

Мы будем использовать Nginx в качестве прокси-сервера для Apache. Таким образом, мы сможем получить преимущества безопасности и конфиденциальности, используя существующую конфигурацию, предоставленную Graphite.

Ubuntu 22.04 поставляется со старой версией Nginx. Чтобы установить последнюю версию, вам нужно загрузить официальный репозиторий Nginx.

Импортируйте ключ подписи Nginx.

$ 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

Установите Nginx.

$ 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

Установите Certbot.

$ 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 [email protected] -d graphite.example.com

Вышеуказанная команда загрузит сертификат в директорию /etc/letsencrypt/live/graphite.example.com на вашем сервере.

Сгенерируйте сертификат группы Diffie-Hellman.

$ 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;
    }
}

# принудить 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 - Доступ и использование Graphite

Перейдите по URL https://graphite.example.com в вашем браузере, и вы увидите следующий экран.

Панель управления Graphite

Нажмите на ссылку Войти в правом верхнем углу, чтобы открыть страницу входа. Введите свои учетные данные суперпользователя, созданные на шаге 5, и нажмите кнопку войти, чтобы продолжить.

Существует несколько способов передачи данных в Graphite. Мы добавили сопоставитель шаблонов в схему хранения, согласно которой любой шаблон, начинающийся с test, будет записан как наш шаблон. Давайте добавим некоторые случайные данные, используя следующую команду.

$ 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 и откройте Metrics >> test >> count в левом боковом меню. Вы должны увидеть что-то вроде следующего.

Graphite Показать данные на панели управления

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

Заключение

Это завершает наше учебное пособие по установке и настройке Graphite на сервере Ubuntu 22.04 вместе с Nginx в качестве прокси-сервера. Если у вас есть какие-либо вопросы, оставляйте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.