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

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

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

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

Требования

  • Сервер Ubuntu 14.04, минимум 4GB RAM.
  • Предварительно установленный стек ELK (только на первом сервере).
  • Еще один сервер Ubuntu 14.04 с любым объёмом памяти.
  • Пользователь с доступом к 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

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

Вернитесь на клиентский сервер.

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. Убедитесь, что на клиенте существует список Beats. Откройте файл /etc/apt/sources.list.d/beats.list:

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

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

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 и укажите, какой вид трафика нужно отслеживать.

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

sudo nano /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 до строки #logstash:.

### 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 service packetbeat restart

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

sudo update-rc.d packetbeat defaults 95 10

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

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

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

Перейдите на клиентский сервер и создайте запрос:

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

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

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

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

{
"_index" : "packetbeat-2016.09.19",
"_type" : "http",
"_id" : "AVdDG6pDqHsDFrI4DAlI",
"_score" : 1.0,
"_source" : {
"responsetime" : 80,
"path" : "/",
"beat" : {
"hostname" : "your_client_server_hostname",
"name" : "your_client_server_name"
},
"direction" : "out",
"port" : 80,
"server" : "",
"status" : "OK",
"params" : "",
"count" : 1,
"client_port" : 52072,
"client_proc" : "",
"ip" : "52.38.222.131",
"bytes_out" : 432,
"bytes_in" : 78,
"query" : "GET /",
"http" : {
"code" : 301,
"content_length" : 178,
"phrase" : "Permanently"
},
"proc" : "",
"client_ip" : "your_client_server_ip",
"client_server" : "",
"@timestamp" : "2016-09-19T15:41:07.725Z",
"type" : "http",
"method" : "GET",
"@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, добавлять в просмотр новые поля и визуализировать их.

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

Заключение

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

Tags: , , , , , ,

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