Поиск по сайту:

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


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите необходимые пакеты
  4. Шаг 3. Установите Graphite и Graphite Web
  5. Шаг 4. Установка и настройка PostgreSQL
  6. Шаг 5. Настройка Graphite Carbon и Web
    1. Настроить углерод
    2. Настройка 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 в качестве прокси-сервера. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.