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