← Cloudflare Logs / logs / logpush / logpush-job
Параметры вывода журнала
У заданий в Logpush появился новый ключ, output_options, который заменяет logpull_options и обеспечивает более гибкое форматирование. Вы можете изменить output_options через API.
Замените logpull_options
Раньше задания Logpush можно было настраивать, указывая список полей, частоту выборки и формат временной метки в logpull_options как Параметры в кодировке URL. Например:
{
"id": <JOB_ID>,
"dataset": "http_requests",
"enabled": false,
"name": "<DOMAIN_NAME>",
"logpull_options": "fields=ClientIP,EdgeStartTimestamp,RayID&sample=0.1×tamps=rfc3339",
"destination_conf": "s3://<BUCKET_PATH>?region=us-west-2"
}Мы заменили это на output_options так как оно используется и для Logpull, и для Logpush.
{
"id": <JOB_ID>,
"dataset": "http_requests",
"enabled": false,
"name": "<DOMAIN_NAME>",
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"sample_rate": 0.1,
"timestamp_format": "rfc3339"
},
"destination_conf": "s3://<BUCKET_PATH>?region=us-west-2"
}:::caution[Обновления полностью заменяют output_options]
Когда вы обновляете задание Logpush через PUT /accounts/{account_id}/logpush/jobs/{job_id} или PUT /zones/{zone_id}/logpush/jobs/{job_id}, output_options объект заменяется полностью. Любое поле, которое было задано ранее, но отсутствует в теле запроса на обновление, сбрасывается к значению по умолчанию.
Например, если в существующем задании задано timestamp_format: "rfc3339" и ваше обновление включает только field_names, задание вернётся к значению по умолчанию timestamp_format (unixnano для заданий, созданных через API).
Всегда указывайте полный output_options объект, который требуется применить при обновлении задания.
Типы выходных данных
По умолчанию Logpush выводит каждую запись в виде одной строки JSON (также известного как ndjson).
С output_options вы можете переключиться на CSV или отдельный объект JSON, дополнительно настроить префиксы, суффиксы, разделители либо указать собственный шаблон записи (в упрощённой версии шаблонов Go text/template ↗ синтаксис).
output_options объект имеет следующие настройки:
-
field_names: массив строк. Пока нет возможности добавить все поля сразу, необходимо указать имена полей по отдельности.
-
output_type: строка, задающая тип вывода, например
ndjsonилиcsv(по умолчаниюndjson). Это задаёт значения по умолчанию для остальных настроек в зависимости от выбранного типа вывода. Некоторые правила форматирования (например, использование кавычек для строк) отличаются в зависимости от типа вывода. -
batch_prefix: строка, добавляемая перед каждым пакетом.
-
batch_suffix: строка, добавляемая после каждого пакета.
-
record_prefix: строка, добавляемая перед каждой записью.
-
record_suffix: строка, добавляемая после каждой записи.
-
record_template: строка, используемая как шаблон для каждой записи вместо списка, разделенного запятыми по умолчанию. Все поля, используемые в шаблоне, должны присутствовать в field_names тоже, иначе они окажутся как
null. Отформатируйте как Go text/template без каких-либо стандартных функций (условных операторов, циклов, вложенных шаблонов и т. д.). Шаблон может состоять только из следующих трёх типов токенов:- Действие: это либо
{{ .Field }}или{{ "constant text" }}. - Текст: это просто постоянный текст между
{{ actions }}. - Комментарий:
{{/* comments */}}незаметно отбрасываются.
- Действие: это либо
-
record_delimiter: строка, вставляемая между записями в качестве разделителя.
-
field_delimiter: строка для объединения полей. Игнорируется, если record_template задан.
-
timestamp_format: строка, задающая формат временных меток. Поддерживаются следующие значения:
unixnano: единица измерения: наносекундыunix: единица измерения: секундыrfc3339: единица измерения: секунды, например:2024-02-17T23:52:01Zrfc3339ms: единица измерения: миллисекунды, например:2024-02-17T23:52:01.123Zrfc3339ns: единица измерения: наносекунды, например:2024-02-17T23:52:01.123456789Z
Если формат явно не задан, используются стандартные форматы временных меток. По умолчанию дашборд использует
rfc3339и по умолчанию API используетunixnano. -
sample_rate: число с плавающей точкой, задающее частоту выборки (по умолчанию 1.0: без выборки). Выборка применяется поверх фильтрации и не зависит от текущего значения sample_interval данных.
-
CVE-2021-44228: bool, по умолчанию false. Если задать true, все вхождения
${в сформированных файлах, которое будет заменено наx{.
Примеры
Указание field_names и output_type приведёт к тому, что остальные параметры будут настроены, как показано ниже, для указанного output_type:
ndjson
output_options по умолчанию для ndjson
ndjson{
"record_prefix": "{",
"record_suffix": "}\n",
"field_delimiter": ","
}Пример output_options
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "ndjson"
}Пример вывода
{"ClientIP":"89.163.242.206","EdgeStartTimestamp":1506702504433000200,"RayID":"3a6050bcbe121a87"}
{"ClientIP":"89.163.242.207","EdgeStartTimestamp":1506702504433000300,"RayID":"3a6050bcbe121a88"}
{"ClientIP":"89.163.242.208","EdgeStartTimestamp":1506702504433000400,"RayID":"3a6050bcbe121a89"}ndjsonс другими именами полей:
Пример output_options
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "ndjson",
"record_template": "\"client-ip\":{{.ClientIP}},\"timestamp\":{{.EdgeStartTimestamp}},\"ray-id\":{{.RayID}}"
}Пример вывода
{"client-ip":"89.163.242.206","timestamp":1506702504433000200,"ray-id":"3a6050bcbe121a87"}
{"client-ip":"89.163.242.207","timestamp":1506702504433000300,"ray-id":"3a6050bcbe121a88"}
{"client-ip":"89.163.242.208","timestamp":1506702504433000400,"ray-id":"3a6050bcbe121a89"}Литерал с двойными фигурными скобками ({{}}), то есть "double{{curly}}braces", можно вставлять по правилам синтаксиса Go text/template, то есть "{{doublecurlybraces}}".
csv
output_options по умолчанию для CSV
{
"record_suffix": "\n",
"field_delimiter": ","
}Пример output_options
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "csv"
}Пример вывода
"89.163.242.206",1506702504433000200,"3a6050bcbe121a87"
"89.163.242.207",1506702504433000300,"3a6050bcbe121a88"
"89.163.242.208",1506702504433000400,"3a6050bcbe121a89"варианты csv/json
Помимо указанного выше, поддерживаются и другие форматы, похожие на csv или json:
- csv с заголовком:
Пример output_options
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "csv",
"batch_prefix": "ClientIP,EdgeStartTimestamp,RayID\n"
}Пример вывода
ClientIP,EdgeStartTimestamp,RayID
"89.163.242.206",1506702504433000200,"3a6050bcbe121a87"
"89.163.242.207",1506702504433000300,"3a6050bcbe121a88"
"89.163.242.208",1506702504433000400,"3a6050bcbe121a89"- TSV с заголовком:
Пример output_options
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "csv",
"batch_prefix": "ClientIP\tEdgeStartTimestamp\tRayID\n",
"field_delimiter": "\t"
}Пример вывода
ClientIP EdgeStartTimestamp RayID
"89.163.242.206" 1506702504433000200 "3a6050bcbe121a87"
"89.163.242.207" 1506702504433000300 "3a6050bcbe121a88"
"89.163.242.208" 1506702504433000400 "3a6050bcbe121a89"- json с вложенным объектом:
Пример output_options
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "ndjson",
"batch_prefix": "{\"events\":[",
"batch_suffix": "\n]}\n",
"record_prefix": "\n {\"info\":{",
"record_suffix": "}}",
"record_delimiter": ","
}Пример вывода
{
"events": [
{
"info": {
"ClientIP": "89.163.242.206",
"EdgeStartTimestamp": 1506702504433000200,
"RayID": "3a6050bcbe121a87"
}
},
{
"info": {
"ClientIP": "89.163.242.207",
"EdgeStartTimestamp": 1506702504433000300,
"RayID": "3a6050bcbe121a88"
}
},
{
"info": {
"ClientIP": "89.163.242.208",
"EdgeStartTimestamp": 1506702504433000400,
"RayID": "3a6050bcbe121a89"
}
}
]
}Как выполнить миграцию
Чтобы перенести задания с использования logpull_options к новому output_options, выполните следующие действия:
- Измените
&fields=ClientIP,EdgeStartTimestamp,RayIDпараметр в массив вoutput_options.field_names. - Измените
&sample=0.1параметр вoutput_options.sample_rate. - Измените
×tamps=rfc3339параметр вoutput_options.timestamp_format. - Измените
&CVE-2021-44228=trueпараметр вoutput_options.CVE-2021-44228.
Например, если для logpull_options заданы fields=ClientIP,EdgeStartTimestamp,RayID&sample=0.1×tamps=rfc3339&CVE-2021-44228=true, output_options будут иметь вид:
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"sample_rate": 0.1,
"timestamp_format": "rfc3339",
"CVE-2021-44228": true
}