Метрики Docker с помощью Prometheus и Grafana
С возвращением, мои дорогие любители мониторинга! Мы рады тому, что Вы продолжаете осваивать инструменты мониторинга.
Сегодня у нас есть увлекательное задание, которое прокачает Ваши навыками и украсит Ваше резюме.
Приготовьтесь погрузиться в мир Docker и Grafana, ведь здесь мы изучим, как отправлять логи Docker в Grafana в режиме реального времени с помощью Promtheus.
Поехали!
Дашборд Grafana
Дашборд позволяет увидеть данные и отследить показатели с помощью различных визуализаций.
Дашборды состоят из панелей, каждая из которых представляет собой часть истории, которую Вы хотите рассказать.
Каждая панель состоит из запроса и визуализации. Запрос определяет, какие данные Вы хотите отобразить, а визуализация - как эти данные отображаются.
Что такое Prometheus..??
Prometheus - это система мониторинга и оповещения с открытым исходным кодом, разработанная для DevOps. Она собирает метрики с различных объектов, таких как серверы, контейнеры и приложения, с помощью специальной модели.
Prometheus хранит собранные метрики в базе данных временных рядов, что позволяет выполнять сложные запросы и визуализацию полученных данных. Он предоставляет гибкие возможности оповещения на основе заданных пороговых значений и поддерживает интеграцию с популярными инструментами оповещения.
Наше сегодняшнее задание № 1:
- установить Docker и запустить его на Linux EC2 с помощью USER DATA.
- Запустите новый экземпляр Ubuntu 22.04 t2.micro EC2.
- Во время запуска экземпляра EC2 перейдите на страницу «Configure Instance Details».
- В разделе «Advanced Details» найдите поле «User data».
- Вставьте скрипт, приведенный ниже, в поле « User data ».
- Продолжите настройку экземпляра EC2 и запустите экземпляр.
#!/bin/bash # Update the system apt-get update apt-get upgrade -y # Install Docker dependencies apt-get install -y apt-transport-https ca-certificates curl software-properties-common # Add Docker's official GPG key curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Add Docker repository echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Update package information and install Docker apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io # Start Docker service systemctl start docker # Enable Docker to start on system boot systemctl enable docker
Задание № 2:
Создать 2 контейнера Docker и запустить в них любое базовое приложение (подойдет простое приложение todo).
Шаг 1
- Для начала мы должны установить Grafana. Для этого Вы можете использовать официальную инструкцию по установкe.
Шаг 2
- Следуйте моим указаниям для того, чтобы запустить простое приложение node.js docker container
- Выполните следующие шаги для запуска второго контейнерного приложения:
- Мы собираемся запустить сервер apache2 на том же экземпляре ec2.
#Create a new file called "Dockerfile" in a directory of your choice. $ touch Dockerfile #Open the Dockerfile using a text editor of your choice. $ nano Dockerfile #Add the following content to the Dockerfile: FROM httpd:2.4 COPY index.html /usr/local/apache2/htdocs/ EXPOSE 80 #Save and exit the Dockerfile. #Create a new file called "index.html" in the same directory as the Dockerfile. $ touch index.html #Open the index.html file using a text editor. $ nano index.html #Add the following content to the index.html file: <!DOCTYPE html> <html> <head> <title>Hello, World!</title> </head> <body> <h1>Hello, World!</h1> </body> </html> #Save and exit the index.html file. #Build the Docker image using the following command: $ docker build -t my-apache-image . #Run the Docker container using the following command: $ docker run -d -p 8080:80 my-apache-image
- Я установил все вышеперечисленные инструменты, вот мой скриншот:
Шаг 3
- С помощью контейнера docker запустите Prometheus, выполнив следующие действия
- Создайте файл prometheus.yaml и запишите в него указанный ниже код конфигурации promethues.
#create file sudo vi prometheus.yaml #write configuations in this file global: scrape_interval: 15s # By default, scrape targets every 15 seconds. # Attach these labels to any time series or alerts when communicating with # external systems (federation, remote storage, Alertmanager). external_labels: monitor: 'codelab-monitor' # 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=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # Override global default and scrape targets from this job every 5 seconds. scrape_interval: 5s static_configs: - targets: ['localhost:9090'] #save this file
- После успешного редактирования файла prometheus.yaml необходимо запустить контейнер docker для вышеуказанных конфигураций.
- Выполните следующую команду:
sudo docker run -d --name prometheus -v $(pwd):/etc/config -p 9090:9090 prom/prometheus --config.file=/etc/config/prometheus.yaml
- Давайте разберем эту команду и объясним каждую ее часть:
- docker run: Это команда для запуска контейнера Docker.
- d: запускает контейнер в фоновом режиме (detached mode), позволяя ему продолжать работу даже после закрытия терминальной сессии.
- name prometheus: Присваивает контейнеру имя «prometheus».
-
v $(pwd):/etc/config: Монтирует текущий рабочий каталог ($(pwd)) как том внутри контейнера по пути /etc/config, что позволяет контейнеру получить доступ к конфигурационному файлу Prometheus, расположенному в текущем каталоге.
- p 9090:9090: Сопоставляет порт 9090 хост-машины с портом 9090 контейнера. Это необходимо для доступа к веб-интерфейсу Prometheus, запущенному внутри контейнера.
- prom/prometheus: Указывает образ Docker, который будет использоваться для создания контейнера. В данном случае используется официальный образ Prometheus из Docker Hub.
- config.file=/etc/config/prometheus.yaml: Устанавливает конфигурационный файл для Prometheus внутри контейнера в /etc/config/prometheus.yaml. Это предполагает, что файл конфигурации prometheus.yaml присутствует в текущем каталоге и смонтирован как том.
- Затем выполните команду sudo docker ps`
- Все контейнеры работают.
- Теперь в группе безопасности экземпляра в консоли aws разрешены порты для входящих правил.
- Разрешите следующие правила входящих портов:.
- Порт 9090 для prometheus, порт 49160 для сервера приложений node.js, порт 8080 для apache-сервера, порт 3000 для Grafana, порт 9323 для журналов docker.
- После выполнения всех шагов Вы получите панель Prometheus, как показано здесь: http://<public-ip>:9090.
Задание № 3:
- интегрировать докер-контейнеры и поделиться журналами с Grafana.
- Сначала нам нужно отредактировать конфигурационный файл docker daemon.json в директории etc/docker/daemon.json.
- Если в этой директории нет ни одного файла, создайте файл daemon.json и добавьте в него следующий код:
{
"metrics-addr" : "0.0.0.0:9323", "experimental" : true } #if this code not working then you can try following code { "metrics-addr" : "127.0.0.1:9323", "experimental" : true }
- Чтобы применить это изменение, необходимо перезапустить службу docker sudo systemctl restart docker`.
- Теперь подождите некоторое время, а затем проверьте журналы на http://<public-ip>:9323.
- Вы должны получить логи докера на веб-странице следующего вида:
- Теперь нам нужно добавить новую цель в файл prometheus.yaml следующим образом.
- Добавьте задание Docker в файл prometheus.yaml.
- job_name: 'docker'
scrape_interval: 5s
static_configs:
- targets: ['13.126.86.158:9323']
- После этого шага необходимо перезапустить контейнер Prometheus docker docker restart <container id>`.
- Цель docker будет добавлена в раздел prometheus targets.
Задание № 4:
- проверить журналы и создать дашборд docker с помощью Grafana UI.
- Для того, чтобы создать дашборд в Grafana, необходимо войти в систему с именем пользователя admin и таким же паролем на сайте http://<public-ip>:3000.
- После входа в систему нажмите на кнопку Add your first data source.
- Затем в качестве источника данных выберите Prometheus.
- Теперь введите url сервера Prometheus:
- Теперь нажмите на кнопку Save & Test. При успешном выполнении появится диалоговое окно.
- В Grafana мы можем создавать различные виды дашбордов в зависимости от Ваших потребностей.
- Так, в этом уроке мы создадим дашборд с 4 панелями.
- Первая панель будет отображать количество CPU двигателя, вторая - количество запущенных контейнеров, третья - количество приостановленных контейнеров и последняя - количество остановленных контейнеров.
- Нажмите на Build Dashboard, а затем выберите новую панель.
- В окне Metrics browser выберите engine_daemmon_engine_cpus_cpus`, затем выберите job и имя job - docker. Затем нажмите кнопку Run queries для того, чтобы получить количество CPU двигателя.
- Для добавления второй панели нажмите Add Panel
- В окне выбора браузера Metrics выберите engine_daemmon_container_states_containers`, затем выберите фильтр State и состояние - running. Затем нажмите кнопку Run queries, и Вы получите количество запущенных контейнеров, как показано ниже.
- Для добавления 3 панели нажмите Add Panel.
- В окне выбора браузера Metrics выберите engine_daemmon_container_states_containers`, затем выберите фильтр State и состояние Pause. Затем нажмите кнопку Run queries, и Вы получите количество приостановленных контейнеров, как показано ниже.
- Для добавления 4 панели нажмите Add Panel.
- В окне выбора браузера Metrics выберите engine_daemmon_container_states_containers`, затем выберите фильтр State и состояние - stopped . Затем нажмите кнопку Run queries, и Вы получите количество остановленных контейнеров, как показано ниже.
- Нажмите на кнопку сохранения дашборда и присвойте ему имя.
- Если произойдет сбой, или какой-либо контейнер выйдет из строя, Вы сможете узнать об этом в режиме реального времени.
- В результате дашборд будет выглядеть следующим образом:





















