Prometheus - это набор инструментов для мониторинга временных рядов и оповещения с открытым исходным кодом, изначально разработанный в SoundCloud. Он имеет очень активную разработку и сообщество и получил широкое распространение во многих организациях и компаниях.
Prometheus является дефакто инструментом мониторинга для нативных облачных приложений и микросервисов. Невозможно говорить о мониторинге инфраструктуры Docker и Kubernetes, не упоминая Prometheus. Для полноценного мониторинга, оповещения и визуализации обычно используется Grafana.
Ниже описаны шаги по установке инструмента мониторинга Prometheus на RHEL 8.
Установка Prometheus в RHEL 8 / CentOS 8
Шаг 1: Добавьте системного пользователя и группу для Prometheus
Давайте начнем установку Prometheus на RHEL 8 с создания специального пользователя, который будет запускать и управлять службой Prometheus. Это системный пользователь, не имеющий доступа к консоли/входу в оболочку.
1 2 | sudo groupadd --system prometheus sudo useradd -s /sbin/nologin --system -g prometheus prometheus |
Обратите внимание, что у этого пользователя нет оболочки /bin/bash, поэтому мы использовали -s /sbin/nologin.
Шаг 2: Настройка NTP-сервера
Чтобы избежать любого дрейфа времени, настройте NTP-сервер на сервере Prometheus для обеспечения точного времени.
Шаг 3: Создание каталога данных для Prometheus
После создания системного пользователя и группы перейдите к созданию каталога, который будет использоваться для хранения данных Prometheus. Сюда входят метрики, собранные с агентов, за которыми ведется наблюдение.
1 | sudo mkdir /var/lib/prometheus |
Вы можете выбрать другой путь, например, отдельный раздел.
Шаг 4: Создание конфигурационных каталогов для Prometheus
Основной каталог файлов конфигурации Prometheus - /etc/prometheus/. В нем будет несколько подкаталогов.
1 2 3 | for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done |
Шаг 5: Загрузите Prometheus на CentOS 8 / RHEL 8
Нам нужно загрузить архив с последним выпуском Prometheus и распаковать его, чтобы получить бинарные файлы. Вы можете проверить релизы на странице Prometheus releases Github.
Вы можете использовать curl или wget для загрузки из командной строки.
1 2 3 4 5 | curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \ | grep browser_download_url \ | grep linux-amd64 \ | cut -d '"' -f 4 \ | wget -qi - |
Распакуйте файл и переместите его в каталог в вашем $PATH
1 2 3 | tar xvf prometheus-*.tar.gz cd prometheus-*/ sudo cp prometheus promtool /usr/local/bin/ |
Также скопируйте consoles и console_libraries в каталог /etc/prometheus:
1 | sudo cp -r prometheus.yml consoles/ console_libraries/ /etc/prometheus/ |
Шаг 6: Создайте файл конфигурации Prometheus.
Файл конфигурации Prometheus будет расположен в каталоге /etc/prometheus/prometheus.yml. Создайте простые конфигурации, используя содержимое:
1 | sudo nano /etc/prometheus/prometheus.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # Global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. scrape_timeout: 15s # scrape_timeout is set to the global default (10s). # A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] |
Шаг 7: Создайте блок службы systemd
Чтобы иметь возможность управлять службой Prometheus с помощью systemd, необходимо явно определить этот файл подразделения.
Создайте файл
1 | sudo nano /etc/systemd/system/prometheus.service |
Добавьте в него следующее содержимое.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [Unit] Description=Prometheus Documentation=https://prometheus.io/docs/introduction/overview/ Wants=network-online.target After=network-online.target [Service] Type=simple User=prometheus Group=prometheus ExecReload=/bin/kill -HUP $MAINPID ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 \ --web.external-url= SyslogIdentifier=prometheus Restart=always [Install] WantedBy=multi-user.target |
Установите правильные права доступа к каталогу.
1 2 3 | sudo chown -R prometheus:prometheus /etc/prometheus sudo chmod -R 775 /etc/prometheus/ sudo chown -R prometheus:prometheus /var/lib/prometheus/ |
Запустите службу Prometheus.
1 2 | sudo systemctl daemon-reload sudo systemctl start prometheus |
Включите запуск службы при загрузке системы:
1 | sudo systemctl enable prometheus |
Проверьте статус с помощью команды
1 | systemctl status prometheus |
Шаг 8: Настройте firewalld
Я разрешу доступ к порту 9090 интерфейса управления Prometheus из моей доверенной сети с помощью богатых правил Firewalld.
1 2 3 4 5 | sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" \ source address="192.168.0.0/24" \ port protocol="tcp" port="9090" accept' sudo firewall-cmd --reload |
Если вы хотите разрешить доступ с любого IP, используйте:
1 2 | sudo firewall-cmd --add-port=9090/tcp --permanent sudo firewall-cmd --reload |
Откройте IP/Hostname сервера Prometheus и порт 9090