Рейтинг:0

Как передать значения для внешнего запроса

флаг ng
abc

У меня ниже похожие логи.

Я создал манекен показатель и создал отображение как ниже в инструменты для разработчиков

ПОСТАВИТЬ новый
{
  "сопоставления": {
    "характеристики": {
      "@timestamp": {
        "тип": "дата",
        "формат": "гггг-ММ-дд ЧЧ:мм:сс.ССС"
      }
    }
  }
}

и проиндексирован данные, как показано ниже,

ПОСТАВИТЬ /новый/_doc/1
{
  "@timestamp": "2021-11-05 08:12:14.534",
  "уровень": "ИНФО",
  "идентификатор": "1",
  "text": "веб-сайт открыт",
  "статус": "нажато"
}

ПОСТАВИТЬ /новый/_doc/2
{
  "@timestamp": "2021-10-14 09:11:14.534",
  "уровень": "ИНФО",
  "идентификатор": "3",
  "text": "веб-сайт открыт",
  "статус": "нажато"
}

ПОЛОЖИТЬ /новый/_doc/3
{
  "@timestamp": "2021-09-09 02:08:20.534",
  "уровень": "ИНФО",
  "идентификатор": "4",
  "text": "веб-сайт открыт",
  "статус": "нажато"
}

Я могу получить общее количество, используя ниже запрос запрос,

ПОЛУЧИТЬ новый/_поиск
{
  "аггс": {},
  "размер": 0,
  "поля": [],
  "запрос": {
    "буль": {
      "должен": [],
      "фильтр": [
        {
          "буль": {
            "должен": [
              {
                "match_phrase": {
                  "text": "веб-сайт доступен"
                }
              }
            ],
            "минимум_должен_соответствовать": 1
          }
        },
        {
          "спектр": {
            "@timestamp": {
              "гте": "2021-10-01",
              "лте": "2021-10-30"
            }
          }
        }
      ],
      "должен": [],
      "не должен": []
    }
  }
}

Получающий отклик как показано ниже,

{
  "взял": 0,
  "timed_out": ложь,
  "_осколки": {
    "всего" : 1,
    «успешно»: 1,
    "пропущено": 0,
    "не удалось" : 0
  },
  "хиты" : {
    "общее количество" : {
      "значение": 1,
      "отношение": "экв"
    },
    "max_score": ноль,
    "хиты" : [ ]
  }
}

Как видите, мне нужно жесткий код в датировать получить значение для конкретного месяц то есть получить ту же информацию для сентябрь месяц, мне нужно изменить диапазон даты и времени как показано ниже в запросе на завивку,

"спектр": {
  "@timestamp": {
    "гте": "2021-09-01",
    "лте": "2021-09-30"
    }
    }

Ниже приведен завить запрос на звонок.

curl -u elastic:xxx -XGET "http://10.10.10.10:9200/new/_search?pretty" -H 'Тип содержимого: приложение/json' -d'
{
  "аггс": {},
  "размер": 0,
  "поля": [],
  "запрос": {
    "буль": {
      "должен": [],
      "фильтр": [
        {
          "буль": {
            "должен": [
              {
                "match_phrase": {
                  "text": "веб-сайт доступен"
                }
              }
            ],
            "минимум_должен_соответствовать": 1
          }
        },
        {
          "спектр": {
            "@timestamp": {
              "гте": "2021-10-01",
              "лте": "2021-10-30"
            }
          }
        }
      ],
      "должен": [],
      "не должен": []
    }
  }
}'

Как я могу пройти год и месяц динамически (т.е. без фактического жесткого кодирования самого запроса) к запросу curl, который будет извлекать информацию для этого конкретного месяц, год?


Обновить -

Я могу получить результаты за последний месяц (ноябрь) или последние 2 месяца (октябрь) и т. д., используя ниже,

прошлый месяц - ноябрь -

"gte": "сейчас-М",
"lt": "сейчас/М"

2 месяца - октябрь

"gte": "сейчас-2М/М",
"lte": "сейчас-2М/М"

Но есть ли способ обеспечить желаемое год и месяц получить результаты?

Спасибо,

Рейтинг:0
флаг ng

Ты можешь использовать дата математика с полностью определенными датами:

"спектр": {
  "@timestamp": {
    "гте": "2021-10-01",
    "lte": "2021-10-01||+1М/д"
  }
}
abc avatar
флаг ng
abc
Спасибо. Хорошо, но опять же, в этом случае одиночный запрос на завивку нельзя использовать, т.е. для каждого нового месяца, чтобы получить данные за последний месяц, мне нужно изменить метку времени в запросе на завивку, т.е. для текущего месяца, декабрь, если мне нужно получить данные за ноябрь, тогда мне нужно изменить «месяц» в метке времени, и то же самое нужно будет сделать, когда январь будет текущим месяцем, и мне нужно получить данные за декабрьский месяц. Скоро мне нужно изменить год также. так это не хорошо. Я не хочу создавать отдельные запросы на завивку для каждого месяца, поэтому я ищу, могу ли я передать год и месяц не жестко запрограммированным способом?
флаг ng
Как вы запускаете этот «завиток»? Если это сценарий bash, вы можете использовать сценарий bash: `YEAR=2010; МЕСЯЦ=10; curl ... "range": { "@timestamp": { "gte": "$YEAR-$MONTH-01", "lte": "$YEAR-$MONTH-01||+1M/d" } } ` ?
abc avatar
флаг ng
abc
Я запускал завиток как есть, то есть точно так же, как я вставил выше (без сценария bash и т. д.), но да, включение этого завитка в сценарий bash и предоставление года и месяца в качестве переменной может быть хорошим вариантом. Я попробую это. Спасибо

Ответить или комментировать

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