Сырые логи. Выгружать логи в ваше хранилище

Последние изменения: 04.04.2024

Что такое Сырые логи
Выгружать в S3-хранилище

Выгружать в FTP- или SFTP-хранилище

Время и статус выгрузки

Пример пути до лог-файла

Формат лога

Пример лога

Переменные лога

Что такое Сырые логи

Сырые логи — опция для автоматической выгрузки логов CDN-ресурсов в ваше хранилище. Логи содержат информацию о запросах пользователей, которые поступают на кеширующие CDN-серверы и прекеш-сервер (если для ресурса подключён шилдинг).

Опция платная, для подключения напишите на support@edgecenter.ru. Затем включите Сырые логи в личном кабинете и настройте отправку логов в S3-, FTP- или SFTP-хранилище.

Выгружать логи в S3-хранилище

1. По умолчанию все CDN-серверы каждый час отправляют логи запросов. Если на CDN-сервер не поступил запрос к вашему ресурсу, он отправит пустой лог. Чтобы отключить отправку пустых логов, заполните чек-бокс «Не отправлять пустые логи».

2. Если для аккаунта подключён шилдинг, на странице будет чек-бокс «Добавить логи с шилдинга источника». Поставьте галочку, если хотите получать логи и с CDN-серверов, и с прекеш-сервера шилдинга.

3. Выберите способ получения логов — S3.

4. Укажите имя хоста — это имя, которое идентифицирует сервер хранилища в сети и заменяет IP-адрес. Если используете S3-хранилище EdgeЦентр, вы найдёте идентификатор в личном кабинете в строке Hostname.

5. Укажите идентификатор ключа доступа — этот идентификатор в паре с секретным ключом доступа нужны нашей CDN, чтобы подключаться к хранилищу и отправлять туда логи. Если используете S3-хранилище EdgeЦентр, вы найдёте идентификатор в личном кабинете в строке Access key.

6. Укажите секретный ключ доступа. Если используете S3-хранилище EdgeЦентр, вы найдёте ключ в личном кабинете в строке Secret key

7. Укажите хост бакета — идентификатор бакета в системе вашего S3-хранилища в формате {bucket_name}.{hostname}. Он нужен, чтобы CDN отправляла логи в правильный бакет внутри хранилища. Хост бакета EdgeЦентр выглядит так: {имя бакета}.{имя хоста из пункта №3}, например examplename.s-dt2.cloud.edgecore.ru. Например, хост бакета Яндекс.Cloud выглядит так: {имя бакета}.{имя хоста Яндекс.Cloud} examplename.storage.yandexcloud.net.

8. Укажите регион — идентификатор локации, где расположен сервер вашего хранилища. Это необязательный пункт: для некоторых хранилищ регион определяется автоматически, и можно оставить поле пустым. Если пользуетесь S3-хранилищем EdgeЦентр, указывать идентификатор обязательно. Вы найдёте его в Деталях хранилища. Идентификатор — начальные символы Hostname до первой точки.

9. Выберите, как выгружать логи: в один бакет для всех CDN-ресурсов или в разные бакеты для каждого CDN-ресурса.

10. Укажите бакет или бакеты, куда будут выгружаться логи. Обязательно указывать существующий бакет, иначе выгрузка не произойдёт. Если хотите выгружать логи в конкретную папку внутри бакета, укажите имя папки.

11. Нажмите Сохранить изменения.

Выгружать логи в FTP- и SFTP-хранилище

1. По умолчанию все CDN-серверы каждый час отправляют логи запросов. Если на CDN-сервер не поступил запрос к вашему ресурсу, он отправит пустой лог. Чтобы отключить отправку пустых логов, заполните чек-бокс «Не отправлять пустые логи».

2. Если для аккаунта подключён шилдинг, на странице будет чек-бокс «Добавить логи с шилдинга источника». Поставьте галочку, если хотите получать логи не только с CDN-серверов, но и с прекеш-сервера шилдинга.

3. Выберите способ получения логов — FTP или SFTP.

4. Укажите имя хоста — это имя, которое идентифицирует сервер хранилища в сети и заменяет IP-адрес. Дополнительно можно указать порт подключения к FTP/SFTP-хранилищу через двоеточие после Hostname, например: sftp.hostname.ru:2200.

5. Укажите логин FTP/SFTP-хранилища.

6. Укажите пароль FTP/SFTP-хранилища.

7. Укажите папку для загрузки. Уточните у вашего провайдера SFTP-хранилища, создаётся ли по умолчанию корневая папка, куда будут вложены остальные папки для хранения контента. Если нет — оставьте поле пустым, если да — укажите папку.

8. Выберите, как выгружать логи: в одну папку для всех CDN-ресурсов или в разные папки для каждого CDN-ресурса. Затем укажите имя папки. Если указать имя несуществующей папки, логи будут выгружаться в корневую папку.

9. Нажмите Сохранить изменения.

Время и статус выгрузки логов

Логи выгружаются в конце каждого часа. Если настроите опцию Сырые логи в 00:30, первые логи придут в интервале между 00:45 и 01:00, следующие — между 01:45 и 02:00.

Если запросов к CDN-серверу не было, в хранилище выгрузится пустой лог (файл весом ±20 байт).

В личном кабинете можно увидеть статус работы Сырых логов:

  • Ожидание — статус сохраняется после подключения к хранилищу до первой отправки логов.

  • ОК — логи доставлены хотя бы с одного CDN-сервера.

  • Ошибка — ошибка при подключении к хранилищу или логи не принимались в течение 24 часов.

  • Пауза — опция установлена на паузу.

Пример пути до лог-файла

s3://log-bucket-name/2019/08/20/15/nodename_primarycname.domain.ru_access.log.gz

Формат лога

"$remote_addr" "-" "$remote_user" "[$time_local]" "$request" "$status" "$body_bytes_sent" "$http_referer" "$http_user_agent" "$bytes_sent" "$edgename" "$scheme" "$host" "$request_time" "$upstream_response_time" "$request_length" "$http_range" "[$responding_node]" "$upstream_cache_status" "$upstream_response_length" "$upstream_addr" "$gcdn_api_client_id" "$gcdn_api_resource_id" "$uid_got" "$uid_set" "$geoip_country_code" "$geoip_city" "$shield_type" "$server_addr" "$server_port" "$upstream_status" "-" "$upstream_connect_time" "$upstream_header_time" "$shard_addr" "$geoip2_data_asnumber" "$connection" "$connection_requests" "$request_id" "$http_x_forwarded_proto" "$http_x_forwarded_request_id" "$ssl_cipher" "$ssl_session_id" "$ssl_session_reused" "$sent_http_content_type" "$real_tcpinfo_rtt" "$http_x_forwarded_http_ver" "vp_enabled"

Если увидите в логе дополнительные поля, которые не указаны выше, не удивляйтесь: периодически мы добавляем новые. И всегда рассказываем о них в email-рассылке. Новые поля добавляем в конец строки.

Пример лога

"0.0.0.0" "-" "-" "[26/Apr/2019:09:47:40 +0000]" "GET /ContentCommon/images/image.png HTTP/1.1" "200" "1514283" "  https://example.com/videos/10" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 YaBrowser/16.10.0.2309 Safari/537.36" "1514848" "[dh-up-gc18]" "https" "cdn.example.com" "1.500" "0.445" "157" "bytes=0-1901653" "[dh]" "MISS" "10485760" "0.0.0.0:80" "2510" "7399" "-" "-" "KZ" "-" "shield_no" "0.0.0.0" "80" "206" "-" "0.000" "0.200" "0.0.0.0" "asnumber" "106980391" "1" "c1c0f12ab35b7cccccd5dc0a454879c5" "-" "-" "ECDHE-RSA-AES256-GCM-SHA384" "28a4184139cb43cdc79006cf2d1a4ac93bdc****" "r" "application/json" "11863" "HTTP/1.1" "1"

Переменные лога

Не все переменные важны. Некоторые из них относятся к внутренней системе нашего CDN и не несут ценной информации для клиентского анализа. В таблице ниже мы пометили системные переменные курсивом. Все остальные переменные могут пригодиться при анализе трафика или сбора статистики.

Переменная

Значение из примера

Пояснение

$remote_addr

0.0.0.0

IP пользователя.

-

-

Поле не используется.

$remote_user

(внутренняя системная переменная)

-

Имя пользователя, использованное в Basic-аутентификации.

[$time_local]

[26/Apr/2019:09:47:40 +0000]

Локальное время в Common Log Format.

$request

GET /ContentCommon/images/image.png HTTP/1.1

Тип HTTP-запроса, запрошенный путь к файлу, версия HTTP.

$status

200

Код ответа от CDN-сервера.

$body_bytes_sent

1514283

Число байт, переданное клиенту, без учёта заголовка ответа.

$http_referer

https://example.com/videos/10

Реферал: с какого URL пришел пользователь.

$http_user_agent

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/53.0.2785.116
YaBrowser/16.10.0.2309 Safari/537.36

User Agent, с которым обратился пользователь
за файлом (браузер или иная программа).

$bytes_sent

1514848

Число байт, переданное пользователю.

[$edgename]

[dh-up-gc18]

Имя ответившего CDN-сервера в нашей системе.

$scheme

https

Протокол запроса (http или https).

$host

cdn.example.com

Персональный домен CDN-ресурса.

$request_time

1.500

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

$upstream_response_time

0.445

Время, затраченное на получение ответа от источника,
в секундах с точностью до миллисекунд.
Время нескольких ответов указывается через запятые и двоеточия.

$request_length

157

Длина запроса (включая строку, заголовок и тело запроса).

$http_range

bytes=0-1901653

Размер фрагмента файла при Range-запросе.

[$responding_node]

dh

Имя ответившего дата-центра в нашей системе.

$upstream_cache_status

MISS

Статус запрошенного файла в кеше CDN:

HIT — файл отдан из кеша,

STALE — файл устарел, так как источник не ответил или ответил
неправильно при обновлении кеша,

UPDATING — файл устарел, так как файл находится в процессе обновления
после поступившего ранее запроса,

REVALIDATED — в результате запуска директивы proxy_cache_revalidate установлено,
что файл на источнике не изменился,

EXPIRED — срок жизни в кеше истек, но файл соответствует файлу с источника.
Отправлен запрос на источник для повторного кеширования,

MISS — файл отдан не из кеша, проксирован с источника,


BYPASS — при первом запросе файла после очистки кеша.
Обратите внимание: этот статус будет у файла
при запросе каждого CDN-сервера.
То есть когда один CDN-сервер обратится
к файлу первый раз, у него будет статус BYPASS.
Когда тот же сервер обратится повторно — статус файла изменится на HIT.
Когда другой CDN-сервер обратится к файлу — у него снова будет статус BYPASS.

$upstream_response_length

10485760

Длина ответа, полученная от источника, хранится в байтах.
Длины нескольких ответов разделяются запятыми и двоеточиями.

$upstream_addr

0.0.0.0:80

IP-адрес источника и порт.

$gcdn_api_client_id

(внутренняя системная переменная)

123

Ваш ID в системе.

$gcdn_api_resource_id

(внутренняя системная переменная)

01

ID вашего CDN-ресурса в системе.

$uid_got

(внутренняя системная переменная)

-

Имя кукис и полученный идентификатор пользователя.

$uid_set

(внутренняя системная переменная)

-

Имя кукис и выданный идентификатор пользователя.

$geoip_country_code

KZ

Код страны пользователя.

$geoip_city

-

Код города пользователя.

$shield_type

(внутренняя системная переменная)

shield_no

Подключён ли шилдинг на этом ресурсе:

shield_old — включён,
shield_no — выключен.

$server_addr

(внутренняя системная переменная)

0.0.0.0

IP -адрес ответившей anycast-зоны или CDN-сервера.

$server_port

(внутренняя системная переменная)

80

Порт, на который пришел запрос.

$upstream_status

206

Код ответа от источника.

-

-

Поле не используется.

$upstream_connect_time

0.000

Время, затраченное подключение к источнику,
в секундах с точностью до миллисекунд.

$upstream_header_time

0.200

Время, затраченное на получение заголовков
ответа от источника, в секундах с точностью до миллисекунд.

$shard_addr

(внутренняя системная переменная)

0.0.0.0

IP-адрес CDN-сервера, который изначально
принял запрос клиента при включенном шардинге у ресурса.

$geoip2_data_asnumber

asnumber

Номер автономной системы,
откуда пришел запрос пользователя.

$connection

(внутренняя системная переменная)

2897494295

Порядковый номер соединения.

$connection_requests

(внутренняя системная переменная)

1

Текущее число запросов в соединении.

$request_id

(внутренняя системная переменная)

c1c0f12ab35b7cccccd5dc0a454879c5

Уникальный идентификатор запроса,
сформированный из 16 случайных байт, в шестнадцатеричном виде.

$http_x_forwarded_proto

-

Изначальный протокол входящего запроса (http или https).

$http_x_forwarded_request_id

(внутренняя системная переменная)

-

Изначальный ID входящего запроса.

$ssl_cipher

(внутренняя системная переменная)

ECDHE-RSA-AES256-GCM-SHA384

Возвращает название используемого шифра
для установленного SSL-соединения.

$ssl_session_id

(внутренняя системная переменная)

28a4184139cb43cdc79006cf2d1a4ac93bdc****

Возвращает идентификатор сессии
установленного SSL-соединения.

$ssl_session_reused

(внутренняя системная переменная)

r

Возвращает «r», если сессия была использована повторно,
иначе «.»

$sent_http_content_type

application/json

Значение HTTP-заголовка Content-Type,
указывающее тип MIME передаваемого ресурса.

$real_tcpinfo_rtt

11863

Среднее время (задержка), которое необходимо
для передачи пакета на сервер и с сервера.

$http_x_forwarded_http_ver

HTTP/1.1

Версия HTTP в запросе пользователя.

$vp_enabled

1

Флаг определяет, включён ли на ресурсе функционал
для работы со Стриминговой платформой.

1 — включён,
0 — выключен.

Помогла ли вам статья?