Поделиться через


Управление и анализ журналов потоков группы безопасности сети с помощью Наблюдатель за сетями и 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.

Наблюдатель за сетями NSG в Grafana

Этапы установки

Включение ведения журнала потоков для групп безопасности сети

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

Рекомендации по настройке

В этом примере Grafana, Elasticsearch и Logstash настроены на сервере Ubuntu LTS, развернутом в Azure. Эта минимальная настройка используется для запуска всех трех компонентов— они работают на одной виртуальной машине. Такая конфигурация актуальна только для тестовых и некритических рабочих нагрузок. Можно разработать Logstash, Elasticsearch и Grafana для независимого масштабирования в нескольких экземплярах. Чтобы получить дополнительные сведения, мы рекомендуем ознакомиться с руководством для каждого из этих компонентов.

Установка Logstash

Logstash позволяет преобразовать формат журналов потоков из JSON в плоскую структуру на уровне кортежей потока.

Следующие инструкции используются для установки Logstash в Ubuntu. Инструкции по установке этого пакета в Red Hat Enterprise Linux см. в разделе "Установка из репозиториев пакетов " yum".

  1. Введите следующие команды, чтобы установить Logstash.

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Настройте Logstash, чтобы проанализировать журналы потоков и отправить их в Elasticsearch. Создайте файл logstash.conf следующим образом:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Добавьте в этот файл содержимое ниже. Измените имя учетной записи хранения и ключ доступа, введя значения для своей учетной записи хранения:

     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.

Следующий шаг