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

Packetbeat позволяет отслеживать в реальном времени сетевой трафик протоколов уровня приложений, таких как HTTP и MySQL, а также DNS и другие сервисы.

Для этого на клиентской машине нужно настроить агент-отправитель (shipper), который будет собирать и анализировать сетевой трафик, а также преобразовывать транзакции. После сбора и обработки данных агент генерирует отчеты по каждому своему действию и отправляет их в Elasticsearch или Logstash. Полученные данные можно анализировать и визуализировать в Kibana.

Данное руководство поможет настроить Packetbeat для работы со стеком ELK и визуализировать метрики инфраструктуры с помощью этой связки.

Требования

  • Сервер CentOS 7, 4GB RAM минимум.
  • Предварительно установленный стек ELK (только на первом сервере).
  • Еще один сервер CentOS 7 с любым объёмом памяти.
  • Пользователь с доступом к sudo на каждом сервере (об этом можно узнать в этой статье).

1: Загрузка шаблона индекса Packetbeat в Elasticsearch

Чтобы приложение Packetbeat могло отправлять логи в Elasticsearch, нужно загрузить в Elasticsearch шаблон индекса Packetbeat. Это позволит Elasticsearch правильно анализировать входящие данные Packetbeat.

Войдите на сервер, на котором установлен стек ELK, и загрузите шаблон Packetbeat в домашний каталог:

cd ~
curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json

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

curl -XPUT 'http://localhost:9200/_template/packetbeat' -d@packetbeat.template-es2x.json

Если шаблон успешно загружен, на экране появится вывод:

{"acknowledged":true}

Теперь сервер ELK может читать данные Packetbeat.

2: Установка Packetbeat на клиентский сервер

Чтобы установить агент Packetbeat, нужно получить SSL-сертификат. Это позволит установить соединение между клиентскими серверами и сервером ELK.

Примечание: Чтобы получить SSL-сертификат, обратитесь к этому разделу нашего Информатория.

Узнайте IP-адрес клиентского сервера. Перейдите на сервер ELK и скопируйте SSL-сертификат на клиент с помощью команды:

scp /etc/pki/tls/certs/logstash-forwarder.crt 8host@your_client_server_private_ip_address:/tmp

Примечание: Вместо 8host укажите имя пользователя, место your_client_server_private_ip_address – внутрений ip сервера.

Введите пароль. Убедитесь, что сертификат был скопирован успешно.

Перейдите на клиентский сервер.

ssh 8host@your_client_server_ip_address

После этого скопируйте SSL-сертификат сервера ELK в каталог /etc/pki/tls/certs:

sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

Теперь можно установить Packetbeat. На клиентской машине запустите следующую команду, которая импортирует открытый GPG-ключ Elasticsearch в rpm:

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

Создайте и отредактируйте файл репозитория Packetbeat:

sudo vi /etc/yum.repos.d/elastic-beats.repo

Вставьте в файл следующий код:

[beats] name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

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

Установите пакет Packetbeat:

sudo yum update
sudo yum -y install packetbeat

Приложение Packetbeat установлено, теперь его нужно настроить.

3: Настройка Packetbeat на клиенте

Приложению Packetbeat нужно знать, какие данные отслеживать и куда отправлять собранные метрики. Подключите его к Logstash и укажите, какой вид трафика нужно отслеживать.

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

sudo vi /etc/packetbeat/packetbeat.yml

Примечание: Конфигурационный файл Packetbeat использует формат YAML, в котором очень важны все отступы.

В начале файла вы увидите раздел input, в котором вы можете задать метрики, которые нужно отправлять на сервер ELK. В данном руководстве мы используем настройки input по умолчанию, при необходимости вы можете изменить их самостоятельно.

Далее нужно выбрать сетевой интерфейс, с которого Packetbeat будет собирать трафик. В Linux приложение Packetbeat может собирать все сообщения, отправленные или полученные сервером, на котором оно установлено. Потому указывать конкретное устройство не нужно.

# Select the network interfaces to sniff the data. You can use the "any"
# keyword to sniff on all connected interfaces.
interfaces:
device: any

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

protocols:
dns:
ports: [53] include_authorities: true
include_additionals: true
http:
ports: [80, 8080, 8081, 5000, 8002] memcache:
ports: [11211] mysql:
ports: [3306] pgsql:
ports: [5432] redis:
ports: [6379] thrift:
ports: [9090] mongodb:
ports: [27017]

Теперь нужно указать Packetbeat, куда отправлять данные.

В разделе output найдите строку elasticsearch:, которая настраивает вывод данных в Elasticsearch. Эти настройки не нужны; удалите или закомментируйте весь раздел, начиная со строк:

### Elasticsearch as output
elasticsearch:
# Array of hosts to connect to.
# Scheme and port can be left out and will be set to the default (http and 9200)
...

И заканчивая строкой:

...
### Logstash as output

В данном случае Packetbeat будет отправлять данные не в Elasticsearch, а в Logstash. Найдите закомментированный раздел настроек Logstash, который начинается со строки #logstash:, и полностью раскомментируйте его. После этого раскомментируйте строку hosts: [“localhost:5044”] и замените localhost внутренним IP-адресом сервера ELK. Этот раздел должен выглядеть так:

### Logstash as output
logstash:
# The Logstash hosts
hosts: ["your_ELK_server_private_ip_address:5044"]

Теперь Packetbeat будет подключаться к Logstash на сервере ELK через порт 5044 (это специальный порт для входных данных Logstash).

Затем найдите раздел tls и раскомментируйте строки tls: и certificate_authorities. Замените значение certificate_authorities строкой [“/etc/pki/tls/certs/logstash-forwarder.crt”]:

tls:
# List of root certificates for HTTPS server verifications
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

Теперь Packetbeat может использовать сертификат сервера ELK. Без доступа к сертификату клиент не сможет подключиться к серверу.

Проверьте конфигурационный файл и все отступы в нём. Файл должен выглядеть так:

############################# Sniffer #########################################
interfaces:
device: any
############################# Protocols #######################################
protocols:
dns:
ports: [53] include_authorities: true
include_additionals: true
http:
ports: [80, 8080, 8081, 5000, 8002] memcache:
ports: [11211] mysql:
ports: [3306] pgsql:
ports: [5432] redis:
ports: [6379] thrift:
ports: [9090] mongodb:
ports: [27017] ############################# Output ##########################################
output:
### Logstash as output
logstash:
hosts: ["your_ELK_server_private_ip_address:5044"] tls:
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] ############################# Logging #########################################
logging:
files:
rotateeverybytes: 10485760 # = 10MB

Убедившись, что в файле нет ошибок, сохраните и закройте его.

Чтобы обновить настройки, запустите Packetbeat.

sudo systemctl start packetbeat

Настройте автозапуск Packetbeat во время загрузки сервера:

sudo systemctl enable packetbeat

Примечание: Повторите эти действия на каждом клиенте вашей инфраструктуры, данные которого нужно отслеживать.

4: Тестирование установки Packetbeat

На данный момент Packetbeat на клиентском сервере может передавать логи сетевого трафика в Logstash на сервер ELK. Logstash будет загружать данные Packetbeat в Elasticsearch (индекс packetbeat-YYYY.MM.DD). Убедитесь, что программы взаимодействуют должным образом. Создайте простой запрос HTTP для клиентской машины и просмотрите этот запрос в Elasticsearch на сервере.

Перейдите на клиентский сервер и создайте запрос к http://www.elastic.co:

curl http://www.elastic.co/ > /dev/null

Затем перейдите на машину ELK и убедитесь, что программа Elasticsearch получила все данные:

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

Команда должна вернуть такие данные:

{
"hits" : {
"total" : 3,
"max_score" : 1.0,
"hits" : [ {
"_index" : "packetbeat-2016.11.13",
"_type" : "dns",
"_id" : "AVheUqX0CSBq6gd6x-Oj",
"_score" : 1.0,
"_source" : {
"direction" : "out",
"server" : "",
"responsetime" : 49,
"resource" : "www.elastic.co",
"dns" : {
"additionals_count" : 0,
"answers" : [ {
"class" : "IN",
"data" : "2406:da00:ff00::6b16:f086",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
}, {
"class" : "IN",
"data" : "2406:da00:ff00::b849:ab0e",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
}, {
"class" : "IN",
"data" : "2406:da00:ff00::ccec:d96c",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
} ],
"answers_count" : 3,
"authorities_count" : 0,
"flags" : {
"authoritative" : false,
"recursion_allowed" : true,
"recursion_desired" : true,
"truncated_response" : false
},
"id" : 26078,
"op_code" : "QUERY",
"question" : {
"class" : "IN",
"name" : "www.elastic.co",
"type" : "AAAA"
},
"response_code" : "NOERROR"
},
"method" : "QUERY",
"count" : 1,
"client_ip" : "your_client_server_ip",
"proc" : "",
"transport" : "udp",
"status" : "OK",
"ip" : "8.8.8.8",
"client_port" : 52505,
"client_server" : "",
"port" : 53,
"@timestamp" : "2016-11-13T15:33:43.500Z",
"type" : "dns",
"query" : "class IN, type AAAA, www.elastic.co",
"client_proc" : "",
"beat" : {
"hostname" : "your_client_server_hostname",
"name" : "your_client_server_hostname"
},
"bytes_in" : 32,
"bytes_out" : 116,
"@version" : "1",
"host" : "your_client_server_hostname",
"tags" : [ "beats_input_raw_event" ] }
...
...
} ] }
}

Если команда не вернула никаких данных, то Elasticsearch не получает никаких данных от Packetbeat. Подождите несколько секунд и запросите данные снова; иногда на загрузку данных в Elasticsearch уходит некоторое время. Если вы по-прежнему не получили ожидаемого результата, убедитесь, что вы правильно настроили все программы. В частности нужно проверить конфигурационный файл Packetbeat.

5: Визуализация данных с помощью Kibana

Настроив Packetbeat на всех клиентских серверах, приступайте к настройке Kibana.

В веб-браузере откройте FQDN или IP-адрес сервера ELK. Введите его учётные данные. На экране появится приветственная страница Kibana.

Примечание: Чтобы войти, введите учётные данные Kibana, выбранные во время установки.

Откройте вкладку Settings. Выберите packetbeat-* в меню Index Patterns.

Затем откройте вкладку Discover. Здесь вы можете просматривать и фильтровать различные записи Packetbeat, добавлять в просмотр новые поля и визуализировать их.

Kibana предоставляет множество возможностей для визуализации данных. чтобы просмотреть доступные варианты или запустить сохраненные визуализации, откройте вкладку Visualize.

Также нужно проверить загруженный в начале дашборд Packetbeat. Кликните Dashboard → Load Saved Dashboard, вы увидите список доступных фильтров. Выберите Packetbeat-Dashboard. Поскольку на данный момент приложение Packetbeat смогло собрать всего несколько запросов, на экране появится No results found. Ниже вы найдёте ряд метрик, собранных с клиентского сервера.

Читайте также: Документация Packetbeat

Заключение

Теперь системные метрики централизованы при помощи Elasticsearch и Logstash. Вы можете визуализировать их при помощи Kibana. У вас есть быстрый доступ к статистике инфраструктуры. Теперь вы можете изучить другие агенты, например, Filebeat или Topbeat. Больше информации можно найти здесь.

Читайте также: Сбор метрик инфраструктуры с помощью Topbeat и ELK в CentOS 7

Tags: , , , , ,

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