Как собрать метрики инфраструктуры с помощью Packetbeat и ELK в Ubuntu 14.04

Вступление

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

Для этого вы настраиваете агентов, называемых «грузоотправителями», на клиентских машинах, которые анализируют и анализируют сетевой трафик и сопоставляют сообщения с транзакциями. Эти грузоотправители затем генерируют записи для каждого действия и отправляют их в Elasticsearch или Logstash. Когда у вас есть данные, вы можете искать, анализировать и визуализировать данные с помощью Kibana, чтобы вы могли принимать обоснованные решения о вашей инфраструктуре или решать проблемы.

В этом руководстве вы сконфигурируете и используете Packetbeat со стеком ELK для сбора и визуализации показателей инфраструктуры.

Предпосылки

  • Один сервер Ubuntu 14.04 с 4 ГБ оперативной памяти, настроенный с помощью стека ELK, описанного в учебном руководстве https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack -on-ubuntu-14-04 [Как установить Elasticsearch, Logstash и Kibana в Ubuntu 14.04]. Следуйте инструкциям по настройке стека ELK и установке панелей управления Kibana, но не настраивайте клиентские машины.

  • Один сервер Ubuntu 14.04 с любым объемом оперативной памяти, который будет служить клиентским компьютером.

  • Стандартная учетная запись пользователя с привилегиями + sudo + * для каждого сервера *. Вы можете настроить стандартную учетную запись, выполнив шаги 2 и 3 Initial Server Setup с Ubuntu 14.04 руководство.

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

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

Сначала войдите на свой сервер ELK:

ssh @

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

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

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

curl -XPUT 'http://localhost:9200/_template/packetbeat' [email protected]

Вы увидите вывод, если шаблон был успешно загружен.

Output{"acknowledged":true}

Теперь, когда ваш сервер ELK готов принимать данные от Packetbeat, давайте настроим грузоотправителя на клиентском сервере.

Шаг 2 - Настройка Packetbeat на клиентском сервере

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

Найдите IP-адрес вашего клиентского сервера. Затем * на своем сервере ELK * скопируйте сертификат SSL на свой клиентский сервер с помощью команды + scp +:

scp /etc/pki/tls/certs/logstash-forwarder.crt :/tmp

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

Теперь войдите на ваш * клиентский сервер *:

ssh

После входа скопируйте сертификат SSL сервера ELK в каталог ++:

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

Далее нам нужно установить сам Packetbeat. На вашем клиентском сервере убедитесь, что список источников Beats существует. Откройте файл ++ для редактирования:

sudo nano /etc/apt/sources.list.d/beats.list

Если вы ранее установили грузоотправители, этот файл может уже содержать следующую строку:

/etc/apt/source.list.d/beats.list

deb https://packages.elastic.co/beats/apt stable main

Если файл пуст или эта строка не существует, добавьте ее и сохраните файл. Затем выйдите из редактора.

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

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

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

sudo apt-get update
sudo apt-get install packetbeat

Packetbeat теперь установлен, но его необходимо настроить перед использованием.

Шаг 3 - Настройка Packetbeat на клиенте

Packetbeat должен знать, что регистрировать и куда отправлять данные. Давайте настроим его для подключения к Logstash на нашем сервере ELK и определим, какой трафик мы хотим видеть. Мы сделаем это, изменив файл конфигурации по умолчанию, который поставляется с Packetbeat.

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

sudo nano /etc/packetbeat/packetbeat.yml

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

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

packetbeat.yml

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

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

packetbeat.yml

protocols:
 dns:
   ports:

   include_authorities: true
   include_additionals: true

 http:
   ports:

 memcache:
   ports:

 mysql:
   ports:

 pgsql:
   ports:

 redis:
   ports:

 thrift:
   ports:

 mongodb:
   ports:

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

В разделе + output + найдите строку, начинающуюся с +asticsearch: +, которая указывает на раздел вывода Elasticsearch. Мы не собираемся использовать этот раздел, поэтому * удалите или закомментируйте весь раздел вывода Elasticsearch *, вплоть до строки, которая говорит + # logstash: +).

Начните удалять здесь:

packetbeat.yml

 ### 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)

   ...

И продолжайте удалять, пока не найдете эту строку:

packetbeat.yml

 ### Logstash as output

Вместо того, чтобы отправлять данные в Elasticsearch, мы собираемся отправить их в Logstash. Поэтому найдите закомментированный раздел вывода Logstash, обозначенный строкой, которая начинается с + # logstash:. + Раскомментируйте эту строку, удалив предыдущий + # +. Затем раскомментируйте строку ++ и замените + localhost + на частный IP-адрес вашего сервера ELK. Раздел файла конфигурации должен выглядеть следующим образом:

packetbeat.yml

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

Это конфигурирует Packetbeat для подключения к Logstash на вашем сервере ELK через порт + 5044 +, порт, который мы указали для входа Logstash в предварительном учебнике.

Затем найдите раздел + tls + и удалите комментарий перед + tls: +. Затем раскомментируйте строку, которая задает + certificate_authorities +, и измените ее значение на ++:

packetbeat.yml

   tls:
     # List of root certificates for HTTPS server verifications
     certificate_authorities: []

Это настраивает Packetbeat для использования сертификата, который мы скопировали с сервера ELK. Без этого клиент не сможет установить соединение.

Если вы хотите перепроверить файл конфигурации, сравните ваш с этим примером, в котором пропущено большинство ненужных комментариев для улучшения читабельности:

packetbeat.yml

############################# Sniffer #########################################
interfaces:
 device: any

############################# Protocols #######################################
protocols:
 dns:
   ports:

   include_authorities: true
   include_additionals: true

 http:
   ports:

 memcache:
   ports:

 mysql:
   ports:

 pgsql:
   ports:

 redis:
   ports:

 thrift:
   ports:

 mongodb:
   ports:

############################# Output ##########################################
output:

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

   tls:
     certificate_authorities: []

############################# Logging #########################################
logging:

 files:
   rotateeverybytes: 10485760 # = 10MB

После того, как вы проверили свою конфигурацию, сохраните файл и выйдите из текстового редактора.

Теперь перезапустите Packetbeat, чтобы изменения вступили в силу:

sudo service packetbeat restart

И настройте Packetbeat на запуск при перезагрузке сервера:

sudo update-rc.d packetbeat defaults 95 10

Повторите этот раздел для любых других серверов, которые вы хотите отслеживать.

Теперь Packetbeat должен прослушивать сетевой трафик и отправлять его в Logstash. Давайте посмотрим, работает ли это.

Шаг 4 - Тестирование установки Packetbeat

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

На вашем клиентском сервере используйте + curl, чтобы сделать запрос к` + http: // www.elastic.co`.

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

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

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

Вы должны увидеть кучу выходных данных, которые выглядят так:

Output{
 "_index" : "packetbeat-2016.09.19",
 "_type" : "http",
 "_id" : "AVdDG6pDqHsDFrI4DAlI",
 "_score" : 1.0,
 "_source" : {
   "responsetime" : 80,
   "path" : "/",
   "beat" : {
     "hostname" : "",
     "name" : ""
   },
   "direction" : "out",
   "port" : 80,
   "server" : "",
   "status" : "OK",
   "params" : "",
   "count" : 1,
   "client_port" : 52072,
   "client_proc" : "",
   "ip" : "",
   "bytes_out" : 432,
   "bytes_in" : 78,
   "query" : "GET /",
   "http" : {
     "code" : 301,
     "content_length" : 178,
     "phrase" : "Permanently"
   },
   "proc" : "",
   "client_ip" : "",
   "client_server" : "",
   "@timestamp" : "2016-09-19T15:41:07.725Z",
   "type" : "http",
   "method" : "GET",
   "@version" : "1",
   "host" : "",
   "tags" : [ "beats_input_raw_event" ]
 }
}

Если ваши выходные данные показывают 0 полных попаданий, Elasticsearch не загружает данные Packetbeat по индексу, который вы искали, и вам следует повторить попытку через несколько секунд, так как это может занять короткое время для сбора данных. Если вы все еще не видите результатов после ожидания, проверьте настройки на наличие ошибок. Убедитесь, что вы указали файл конфигурации Packetbeat на сертификате, который вы передали, так как это произойдет автоматически, если путь указан неверно.

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

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

Когда вы закончите настройку Packetbeat на всех серверах, для которых вы хотите собирать системную статистику, давайте посмотрим на Kibana.

В веб-браузере перейдите по имени домена или общедоступному IP-адресу вашего сервера ELK. После ввода учетных данных сервера ELK вы должны увидеть страницу «Обнаружение Kibana».

Нажмите на вкладку * Настройки * в верхней части страницы. Теперь выберите * packetbeat - ** в меню * Index Patterns * в левой части интерфейса:

изображение: https: //assets.digitalocean.com/articles/packetbeat_elk_1404/xEiHGsR.png [Выбрать шаблон индекса Packetbeat]

Затем выберите вкладку * Discover * в верхней части экрана, чтобы просмотреть эти данные. На экране вы увидите следующее:

изображение: https: //assets.digitalocean.com/articles/packetbeat_elk_1404/unu8HfX.png [записи журнала Packetbeat]

Отсюда вы можете просмотреть свои различные записи Packetbeat, отфильтровав доступные поля. Вы можете нажать на эти поля, чтобы добавить их, или визуализировать их с помощью агрегации (счет, сумма, минимум, максимум, медиана и т. Д.).

Далее, посмотрите образец панели инструментов Packetbeat, которую мы загрузили в начале этого урока. Нажмите вкладку * Dashboard * в верхней части экрана, затем щелкните значок * Load Saved Dashboard * в правой части экрана. Вы увидите список фильтров панели мониторинга в виде разбитых на страницы предложений:

image: https: //assets.digitalocean.com/articles/packetbeat_elk_1404/1VMHooN.png [Просмотреть примеры типов панели инструментов Packetbeat]

Выберите * Packetbeat-Dashboard * из списка предложений. Так как в нашем индексе есть только несколько веб-запросов в качестве документов, панель инструментов приведет к * Не найдено результатов * для БД, кэша, транзакций RPC или других результатов.

image: https: //assets.digitalocean.com/articles/packetbeat_elk_1404/CASK3Oi.png [Просмотреть пример верхней панели инструментов Packetbeat]

Но если вы прокрутите вниз, вы увидите множество показателей, собранных с ваших клиентских серверов, на которых вы установили Packetbeat.

image: https: //assets.digitalocean.com/articles/packetbeat_elk_1404/dSLeCQ0.png [Просмотреть пример панели инструментов Packetbeat Bottom]

Отсюда вы можете создавать графики на основе данных индекса. Например, вы можете создать диаграмму, которая показывает разбивку HTTP-запросов на основе времени ответа, что может помочь отследить медленные ответы от ваших веб-приложений. И вы можете углубиться в детали, используя подгруппы, чтобы найти время отклика для каждого кода, посещенных доменов и многое другое. Вы можете изучить Packetbeat документацию, чтобы узнать больше.

Заключение

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

Related