Что такое Сырые логи
Выгружать в 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) | 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 (внутренняя системная переменная) | - | Имя кукис и полученный идентификатор пользователя. |
$uid_set (внутренняя системная переменная) | - | Имя кукис и выданный идентификатор пользователя. |
$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 — включён, |