Установка Prometheus Kit на операционную систему Ubuntu 18.04

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

Alertmanager позволяет отправлять уведомления в случае выполнения или невыполнения условий, указанных в конфигурационных файлах.

Node Exporter позволяет получить расширенную информацию о системных метриках веб-сайта, в том числе об использовании памяти, диска и процессора. Node Exporter является одним из основных экспортеров Prometheus.


Как сэкономить время на установке Prometheus

Вы можете получить готовую Prometheus на Ubuntu 18.04 в виде настроенной виртуальной машины Mail.ru Cloud Solutions. При регистрации вы получаете бесплатный бонусный счет, которого достаточно, чтобы тестировать приложение несколько дней.

[подключить машину Prometheus]

Требования

  • Операционная система Ubuntu версии 18.04.

  • Пользователь с доступом к команде sudo.

Установка веб-сервера Nginx

Чтобы установить веб-сервер Nginx:

  1. Откройте окно терминала.

  2. Обновите индексы пакетов, выполнив команду: 

sudo apt update
  1. Установите веб-сервер Nginx, выполнив команду: 

sudo apt install nginx -y
  1. Для проверки работы веб-сервера Nginx запустите веб-браузер и в адресной строке введите IP-адрес веб-сервера. 

Если установка и конфигурация веб-сервера Nginx прошла успешно, откроется примерно следующая страница:

  1. Откройте конфигурационный файл веб-сервера Nginx (по умолчанию - default) для редактирования, выполнив команду:

sudo nano /etc/nginx/sites-available/default
  1. В этом файле найдите строки:

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




и замените их на строки:

 location /grafana/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_redirect off;
        proxy_set_header Host $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;
    }
    location /prometheus/ {
        proxy_pass http://127.0.0.1:9090/prometheus/;
        proxy_redirect off;
        proxy_set_header Host $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;
        auth_basic "Prometheus";
        auth_basic_user_file "/etc/nginx/.htpasswd";
    }
    location /node_exporter/ {
        proxy_pass http://127.0.0.1:9100/node_exporter/;
        proxy_redirect off;
        proxy_set_header Host $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;
        auth_basic "Node_exporter";
        auth_basic_user_file "/etc/nginx/.htpasswd";
    }
    location /alertmanager/ {
        proxy_pass http://127.0.0.1:9093/alertmanager/;
        proxy_redirect off;
        proxy_set_header Host $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;
        auth_basic "Alertmanager";
        auth_basic_user_file "/etc/nginx/.htpasswd";
    }
    location = / {
        return 301 /grafana/;
    }

  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.

  2. Разрешите веб-серверу Nginx использовать длинные имена для серверов. Для этого:

  • Откройте файл nginx.conf, выполнив команду: 
sudo nano /etc/nginx/nginx.conf
  • В этом файле найдите строку:
# server_names_hash_bucket_size 64;

и замените ее на строку:

server_names_hash_bucket_size 64;

 

  • Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.
  1. Проверьте конфигурацию Nginx, выполнив команду:

sudo nginx -t
  1. Перезагрузите Nginx, выполнив команду: 

sudo systemctl reload nginx
  1. Проверьте статус Nginx, выполнив команду:

sudo systemctl status nginx

Установка Prometheus, Node Exporter и Alertmanager

Чтобы установить Prometheus, Node Exporter и Alertmanager:

  1. Откройте окно терминала.
  2. Для проверки синтаксиса yml-файлов установите программный продукт yamllint, выполнив команду: 
sudo apt install yamllint -y
  1. Установите Prometheus и Node Exporter, выполнив команду:
sudo apt install prometheus -y

  1. Установите Alertmanager, выполнив команду:
sudo apt install prometheus-alertmanager -y
  1. Создайте файл правил фильтрации all.rules, выполнив команду: 
sudo nano /etc/prometheus/all.rules

  1. Добавьте в этот файл следующее:
groups:
- name: Alert rules
  rules:
  - alert: InstanceDown
    annotations:
      description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for
        more than 5 minutes.'
      summary: Instance {{ $labels.instance }} down
    expr: up == 0
    for: 5m
    labels:
      severity: critical
  - alert: CriticalCPULoad
    annotations:
      description: '{{ $labels.instance }} of job {{ $labels.job }} has Critical CPU
        load for more than 2 minutes.'
      summary: Instance {{ $labels.instance }} - Critical CPU load
    expr: (100 * (1 - avg(irate(node_cpu{job="node",mode="idle"}[5m])) BY (instance)))
      > 96
    for: 2m
    labels:
      severity: critical
  - alert: CriticalDiskSpace
    annotations:
      description: '{{ $labels.instance }} of job {{ $labels.job }} has less than 10%
        space remaining.'
      summary: Instance {{ $labels.instance }} - Critical disk space usage
    expr: node_filesystem_free{job="node",filesystem!~"^/run(/|$)"} / node_filesystem_size{job="node"}
      < 0.1
    for: 4m
    labels:
      severity: critical
  - alert: RebootRequired
    annotations:
      descritpion: '{{ $labels.instance }} requires a reboot.'
      summary: Instance {{ $labels.instance }} - reboot required
    expr: node_reboot_required > 0
    labels:
      severity: warning
  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.


Настройка файлов конфигурации Prometheus и Alertmanager

Для настройки файлов конфигурации:

  1. Откройте окно терминала.
  2. Удалите существующий конфигурационный файл Prometheus, выполнив команду: 
sudo rm /etc/prometheus/prometheus.yml
  1. Создайте конфигурационный файл prometheus.yml и откройте его для редактирования, выполнив команду: 
sudo nano /etc/prometheus/prometheus.yml
  1. Добавьте в этот файл следующее:
global:
  scrape_interval: 10s
  scrape_timeout: 10s
  evaluation_interval: 10s
rule_files:
  - /etc/prometheus/all.rules
scrape_configs:
  - job_name: 'prometheus'
    metrics_path: '/prometheus/metrics'
    static_configs:
      - targets: ['localhost:9090']
        labels:
          alias: prometheus
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']
        labels:
          alias: node_exporter
  - job_name: 'grafana'
    static_configs:
      - targets: ['localhost:3000']
        labels:
          alias: grafana
alerting:
  alertmanagers:
    - path_prefix: '/alertmanager/'
      static_configs:
      - targets:
          - localhost:9093
  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.
  2. Удалите существующий конфигурационный файл Alertmanager, выполнив команду: 
sudo rm /etc/prometheus/alertmanager.yml
  1. Создайте конфигурационный файл alertmanager.yml и откройте его для редактирования, выполнив команду: 
sudo nano /etc/prometheus/alertmanager.yml
  1. Добавьте в этот файл следующее:
global:
templates:
  - /etc/alertmanager/*.tmpl
route:
  receiver: 'default'
receivers:
  - name: 'default'
  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.
  2. Передайте права на директорию /etc/prometheus пользователю и группе prometheus, выполнив команду:
sudo chown -R prometheus:prometheus /etc/prometheus

Запуск Prometheus, Node Exporter и Alertmanager

  1. Откройте окно терминала.
  2. Удалите существующий файл сервиса Systemd (prometheus.service), выполнив команду: 
sudo rm /lib/systemd/system/prometheus.service
  1. Создайте новый файл prometheus.service и откройте его для редактирования, выполнив команду: 
sudo nano /lib/systemd/system/prometheus.service
  1. Добавьте в этот файл следующее: 
[Unit]
Description=Prometheus server

[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
WorkingDirectory=/var/lib/prometheus
ExecStart=/usr/bin/prometheus --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus/data \
    --web.external-url=http://<IP-адрес веб-сервера>/prometheus/

[Install]
WantedBy=multi-user.target
  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.
  2. Удалите существующий файл сервиса Systemd (prometheus-node-exporter.service), выполнив команду: 
sudo rm /lib/systemd/system/prometheus-node-exporter.service
  1. Создайте новый файл prometheus-node-exporter.service и откройте его для редактирования, выполнив команду: 
sudo nano /lib/systemd/system/prometheus-node-exporter.service
  1. Добавьте в этот файл следующее: 
[Unit]
Description=Prometheus exporter
Documentation=https://github.com/prometheus/node_exporter

[Service]
Restart=always
User=prometheus
Group=prometheus
EnvironmentFile=/etc/default/prometheus-node-exporter
ExecStart=/usr/bin/prometheus-node-exporter $ARGS
    --storage.tsdb.path=/var/lib/prometheus/node-exporter/data \
    --web.external-url=http://<IP-адрес веб-сервера>/node_exporter/
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.
  1. Удалите существующий файл сервиса Systemd (prometheus-alertmanager.service) и откройте его для редактирования, выполнив команду, выполнив команду:
sudo rm /lib/systemd/system/prometheus-alertmanager.service
  1. Создайте новый файл prometheus-alertmanager.service и откройте его для редактирования, выполнив команду: 
sudo nano /lib/systemd/system/prometheus-alertmanager.service
  1. Добавьте в этот файл следующее: 
[Unit]
Description=Alertmanager server

[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
WorkingDirectory=/var/lib/prometheus/alertmanager
ExecStart=/usr/bin/prometheus-alertmanager --config.file /etc/prometheus/alertmanager.yml \
    --storage.path=/var/lib/prometheus/alertmanager/data \
    --web.external-url=http://<IP-адрес веб-сервера>/alertmanager/

[Install]
WantedBy=default.target
  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.
  2. Создайте символическую ссылку на файл сервиса prometheus-alertmanager.service ,выполнив команду:
sudo ln -s /lib/systemd/system/prometheus-alertmanager.service /etc/systemd/system/default.target.wants/prometheus-alertmanager.service
  1. Перезагрузите сервис Systemd, выполнив команду: 
sudo systemctl daemon-reload
  1. Перезапустите Node exporter, выполнив команду: 
sudo systemctl restart prometheus-node-exporter
  1. Чтобы при запуске операционной системы Node exporter запускался автоматически, выполните команду:
sudo systemctl enable prometheus-node-exporter
  1. Проверьте работу Node exporter, выполнив команду: 
sudo systemctl status prometheus-node-exporter --no-pager -l
  1. Перезапустите Alertmanager, выполнив команду: 
sudo systemctl restart prometheus-alertmanager
  1. Чтобы при запуске операционной системы Alertmanager запускался автоматически, выполните команду: 
sudo systemctl enable prometheus-alertmanager
  1. Проверьте работу Alertmanager, выполнив команду: 
sudo systemctl status prometheus-alertmanager --no-pager -l
  1. Перезапустите Prometheus, выполнив команду: 
sudo systemctl restart prometheus
  1. Чтобы при запуске операционной системы Prometheus запускался автоматически, выполните команду: 
sudo systemctl enable prometheus
  1. Проверьте работу Prometheus, выполнив команду: 
sudo systemctl status prometheus --no-pager -l


Настройка безопасности Prometheus

В Prometheus нет встроенных механизмов обеспечения безопасности. Во избежание несанкционированного доступа к Prometheus выполните следующее:

  1. Откройте окно терминала.
  2. Установите пакет утилит apache2-utils, выполнив команду: 
sudo apt install apache2-utils -y

Этот пакет содержит утилиту htpasswd, позволяющую обеспечить базовую авторизацию.

  1. Создайте файл с паролем. Для этого выполните команду, указав имя учетной записи и место хранения данного файла: 
sudo htpasswd -c /etc/nginx/.htpasswd mcsmail

В результате в каталоге /etc/nginx/ будет создан файл .htpasswd, содержащий имя учетной записи пользователя (mcsmail) и его зашифрованный пароль.

Проверка работы Prometheus

Для проверки работы Prometheus:

  1. В адресной строке веб-браузера введите строку: 
http://<внешний IP-адрес вашего веб-сервера>/prometheus
  1. На открывшейся странице в соответствующих полях введите имя пользователя и пароль, которые вы указали при настройке безопасности Prometheus. Затем нажмите кнопку Вход.

В результате откроется главная страница Prometheus:

  1. Чтобы проверить статус Prometheus и Node Exporter, в верхней части экрана в меню Status выберите Targets.


Установка СУБД MySQL

Для работы Grafana требуется СУБД. В качестве примера рассмотрим СУБД MySQL. 

Чтобы установить СУБД MySQL:

  1. Откройте окно терминала.

  2. Установите сервер СУБД MySQL, выполнив команду:

    sudo apt install mysql-server

    Согласитесь с установкой сервера СУБД MySQL, ответив Y(es).

  3. Для внесения изменений в конфигурацию сервера СУБД MySQL используйте команду:

sudo mysql_secure_installation

        Данная команда запускает сценарий повышения безопасности сервера СУБД MySQL. Для настройки безопасности:    

  • Введите пароль для учетной записи root, который был задан в начале установки сервера СУБД MySQL.
  • При необходимости выполните запуск плагина валидации паролей (VALIDATE PASSWORD PLUGIN):
  • Ответьте Y(es) для включения плагина валидации.
  • Ответьте N(o), если валидация паролей не требуется.

Примечание.

Плагин валидации паролей позволяет применять к паролям учетных записей СУБД MySQL критерии безопасности. Все пароли, не удовлетворяющие определенным критериям безопасности, признаются незащищенными. Это может привести к ошибкам при работе с программными пакетами, имеющими доступ к конфигурации учетных записей СУБД MySQL.

Для плагина валидации паролей доступно три уровня надежности паролей: 

0 - простой (low) уровень надежности требует использовать в пароле не менее 8 букв;

1 - средний (medium) уровень надежности требует использовать в пароле не менее 8 символов, обязательно включающих цифры, буквы в верхнем и нижнем регистрах, а также специальные символы;

2 - высокий (strong) уровень надежности требует использовать в пароле не менее 8 символов, обязательно включающих цифры, буквы в верхнем и нижнем регистрах, специальные символы, а также запрещает использовать в качестве пароля распространенные слова, которые с высокой вероятностью могут быть подобраны по словарю.

  • При необходимости смените текущий пароль учетной записи root:
  • Ответьте Y(es) для смены текущего пароля.
  • Ответьте N(o), если смена пароля не требуется.

По умолчанию пароль не задан. Рекомендуется использовать надежный пароль.

Внимание!

Пользователь root в данном случае относится исключительно к СУБД MySQL и не является учетной записью ОС Ubuntu.

  • При необходимости удалите анонимные (anonymous) учетные записи, которые создаются при установке СУБД MySQL:
  • Ответьте Y(es) для удаления анонимных учетных записей.
  • Ответьте N(o), если удаление анонимных учетных записей не требуется.

Данные учетные записи предназначены только для тестирования БД и в большинстве случаев могут быть удалены.

  • При необходимости запретите удаленный доступ к СУБД MySQL для учетной записи root:
    • Ответьте Y(es) для отключения возможности удаленного доступа.
    • Ответьте N(o) для разрешения удаленного доступа.
  • При необходимости удалите тестовую базу (Test):
    • Ответьте Y(es) для удаления базы Test.
    • Ответьте N(o), если удаление базы Test не требуется.

Данная база создается при установке сервера СУБД MySQL и предназначена для тестирования. Удаление базы Test не влияет на работу системы.

  • В ответ на запрос на внесение изменений в СУБД MySQL и перезагрузку привилегий доступа к таблицам:  
    • Ответьте Y(es) для внесения изменений и перезагрузки.
    • Ответьте N(o), если внесение изменений и перезагрузка не требуются.

Настройка СУБД MySQL

Чтобы настроить СУБД MySQL:

  1. Откройте окно терминала.
  2. Перейдите в оболочку MySQL выполнив команду: 
sudo mysql -u root -p 
  1. Создайте базу данных Grafana, выполнив команду: 
CREATE DATABASE grafana;
  1. Создайте учетную запись пользователя Grafana с правами полного доступа к созданной базе данных и укажите пароль для этой учетной записи, выполнив команду: 
CREATE USER grafana@127.0.0.1 identified by 'mypassword';
  1. Предоставьте пользователю привилегии для создания и изменения таблиц базы данных, выполнив команду: 
GRANT ALL PRIVILEGES ON grafana.* TO grafana@127.0.0.1;
  1. Актуализируйте предоставление привилегий к таблицам базы данных, выполнив команду: 
FLUSH PRIVILEGES;
  1. Выйдите из оболочки MySQL, выполнив команду: 
Exit

Подготовка к установке Grafana

Grafana является средством визуализации метрик, получаемых от Prometheus. С помощью Grafana можно получить подробные отчеты.

Для подготовки к установке Grafana:

  1. Перейдите на сайт https://grafana.com/grafana/download и запомните последнюю версию Grafana. Например:


  1. Откройте окно терминала.
  2. Перейдите в домашнюю директорию, выполнив команду: 
cd ~
  1. Создайте временный каталог tempGR, выполнив команду: 
mkdir tempGF 
  1. Перейдите каталог tempGR, выполнив команду: 
cd ~/tempGF
  1. Скачайте пакет Grafana, выполнив команду:
wget https://dl.grafana.com/oss/release/grafana_6.2.5_amd64.deb
  1. Установите пакет Grafana, выполнив команду: 
sudo dpkg -i grafana_6.2.5_amd64.deb
  1. Удалите каталог tempGF, выполнив команду: 
rm -Rf ~/tempGF

Настройка и запуск Grafana

  1. Откройте окно терминала.
  2. Откройте конфигурационный файл Grafana, выполнив команду:
sudo nano /etc/grafana/grafana.ini
  1. Чтобы разрешить создание учетных записей пользователей, найдите строку:
;allow_sign_up = true 

и замените ее на строку: 

allow_sign_up = false
  1. Чтобы запретить создание организаций для непривилегированных пользователей, найдите строку:
;allow_org_create = true 

и замените ее на строку: 

allow_org_create = false
  1. Чтобы запретить отправку статистики на сайт stats.grafana.org и проверку обновлений, найдите строки: 
;reporting_enabled = true
;check_for_updates = true

 и замените их на строки:

reporting_enabled = false
check_for_updates = false

  1. Для повышения уровня безопасности отключите проверку анимационных изображений с сервиса gravatar. Для этого найдите строку: 
;disable_gravatar = false 

и замените её на строку: 

disable_gravatar = true
  1. Чтобы включить учетную запись admin, найдите строку:
;admin_user = admin

и замените её на строку

admin_user = admin

  1. Задайте пароль для учетной записи admin, для этого найдите строку:
;admin_password = admin

и замените ее на строку

admin_password = <пароль>

Внимание!

Рекомендуется задавать надежный пароль.

  1. Для перенаправления запросов в веб-браузере, найдите строку: 
    ;root_url = http://localhost:3000

    и замените ее на строку

    root_url = %(protocol)s://%(domain)s/grafana/
  2. В секцию [database] внесите следующие изменения:
type = mysql
host = 127.0.0.1:3306
name = grafana
user = grafana
password = <пароль>

  1. Сохраните изменения, используя сочетание клавиш CTRL+O, и завершите редактирование, используя сочетание клавиш CTRL+X.

  1. Запустите Grafana, выполнив команду: 
sudo systemctl start grafana-server
  1. Чтобы при запуске операционной системы Grafana запускалась автоматически, выполните команду: 
sudo systemctl enable grafana-server
  1. Проверьте работу Grafana, выполнив команду:
sudo systemctl status grafana-server --no-pager -l
  1. В адресной строке веб-браузера введите следующее:
http://<внешний IP-адрес вашего веб-сервера>
  1. На открывшейся странице в соответствующих полях укажите имя пользователя и пароль, которые вы задали при настройке Grafana. Затем нажмите кнопку Log in.

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

В результате откроется основная информационная панель Grafana. 

  1. Для добавления метрик выполните следующее:
  • Перейдите в меню Add data source и выберите Prometheus.


  • Убедитесь, что в открывшемся окне заполнены следующие поля:
  • Нажмите кнопку Save & Test.
  1. Импортируйте дашборд для Node Exporter (например, Node Exporter Full). Для этого:
  • В новом окне веб-браузера откройте страницу: https://grafana.com/dashboards/1860
  • Чтобы скопировать путь расположения дашборда в буфер обмена, нажмите кнопку Copy ID to Clipboard.
  • В новом окне веб-браузера откройте страницу: http://<внешний IP-адрес вашего веб-сервера>/dashboard/import
  • В открывшемся окне в поле Grafana.com Dashboard вставьте путь из буфера обмена.
  • В поле Prometheus выберите Prometheus и нажмите кнопку Import.

Готово. Теперь вы можете отслеживать различные метрики вашего веб-сайта.

Обратная связь

Возникли проблемы или остались вопросы? Напишите нам, мы будем рады вам помочь.