Сбор метрик через Metricbeat

Metricbeat – это компонент Elastic Stack, который позволяет собирать данные производительности системы или же приложений, которые установлены в операционной системе. MetricBeat поддерживает большое количество модулей. В этой публикации я покажу, как осуществлять сбор метрик через Metricbeat для Linux хоста, а также нескольких приложений – Apache и MySQL.

Примеры развертывания кластера Elasticsearch и хоста с Kibana уже есть в моём блоге. Можете использовать их в качестве опорных руководств по развертывания соответствующих компонентов.

В качестве подопытной операционной системы я буду использовать Rocky Linux 9.3

Схема решения

Логическая схеме решения приведена ниже.

Схема ниже отображает физическую топологию решения.

Подготовка Apache

Установим пакет httpd через менеджер пакетов:

sudo dnf install httpd

После установки нужно включить автоматический запуск и запустить сервис:

sudo systemctl enable httpd
sudo systemctl start httpd

Включим модуль отображения статистики. Для этот откройте конфигурационный файл httpd:

sudo nano /etc/httpd/conf/httpd.conf

Затем добавьте в него следующую конфигурацию:

<Location "/server-status">
  SetHandler server-status
  Require ip 127.0.0.1
</Location>

Перезапустите сервис httpd:

sudo systemctl restart httpd

Подготовка MySQL

Для сервера баз данных MySQL сначала нужно установить пакет:

sudo dnf install mysql mysql-server

Активируем и запустим сервис:

sudo systemctl enable mysqld
sudo systemctl start mysqld

Поскольку для настройки модуля Metricbeat для mysql необходимо указывать комбинацию логина и пароля для подключения к серверу, то зададим пароль для пользователя root:

mysql_secure_installation

На этапе ввода пароля пользователя root укажите его пароль:

Для производственной среды настоятельно рекомендую создавать отдельного пользователя для подключения к MySQL.

Предварительная подготовка сервера MySQL завершена.

Настройка Metricbeat

Процесс настройки на стороне хоста с Metricbeat выглядит следующим образом:

1. Необходимо установить пакет Metricbeat.

2. Активировать модули для Apache и MySQL:

sudo metricbeat modules enable apache mysql
[root@tst05 roman]# metricbeat modules enable apache mysql
Enabled apache
Enabled mysql
[root@tst05 roman]#

3. Откройте на редактирование конфигурационный файл сервиса Metricbeat:

sudo nano /etc/metricbeat/metricbeat.yml

4. Поскольку я буду отправлять данные непосредственно в Elasticsearch, то пеперь необходимо указать параметры подключения. Также я бы хотел автоматически создать в Kibana набор дашбордов. Пример моего конфигурационного файла:

# =========================== Modules configuration ============================

metricbeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false

# ======================= Elasticsearch template setting =======================

setup.template.settings:
  index.number_of_shards: 1
  index.codec: best_compression
  #_source.enabled: false


# ================================== General ===================================
tags: ["apache", "mysql"]

# ================================= Dashboards =================================
# These settings control loading the sample dashboards to the Kibana index. Loading
# the dashboards is disabled by default and can be enabled either by setting the
# options here or by using the `setup` command.
setup.dashboards.enabled: true

# =================================== Kibana ===================================

# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:
  host: "192.168.56.36:5601"
  protocol: "https"
  ssl:
    verification_mode: "none"
  username: "elastic"
  password: "rHb1w-s4lD9bZvuLXqp0"

# ================================== Outputs ===================================

# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.56.40:9200","192.168.56.37:9200"]

  # Performance preset - one of "balanced", "throughput", "scale",
  # "latency", or "custom".
  preset: balanced

  # Protocol - either `http` (default) or `https`.
  protocol: "https"
  ssl:
    verification_mode: "none"

  # Authentication credentials - either API key or username/password.
  username: "elastic"
  password: "rHb1w-s4lD9bZvuLXqp0"

# Configure processors to enhance or manipulate events generated by the beat.

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

Поскольку в тестовой среде я использую самоподписанный сертификат, то я пропускаю шаг проверки SSL сертификата.

По умолчанию создаются все дашборды. Можно создать только отдельные дашборды.

5. Теперь скорректируем файл конфигурации модуля Apache для Metricbeat:

sudo nano /etc/metricbeat/modules.d/apache.yml
# Module: apache
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/8.13/metricbeat-module-apache.html

- module: apache
  metricsets:
    - status
  period: 10s
  hosts: ["http://127.0.0.1"]
  #username: "user"
  #password: "secret"

6. Далее скорректируем файл конфигурации модуля MySQL для Metricbeat. Необходимо будет указать учетные данные для подключения к серверу MySQL:

sudo nano /etc/metricbeat/modules.d/mysql.yml
# Module: mysql
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/8.13/metricbeat-module-mysql.html

- module: mysql
  metricsets:
    - status
  #  - galera_status
    - performance
  #  - query
  period: 10s

  # Host DSN should be defined as "user:pass@tcp(127.0.0.1:3306)/"
  # or "unix(/var/lib/mysql/mysql.sock)/",
  # or another DSN format supported by <https://github.com/Go-SQL-Driver/MySQL/>.
  # The username and password can either be set in the DSN or using the username
  # and password config options. Those specified in the DSN take precedence.
  hosts: ["root:Qwerty123@tcp(127.0.0.1:3306)/"]

  # Username of hosts. Empty by default.
  #username: root

  # Password of hosts. Empty by default.
  #password: secret

7. Перезапустите сервис Metricbeat:

sudo systemctl restart metricbeat

Проверка

Настало время выполнить проверку нашего стенда:

1. Сначала проверим – создались ли дашборды в Kibana:

https://192.168.56.36:5601/app/dashboards

2. Теперь проверим дашборд для Linux хоста – “[Metricbeat System] Host overview ECS”:

3. Далее проверим дашборд Apache – “[Metricbeat Apache] Overview ECS”.

4. Заключительным шагом проверим дашборд для MySQL – “[Metricbeat MySQL] Database Overview”:

Если что-то пошло не так

В ходе настройки и отладки мне было достаточно просмотра журналов сервиса Metricbeat:

sudo journalctl -ru metricbeat

Сбор метрик через Metricbeat: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *