Сбор метрик инфраструктуры с помощью Metricbeat в CentOS 7

Metricbeat входит в группу программного обеспечения Beats, которая помогает передавать различные типы данных на сервер Elastic Stack. Metricbeat – это легкий отправитель данных, который после установки на сервер периодически собирает статистику CPU и памяти (глобально и по отдельным процессам), а потом передает эти данные в Elasticsearch. Этот отправитель может заменить Topbeat в версии 5.0 стека Elastic Stack.

Также сейчас доступны другие отправители:

  • Filebeat: собирает и передает логи.
  • Packetbeat: собирает и анализирует сетевые данные.
  • Winlogbeat: собирает логи событий Windows.
  • Auditbeat: собирает данные инфраструктуры аудита Linux и проверяет целостность файлов.
  • Heartbeat: мониторит доступность сервисов.

В этом мануале вы научитесь использовать Metricbeat для передачи метрик локальной системы (использование CPU, памяти, диска и сети) с сервера CentOS 7 на другую машину с установкой Elastic Stack. Также вы узнаете, как собирать базовые метрики, отражающие текущее состояние сервера.

Требования

  • Два сервера CentOS 7, настроенные по этому мануалу. На этих серверах должен быть пользователь sudo и включенный брандмауэр firewalld. Первый сервер будет называться сервером Elastic Stack – это сервер с экземпляром Elastic, который будет мониторить второй сервер (он, в свою очередь называется просто сервер Ubuntu).
  • Установить Elastic Stack на первый сервер можно с помощью мануала Установка стека Elastic в CentOS 7.

Читайте также: Дополнительные рекомендации по настройке сервера CentOS 7

Примечание: При установке стека Elastic версии всех компонентов должны совпадать. Здесь мы используем последние версии Elasticsearch 6.7.0, Kibana 6.7.0, Logstash 6.7.0 и Metricbeat 6.7.0.

1: Настройка Elasticsearch для прослушивания трафика по внешним IP

Мануал по установке стека Elastic ограничивает доступ Elasticsearch локальным хостом. Однако на практике такая настройка используется редко, поскольку обычно стек мониторит много хостов. Давайте настроим компоненты Elastic для взаимодействия с внешними IP-адресами.

Войдите на сервер Elastic Stack как пользователь sudo.

ssh 8host@Elastic_Stack_server_ip

Откройте главный конфигурационный файл Elasticsearch, elasticsearch.yml, в текстовом редакторе.

sudo vi /etc/elasticsearch/elasticsearch.yml

Найдите следующий раздел и измените его так, чтобы Elasticsearch мог слушать все интерфейсы:

. . .
network.host: 0.0.0.0
. . .

Адресу 0.0.0.0 присваиваются определенные значения в нескольких контекстах. В этом случае 0.0.0.0 означает «любой адрес IPv4».

Сохраните и закройте файл elasticsearch.yml (Esc, затем :wq и Enter).

Читайте также: Установка и использование текстового редактора Vim

Затем перезапустите сервис Elasticsearch с помощью systemctl, чтобы применить новые настройки:

sudo systemctl restart elasticsearch

Теперь нужно открыть порт Elasticsearch для второго сервера CentOS. Для этого используйте функцию rich rule (богатые правила) firewalld.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="second_centos_server_ip/32" port protocol="tcp" port="9200" accept'

Так называемые «богатые правила» позволяют вам создавать более сложные и гибкие правила firewalld. В этой команде использовано правило, которое принимает трафик ipv4 из source (это IP-адрес второго сервера CentOS) на port 9200 вашего сервера Elastic Stack.

Затем перезагрузите firewalld, чтобы активировать новое правило:

sudo firewall-cmd --reload

Повторите эту команду для каждого из ваших серверов, если у вас их больше двух. Если ваши серверы находятся в одной сети, вы можете разрешить доступ, используя одно правило для всех хостов в сети. Для этого вам необходимо заменить префикс /32 на более низкое значение, например /24.

Затем проверьте соединение. Войдите на второй сервер CentOS как пользователь sudo:

ssh 8host@second_centos_server_ip

Используйте команду curl  для проверки соединения с сервером Elastic Stack.

curl Elastic_Stack_server_ip:9200

Вы получите следующий вывод:

{
"name" : "tl5Is5f",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "W9AcSNWHQ3mYs2uE8odklA",
"version" : {
"number" : "6.7.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "3bd3e59",
"build_date" : "2019-03-06T15:16:26.864148Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

Теперь вы можете отправлять метрики на сервер Elastic Stack.

2: Установка и настройка Metricbeat на сервере Elastic Stack

Сейчас нужно установить Metricbeat на сервер Elastic Stack и импортировать все необходимые данные, а затем установить и настроить клиент на втором сервере CentOS.

Войдите на сервер Elastic Stack:

ssh 8host@Elastic_Stack_server_ip

Поскольку вы настроили репозитории Elasticsearch ранее (согласно требованиям), сейчас вам нужно только установить Metricbeat:

sudo yum install metricbeat

После завершения установки Metricbeat загрузите шаблон индекса в Elasticsearch. Индекс Elasticsearch – это набор документов, имеющих сходные характеристики. Каждый индекс, который Elasticsearch будет использовать для ссылки на индексы при выполнении различных операций, определяют конкретные имена. Ваш сервер Elasticsearch автоматически применяет шаблон индекса при создании нового индекса.

Чтобы загрузить шаблон, используйте команду:

sudo metricbeat setup --template -E 'output.elasticsearch.hosts=["localhost:9200"]'

Вы получите вывод:

Loaded index template

Metricbeat поставляется с образцами дашбордов Kibana. Прежде чем вы сможете использовать эти дашборды, вам нужно создать шаблон индекса и загрузить дашборды в Kibana.

Чтобы загрузить шаблоны, используйте следующую команду:

sudo metricbeat setup -e -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
2019-03-20T09:51:32.096Z        INFO    instance/beat.go:281    Setup Beat: metricbeat; Version: 6.7.0
2019-03-20T09:51:32.136Z        INFO    add_cloud_metadata/add_cloud_metadata.go:323    add_cloud_metadata: hosting provider type detected as digitalocean, metadata={"instance_id":"133130541","provider":"digitalocean","region":"fra1"}
2019-03-20T09:51:32.137Z        INFO    elasticsearch/client.go:165     Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.137Z        INFO    [publisher]     pipeline/module.go:110  Beat name: elastic
2019-03-20T09:51:32.138Z        INFO    elasticsearch/client.go:165     Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.140Z        INFO    elasticsearch/client.go:721     Connected to Elasticsearch version 6.7.0
2019-03-20T09:51:32.148Z        INFO    template/load.go:130    Template already exists and will not be overwritten.
2019-03-20T09:51:32.148Z        INFO    instance/beat.go:894    Template successfully loaded.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2019-03-20T09:51:32.149Z        INFO    elasticsearch/client.go:165     Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.150Z        INFO    elasticsearch/client.go:721     Connected to Elasticsearch version 6.7.0
2019-03-20T09:51:32.151Z        INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2019-03-20T09:51:56.209Z        INFO    instance/beat.go:741    Kibana dashboards successfully loaded.
Loaded dashboards

Теперь можно запустить Metricbeat:

sudo systemctl start metricbeat

Чтобы добавить сервис в автозагрузку, введите:

sudo systemctl enable metricbeat

Metricbeat начнет передавать метрики вашей системы в Elasticsearch.

Чтобы убедиться в том, что Elasticsearch действительно получает эти данные, запросите индекс Metricbeat с помощью этой команды:

curl -XGET 'http://localhost:9200/metricbeat-*/_search?pretty'

Вы получите такой результат:

...
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 108,
"max_score" : 1.0,
"hits" : [
{
"_index" : "metricbeat-6.7.0-2019.03.20",
"_type" : "doc",
"_id" : "A4mU8GgBKrpxEYMLjJZt",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2019-03-20T09:54:52.481Z",
"metricset" : {
"name" : "network",
"module" : "system",
"rtt" : 125
},
"event" : {
"dataset" : "system.network",
"duration" : 125260
},
"system" : {
"network" : {
"in" : {
"packets" : 59728,
"errors" : 0,
"dropped" : 0,
"bytes" : 736491211
},
"out" : {
"dropped" : 0,
"packets" : 31630,
"bytes" : 8283069,
"errors" : 0
},
"name" : "eth0"
}
},
"beat" : {
"version" : "6.7.0",
"name" : "elastic",
"hostname" : "elastic"
},
...

Строка «total» : 108 указывает, что Metricbeat нашел 108 результатов по этой конкретной метрике. Если ваш вывод показывает total 0, вам нужно будет проверить настройки на наличие ошибок. Если вы получили ожидаемый результат, перейдите к следующему разделу, в котором вы установите Metricbeat на втором сервере CentOS.

3: Установка Metricbeat на сервер CentOS

Выполните этот шаг на всех серверах Ubuntu, метрики которых вы хотите отправлять на сервер Elastic Stack.

Войдите на свой второй сервер CentOS как пользователь sudo:

ssh 8host@second_centos_server_ip

Компоненты Elastic Stack недоступны в репозиториях пакетов CentOS по умолчанию. Но вы можете установить их с помощью APT после добавления списка источников Elastic.

Все пакеты Elastic Stack подписаны с помощью ключа Elasticsearch, чтобы защитить вашу систему от подделки пакетов. Ваш менеджер пакетов будет доверять пакетам, которые были аутентифицированы этим ключом. Сейчас нужно импортировать открытый ключ GPG Elasticsearch и добавить список источников Elastic для установки Metricbeat.

Для начала выполните следующую команду, чтобы импортировать и установить открытый ключ Elasticsearch:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Затем добавьте репозиторий Elastic. Создайте файл elasticsearch.repo в каталоге /etc/yum.repos.d/.

sudo vi /etc/yum.repos.d/elasticsearch.repo

Чтобы предоставить yum информацию, необходимую для загрузки и установки компонентов Elastic Stack, войдите в режим вставки, нажав i, и добавьте в файл следующие строки:

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Сохраните и закройте файл.

Затем установите Metricbeat:

sudo yum install metricbeat

После завершения установки Metricbeat настройте его для подключения к Elasticsearch. Откройте конфигурационный файл metricbeat.yml:

sudo vi /etc/metricbeat/metricbeat.yml

Примечание: Файл Metricbeat представлен в формате YAML.

Metricbeat поддерживает множество выходных данных, но обычно события отправляются непосредственно в Elasticsearch или в Logstash для дополнительной обработки. Найдите следующий раздел и обновите IP-адрес:

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["Elastic_Stack_server_ip:9200"]
...

Сохраните и закройте файл.

Вы можете расширить функциональность Metricbeat с помощью модулей. В этом руководстве мы будем использовать модуль system, который позволит вам отслеживать статистику вашего сервера, такую как использование ЦП, памяти, диска и сети.

В этом случае модуль system включен по умолчанию. Вы можете просмотреть список включенных и отключенных модулей, запустив команду:

sudo metricbeat modules list

Вы увидите:

Enabled:
system
Disabled:
aerospike
apache
ceph
couchbase
docker
dropwizard
elasticsearch
envoyproxy
etcd
golang
graphite
haproxy
http
jolokia
kafka
kibana
kubernetes
kvm
logstash
memcached
mongodb
munin
mysql
nginx
php_fpm
postgresql
prometheus
rabbitmq
redis
traefik
uwsgi
vsphere
windows
zookeeper

Вы можете увидеть параметры модуля в файле /etc/metricbeat/modules.d/system.yml. В данном случае вам не нужно ничего менять в конфигурации. Метриками по умолчанию являются cpu, load, memory, network, process и process_summary. Каждый модуль имеет один или несколько метрик. Метрика – это часть модуля, которая извлекает и структурирует данные. Вместо того чтобы собирать каждую метрику как отдельное событие, наборы метрик получают список нескольких связанных метрик в одном запросе к удаленной системе.

Запустите Metricbeat и добавьте его в автозагрузку:

sudo systemctl start metricbeat
sudo systemctl enable metricbeat

Вам нужно повторить этот шаг на всех серверах, метрики которых вы хотите собирать.

4: Работа с дашбордами Kibana

Теперь пора познакомиться с Kibana, веб-интерфейсом, который вы установили во время установки стека Elastic.

В веб-браузере откройте полное доменное имя или внешний IP-адрес сервера Elastic Stack. После ввода учетных данных (которые вы определили в разделе 2 в мануале по установке Elastic Stack), вы увидите домашнюю страницу Kibana.

Нажмите Discover в левой панели навигации. На странице Discover выберите предопределенный шаблон индекса meticbeat-*, чтобы увидеть данные Metricbeat. По умолчанию будут показаны все данные лога за последние 15 минут. Вы увидите гистограмму с событиями и некоторыми сообщениями о метриках.

Здесь вы можете искать и просматривать свои метрики, а также настраивать дашборды. На данный момент, однако, там не будет много данных, потому что сейчас данные системы только собираются.

Используйте левую панель, чтобы перейти на страницу Dashboard и выполнить поиск по Metricbeat System. Оказавшись там, вы можете искать примеры дашбордов, которые поставляются с модулем system для Metricbeat.

Например, вы можете просмотреть краткую информацию обо всех ваших хостах. Также можно кликнуть на имя хоста и получить больше подробностей.

У Kibana есть много других функций, таких как построение графиков и фильтров. Исследуйте их самостоятельно.

Заключение

Теперь вы знаете, как установить и настроить Elastic Stack для сбора и анализа системных метрик. Metricbeat поставляется с встроенными модулями, которые могут собирать метрики разных сервисов (Apache, Nginx, Docker, MySQL, PostgreSQL и многих других). Теперь вы можете собирать и анализировать метрики ваших приложений, просто включая необходимые модули.

Читайте также:

Tags: , , , ,