Управление и анализ журналов потоков группы безопасности сети с помощью Наблюдатель за сетями и Grafana
Внимание
30 сентября 2027 г. журналы потоков безопасности сети (NSG) будут прекращены. В рамках этого выхода на пенсию вы больше не сможете создавать новые журналы потоков NSG с 30 июня 2025 года. Мы рекомендуем перенестижурналы потоков виртуальной сети, которые преодолевают ограничения журналов потоков NSG. После выхода на пенсию аналитика трафика, включенная с помощью журналов потоков NSG, больше не будет поддерживаться, а существующие ресурсы журналов потоков NSG в подписках будут удалены. Однако записи журналов потоков NSG не будут удалены и будут продолжать следовать соответствующим политикам хранения. Дополнительные сведения см. в официальном объявлении.
Журналы потоков для групп безопасности сети (NSG) содержат сведения, которые могут быть полезны для анализа входящего и исходящего IP-трафика в сетевых интерфейсах. Эти журналы потоков отображают сведения о входящем и исходящем потоках на основе правила NSG, сетевой карте, к которой относится поток, 5 кортежах потока (IP-адрес назначения и исходный IP-адрес, порт назначения и исходный порт, протокол), а также сведения о разрешении и отклонении трафика.
Ведение журналов потоков можно включить для нескольких групп безопасности сети. Такой объем регистрируемых данных усложняет синтаксический анализ и получение аналитических сведений из журналов. В этой статье представлено решение для централизованного управления этими журналами потоков NSG с помощью Grafana, средства открытый код графирования, Elasticsearch, распределенного механизма поиска и аналитики и Logstash, который является открытый код конвейером обработки данных на стороне сервера.
Сценарий
Журналы потоков для NSG можно включить с помощью наблюдателя за сетями. Они сохраняются в хранилище BLOB-объектов Azure. Подключаемый модуль Logstash используется для подключения и обработки журналов потоков из хранилища BLOB-объектов и отправки их в Elasticsearch. После хранения журналов потоков в Elasticsearch их можно проанализировать и визуализировать на настраиваемых панелях мониторинга в Grafana.
Этапы установки
Включение ведения журнала потоков для групп безопасности сети
В рамках данного сценария вам необходимо включить ведение журнала потоков по меньшей мере для одной группы безопасности сети в своей учетной записи. Инструкции по включению журналов потоков для групп безопасности сети представлены в статье Общие сведения о ведении журнала потоков для групп безопасности сети.
Рекомендации по настройке
В этом примере Grafana, Elasticsearch и Logstash настроены на сервере Ubuntu LTS, развернутом в Azure. Эта минимальная настройка используется для запуска всех трех компонентов— они работают на одной виртуальной машине. Такая конфигурация актуальна только для тестовых и некритических рабочих нагрузок. Можно разработать Logstash, Elasticsearch и Grafana для независимого масштабирования в нескольких экземплярах. Чтобы получить дополнительные сведения, мы рекомендуем ознакомиться с руководством для каждого из этих компонентов.
Установка Logstash
Logstash позволяет преобразовать формат журналов потоков из JSON в плоскую структуру на уровне кортежей потока.
Следующие инструкции используются для установки Logstash в Ubuntu. Инструкции по установке этого пакета в Red Hat Enterprise Linux см. в разделе "Установка из репозиториев пакетов " yum".
Введите следующие команды, чтобы установить Logstash.
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb sudo dpkg -i logstash-5.2.0.deb
Настройте Logstash, чтобы проанализировать журналы потоков и отправить их в Elasticsearch. Создайте файл logstash.conf следующим образом:
sudo touch /etc/logstash/conf.d/logstash.conf
Добавьте в этот файл содержимое ниже. Измените имя учетной записи хранения и ключ доступа, введя значения для своей учетной записи хранения:
input { azureblob { storage_account_name => "mystorageaccount" storage_access_key => "VGhpcyBpcyBhIGZha2Uga2V5Lg==" container => "insights-logs-networksecuritygroupflowevent" codec => "json" # Refer https://learn.microsoft.com/azure/network-watcher/network-watcher-read-nsg-flow-logs # Typical numbers could be 21/9 or 12/2 depends on the nsg log file types file_head_bytes => 12 file_tail_bytes => 2 # Enable / tweak these settings when event is too big for codec to handle. # break_json_down_policy => "with_head_tail" # break_json_batch_count => 2 } } filter { split { field => "[records]" } split { field => "[records][properties][flows]"} split { field => "[records][properties][flows][flows]"} split { field => "[records][properties][flows][flows][flowTuples]"} mutate { split => { "[records][resourceId]" => "/"} add_field => { "Subscription" => "%{[records][resourceId][2]}" "ResourceGroup" => "%{[records][resourceId][4]}" "NetworkSecurityGroup" => "%{[records][resourceId][8]}" } convert => {"Subscription" => "string"} convert => {"ResourceGroup" => "string"} convert => {"NetworkSecurityGroup" => "string"} split => { "[records][properties][flows][flows][flowTuples]" => "," } add_field => { "unixtimestamp" => "%{[records][properties][flows][flows][flowTuples][0]}" "srcIp" => "%{[records][properties][flows][flows][flowTuples][1]}" "destIp" => "%{[records][properties][flows][flows][flowTuples][2]}" "srcPort" => "%{[records][properties][flows][flows][flowTuples][3]}" "destPort" => "%{[records][properties][flows][flows][flowTuples][4]}" "protocol" => "%{[records][properties][flows][flows][flowTuples][5]}" "trafficflow" => "%{[records][properties][flows][flows][flowTuples][6]}" "traffic" => "%{[records][properties][flows][flows][flowTuples][7]}" "flowstate" => "%{[records][properties][flows][flows][flowTuples][8]}" "packetsSourceToDest" => "%{[records][properties][flows][flows][flowTuples][9]}" "bytesSentSourceToDest" => "%{[records][properties][flows][flows][flowTuples][10]}" "packetsDestToSource" => "%{[records][properties][flows][flows][flowTuples][11]}" "bytesSentDestToSource" => "%{[records][properties][flows][flows][flowTuples][12]}" } add_field => { "time" => "%{[records][time]}" "systemId" => "%{[records][systemId]}" "category" => "%{[records][category]}" "resourceId" => "%{[records][resourceId]}" "operationName" => "%{[records][operationName]}" "Version" => "%{[records][properties][Version]}" "rule" => "%{[records][properties][flows][rule]}" "mac" => "%{[records][properties][flows][flows][mac]}" } convert => {"unixtimestamp" => "integer"} convert => {"srcPort" => "integer"} convert => {"destPort" => "integer"} add_field => { "message" => "%{Message}" } } date { match => ["unixtimestamp" , "UNIX"] } } output { stdout { codec => rubydebug } elasticsearch { hosts => "localhost" index => "nsg-flow-logs" } }
Предоставленный файл конфигурации Logstash состоит из трех частей: данные входа, фильтр и данные выхода. В разделе входа описан источник, из которого в Logstash поступают журналы для обработки. В нашем примере используется подключаемый модуль входа для "azureblob" (устанавливается на следующих этапах), который предоставляет доступ к файлам журнала потоков для групп безопасности сети. Файлы хранятся в формате JSON в хранилище BLOB-объектов.
Затем в разделе фильтра каждый файл журнала потоков преобразовывается в плоскую структуру, чтобы каждый отдельный кортеж потока и связанные свойства стали отдельным событием Logstash.
Наконец, выходной раздел перенаправит каждое событие Logstash серверу Elasticsearch. Вы можете изменить файл конфигурации Logstash в соответствии со своими потребностями.
Установка подключаемого модуля ввода Logstash для хранилища BLOB-объектов Azure
Этот подключаемый модуль Logstash позволяет обращаться к журналам потоков непосредственно из настроенной для них учетной записи хранилища BLOB-объектов. Чтобы установить этот подключаемый модуль, из каталога установки Logstash по умолчанию (в этом случае — /usr/share/logstash/bin) выполните следующую команду:
sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-azureblob
Дополнительные сведения об этом подключаемом модуле Logstash для Azure Storage Blob см. здесь.
Установка Elasticsearch
Для установки Elasticsearch можно использовать следующий скрипт. Сведения об установке Elasticsearch см. в статье Elastic Stack.
sudo apt-get install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen -y
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/5.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-5.x.list
sudo apt-get update && apt-get install elasticsearch
sudo sed -i s/#cluster.name:.*/cluster.name:\ grafana/ /etc/elasticsearch/elasticsearch.yml
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
Установка Grafana
Чтобы установить и запустить Grafana, выполните следующие команды:
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.5.1_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_4.5.1_amd64.deb
sudo service grafana-server start
Дополнительные сведения по установке см. на странице Grafana Labs.
Добавление сервера Elasticsearch в качестве источника данных
Затем необходимо добавить индекс Elasticsearch, содержащий журналы потоков в качестве источника данных. Источник данных можно добавить, выбрав параметр Добавить источник данных и заполнив соответствующую форму. Пример такой конфигурации приведен на снимке экрана ниже:
Создать панель мониторинга
Теперь, когда вы успешно настроили Grafana для чтения из индекса Elasticsearch, содержащего журналы потоков NSG, можно создавать и персонализировать панели мониторинга. Чтобы создать панель мониторинга, выберите команду создания первой панели мониторинга. В примере конфигурации графика ниже показаны потоки, сегментированные по правилу NSG.
Заключение
Интеграция Наблюдатель за сетями с Elasticsearch и Grafana теперь обеспечивает удобный и централизованный способ управления и визуализации журналов потоков NSG, а также других данных. Grafana располагает рядом других мощных графических возможностей, которые можно использовать для дальнейшего управления журналами потоков, а также анализа сетевого трафика. Теперь, когда вы настроили экземпляр Grafana и подключили его к Azure, можно продолжить изучение других функций, предлагаемых Grafana.
Следующий шаг
- Узнайте больше об использовании наблюдателя за сетями.