CDN
Сырые логи. Выгружать логи в ваше хранилище
Что такое Сырые логи
Сырые логи — опция для автоматической выгрузки логов CDN-ресурсов в ваше хранилище. Логи содержат информацию о запросах пользователей, которые поступают на кеширующие CDN-серверы и прекеш-сервер (если для ресурса подключён шилдинг).
Опция платная, для подключения напишите на support@edgecenter.ru.
Перейдите в раздел CDN, откройте вкладку Логи → Сырые логи, включите опцию и настройте отправку логов в 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.
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) |
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: 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 (внутренняя системная переменная) |
- |
Имя Cookie и полученный идентификатор пользователя. |
$uid_set (внутренняя системная переменная) |
- |
Имя Cookie и выданный идентификатор пользователя. |
$geoip_country_code |
KZ |
Код страны пользователя. |
$geoip_city |
- |
Код города пользователя. |
$shield_type (внутренняя системная переменная) |
shield_no |
Подключён ли шилдинг на этом ресурсе: shield_old — включён, |
$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 |
Уникальный идентификатор запроса, |
$http_x_forwarded_proto |
- |
Изначальный протокол входящего запроса (http или https). |
$http_x_forwarded_request_id |
- |
Изначальный ID входящего запроса. |
$ssl_cipher (внутренняя системная переменная) |
ECDHE-RSA-AES256-GCM-SHA384 |
Название используемого шифра |
$ssl_session_id |
28a4184139cb43cdc79006cf2d1a4ac93bdc**** |
Идентификатор сессии |
$ssl_session_reused |
r |
Возвращает «r», если сессия была использована повторно, |
$sent_http_content_type |
application/json |
Значение HTTP-заголовка Content-Type, |
$real_tcpinfo_rtt |
11863 |
Среднее время (задержка), которое необходимо |
$http_x_forwarded_http_ver |
HTTP/1.1 |
Версия HTTP в запросе пользователя. |
$vp_enabled |
1 |
Флаг определяет, включён ли на ресурсе функционал 1 — включён, |