Как написать выражение REGEXP_EXTRACT в конфигурации Google Cloud Logging json?

Я пытаюсь извлечь значение в конце этого журнала:

Chat request completed in 3.818780105999849

Это журнал, сохраненный в Google Cloud Logging, и сообщение записывается в поле textPayload. Я пытаюсь создать метрику на основе журнала, используя команду создания метрики журнала gcloud (документы найдены здесь). Поскольку я пытаюсь создать метрику распределения, мне необходимо создать файл конфигурации для этой метрики.

Вот что у меня есть для конфигурации json:

{
    "name": "end-to-end-response-time-shell",
    "description": "Time duration of a chat request (in seconds).",
    "filter": "resource.type=\"cloud_run_revision\" AND logName=\"log_name\" AND severity=\"INFO\" AND textPayload=~\"Chat request completed in\"",
    "metricDescriptor": {
        "name": "cloud_run_revision",
        "type": "logging.googleapis.com/user/end-to-end-response-time-shell",
        "metricKind": "CUMULATIVE",
        "valueType": "DISTRIBUTION",
        "unit": "s",
        "description": "Time duration of a chat request (in seconds).",
        "displayName": "end-to-end-response-time-shell (sec)"
    },
    "valueExtractor": "REGEXP_EXTRACT(textPayload, \"\\s(\\d+\\.*\\d*)\\s\")"
}

Команда выдает ошибку в поле valueExtractor со следующим сообщением об ошибке:

ERROR: (gcloud.logging.metrics.create) INVALID_ARGUMENT: Failed to parse extractor expression: syntax error at line 1, column 29, token '"\s(\d+\.*\d*)\s"'

Как мне написать выражение регулярного выражения для этой задачи?

Ух... вложенные и экранированные регулярные выражения... весело! Это неверный JSON.... Я думаю, вам либо (!?) нужна обратная косая черта перед предпоследним "... Не последним", который завершает значение JSON, а перед ним, который завершает значение REGEXP_EXTRACT (\"... \"), или у тебя их слишком много )"

DazWilkin 03.07.2024 02:14

@DazWilkin Вы абсолютно правы, я добавил лишний )" при создании вопроса, это моя вина. Но на самом деле у меня это было как "REGEXP_EXTRACT(textPayload, \"\\s(\\d+\\.*\\d*)\\s\")", и это все равно выдавало ошибку.

four_leaves 03.07.2024 18:41

Я думаю, вам придется дважды экранировать (да!) RegEx. В документации для REGEXP_EXTRACT значение RegEx экранируется в строке. Вам придется повторно экранировать его для экранированной строки в JSON..... например. \\\\s и \\\\d и т. д.

DazWilkin 03.07.2024 19:09

@DazWilkin Твой четверной побег сработал!! Пожалуйста, отметьте это как ответ. Еще раз спасибо за вашу помощь.

four_leaves 03.07.2024 22:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вам придется дважды экранировать (да!) RegEx.

В документации для REGEXP_EXTRACT значение RegEx экранируется в строке.

Вы захотите повторно экранировать его для экранированной строки в JSON..... например. \\\\s и \\\\d и т. д.

Другие вопросы по теме

Похожие вопросы

Каков самый быстрый способ расчета ежедневного баланса со сложными процентами в Pandas или Spark?
Эффективный повторный анализ серии строк (в фрейме данных) в структуру, преобразование полей структуры и последующее ее вложение
При использовании matplotlib, как мне установить равные длины осей x и y на экране, не изменяя пределы ни одной оси?
«Модуль {Module_Name} не установлен» при запуске скрипта Python с использованием PyQt5
Как последовательно упорядочить геометрию LineString в возвращаемых ребрах OSMNX GeoDataFrame
Эффективное хранение большого количества больших целых чисел из Python в файл
Реализован ли s.rfind() в Python с использованием итераций в обратном направлении?
Использование списка цветов для гистограммы в Альтаире
Выявляйте и отмечайте дубликаты, каждый из которых имеет определенное качество
Напишите изображение, сжатое без потерь, с несколькими слоями