Добрый день, уважаемые коллеги!

Меня зовут Анкин Николай и это мой первый пост. На текущий момент я тружусь в должности DevOps Engineer в компании Altenar. История о том , как я сэкономил денег своему любимому работодателю.

На что мы тратим 3k$ в месяц ?

Во время очередной оценки наших затрат на услуги GCP мы обратили внимание , что платим 3k$ на Inter Zone Egress. Как у любознательных и бережливых инженеров у нас возникло 2 вопроса:

  1. что такое Inter Zone Egress ?

  2. как нам минимизировать его использование ?

Ваш покорный слуга взял на себя расследование первого вопроса.


Гугловая документация нам подсказывает , что это любой исходящий трафик между VM (в том числе в рамках k8s) , и в зависимости от местоположения источника и получателя трафика  - он имеет разную стоимость:

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

Для того чтобы найти источник трафика нам нужно включить VPC логирование в гугле для наших сетей. После этого мы можем пойти в Log Explorer и внимательно изучить logName:("projects/your-project/logs/compute.googleapis.com%2Fvpc_flows").

В логах вы увидите большое количество сообщений:

Как понять, какие из них являются Egress , т. е. исходящими ?  Здесь нам на помощь придет jsonPayload.reporter:

Он имеет 2 значения «DEST» для входящего и  SRC для исходящего, добавляем условие в запрос и получаем весь Egress трафик:

logName:("projects/yourproject/logs/compute.googleapis.com%2Fvpc_flows")  AND  jsonPayload.reporter = SRC


Количество сообщений уменьшилось в 2 раза и это значит мы на правильном пути.

Далее нам стоит внимательнее изучить jsonPayload , возможно умные гугловые инженеры прикрутили туда полезную инфу , чтобы точнее идентифицировать наш трафик ?

И слава инженерной мысли — в блоках dest_instance и src_instance содержится информация об источнике и получателе пакета, в том числе , в каких зонах они находятся. Наш пример как раз показывает, что трафик между разными зонами присутствует. Увы движок Log Explorer не смог удовлетворить моим потребностям к формату выходных данных.  Чтобы проанализировать данные на предмет количества подобных сообщений и объем трафика я использовал Log Analytics. Давайте же подготовимся к передаче лога в этот замечательный инструмент.

По умолчанию использование Log Analytics отключено для Log Bucket и у меня не было желания включать его для текущего — я создал новый Log Bucket и настроил на него SINK нужного лога.

Далее включаем функцию Log Analytics для созданного бакета и ждем накопления данных.

Ну и самый вкусный этап - создание sql запроса для получения желаемых данных, какой же объем трафика передается и откуда и куда ?

Меня в частности интересовала сумма переданного трафика (json_payload.bytes_sent) , под источник/получателя (json_payload.src_gke_details.pod.pod_name)/(json_payload.dest_instance.zone) , зона источника/получателя (json_payload.src_instance.zone)/(json_payload.dest_instance.zone) и главные условия выборки — Egress Traffic ((json_payload.reporter) = "SRC") и что у источника и получателя разные зоны.

Пропустив эти вводные через призму суммирования и группировки получаем следующий запрос:

SELECT

   sum(cast(JSON_VALUE(json_payload.bytes_sent) as int)) / 1024/1024/1024 as Gb, JSON_VALUE(json_payload.dest_gke_details.pod.pod_name) as dest_pod , JSON_VALUE(json_payload.dest_instance.zone) as dest_zone ,JSON_VALUE(json_payload.src_gke_details.pod.pod_name) as src_pod, JSON_VALUE(json_payload.src_instance.zone) as src_zone

FROM

  `yourproject.global.VPC-logs._AllLogs`

WHERE

 JSON_VALUE(json_payload.src_instance.zone) <> JSON_VALUE(json_payload.dest_instance.zone)

  AND JSON_VALUE(json_payload.reporter) = "SRC"

  AND  timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)

group by dest_pod, src_pod, dest_zone, src_zone

orderby Gb desc

и не менее интересный вывод:

Т.е. поды нашего приложения ходят за данными в БД из другой зоны , генерируя при этом достаточно дорогой трафик.

Для понимания происходящего ниже представлена схема движения трафика:

На этом расследование завершено, далее обучаем приложение ходить в БД в своей зоне , об этом подробнее расскажем во второй части.

На затравку сравнение расходов на Inter Zone Egress после применения нашего решения в трехмесячной перспективе:

Комментарии (0)