ответный запрос занимает много времени, чтобы вернуть значение, можем ли мы удалить - PullRequest
0 голосов
/ 03 декабря 2018

Первоначально я использовал inputlook для получения выходных данных, а запрос возвращал выходные данные в долях секунды, но теперь я хочу использовать источник в качестве входных данных и выполнить запрос Splunk, но для возврата результата требуется много времени.

Пожалуйста, предложите решение для оптимизации времени вывода.Я думаю об удалении нескольких дополнений

index=csvlookups source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_usage.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_dpt_capacity.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_forecasts.csv" 
| eval Date=strftime(strptime(Date,"%m/%d/%Y"),"%Y-%m-%d") 
| sort Date, CLLI 
| rename CLLI as Office 
| search Office="CLGRAB21DS1" 
| stats sum(Usage) as Usage by Office, Date 
| append 
    [ search index=csvlookups source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_usage.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_dpt_capacity.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_forecasts.csv"
    | eval Date=strftime(strptime(Date,"%m/%d/%Y"),"%Y-%m-%d") 
    | reverse 
    | search Office="CLGRAB21DS1" AND Type="SIP PBX" 
    | fields Date NB_RTU 
    | fields - _raw _time ] 
| sort Date 
| fillnull value="CLGRAB21DS1" Office 
| filldown Usage 
| filldown NB_RTU 
| fillnull value=0 Usage 
| eval _time = strptime(Date, "%Y-%m-%d") 
| eval latest_time = if("now" == "now", now(), relative_time(now(), "now")) 
| where ((_time >= relative_time(now(), "-3y@h")) AND (_time <= latest_time)) 
| fields - latest_time Date 
| append 
    [ gentimes start=-1 
    | eval Date=strftime(mvrange(now(),now()+60*60*24*365*3,"1mon"),"%F") 
    | mvexpand Date 
    | fields Date 
    | append 
        [ search index=csvlookups source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_usage.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_dpt_capacity.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_forecasts.csv"
        | rename "Expected Date of Addition" as edate 
        | eval edate=strftime(strptime(edate,"%m/%d/%Y"),"%Y-%m-%d") 
        | rename edate as "Expected Date of Addition" 
        | table Contact Customer "Expected Date of Addition" "Number of Channels" Switch 
        | reverse 
        | search Customer = "Regular Usage" AND Switch = "CLGRAB21DS1" 
        | rename "Number of Channels" as val 
        | return $val ] 
    | reverse 
    | filldown search 
    | rename search as Usage 
    | where Date != "" 
    | reverse 
    | append 
        [ search index=csvlookups source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_usage.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_dpt_capacity.csv" OR source="F:\\SplunkMonitor\\csvlookups\\Core_Network\\lookup_table_sip_pbx_forecasts.csv"
        | rename "Expected Date of Addition" as edate 
        | eval edate=strftime(strptime(edate,"%m/%d/%Y"),"%Y-%m-%d") 
        | rename edate as "Expected Date of Addition" 
        | table Contact Customer "Expected Date of Addition" "Number of Channels" Switch 
        | reverse 
        | search Customer != "Regular Usage" AND Switch = "CLGRAB21DS1" 
        | rename "Expected Date of Addition" as Date 
        | eval _time=strptime(Date, "%Y-%m-%d") 
        | rename "Number of Channels" as Forecast 
        | stats sum(Forecast) as Forecast by Date] 
    | sort Date 
    | rename Switch as Office 
    | eval Forecast1 = if(isnull(Forecast),Usage,Forecast) 
    | fields - Usage Forecast 
    | streamstats sum(Forecast1) as Forecast 
    | fields - Forecast1 
    | eval Date=strptime(Date, "%Y-%m-%d") 
    | eval Date=if(Date < now(), now(), Date) ] 
| filldown Usage 
| filldown Office 
| eval Forecast = Forecast + Usage 
| eval Usage = if(Forecast >= 0,NULL,Usage) 
| eval _time=if(isnull(_time), Date, _time) 
| timechart limit=0 span=1w max(Usage) as Usage, max(NB_RTU) as NB_RTU, max(Forecast) as Forecast by Office 
| rename "NB_RTU: CLGRAB21DS1" as "RTU's Purchased", "Usage: CLGRAB21DS1" as "Usage", "Forecast: CLGRAB21DS1" as "Forecast" 
| filldown "RTU's Purchased" |sort -Forecast

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Если inputlookup работал хорошо, вам следует придерживаться этого, поскольку вы не получите намного быстрее.

Трудно дать конкретный совет по вашему запросу, не зная больше о данных и ваших конечных целях.В общем:

Фильтр ранний.Сделайте ваш базовый запрос (перед первым '|') как можно более конкретным.Запустите пункты where и search, как только сможете.

Используйте fields вместо table.Это более эффективно.

Сортировка только при необходимости.Обычно в этом нет необходимости.

Меньше appends лучше.

0 голосов
/ 09 декабря 2018

Определенно дорогой запрос, который вы не хотите запускать часто или через большие промежутки времени.В вашем первом приложении, почему вы используете reverse?Вы пытаетесь получить самое позднее и самое раннее время, поэтому вы использовали приложение?Для этого вы можете использовать earliest и latest и исключить первый подпоиск.Вы также можете рассмотреть eventstats вместо stats при первом поиске, поскольку вы все равно сохраните необработанные данные.

Вы также суммируете по _time, поэтому вам следует подумать о биннинге ваших _time-интервалов (т. Е. | Bin Date span = 1h).Кроме того, почему вы используете filldown?Я предполагаю, что вы хотите получить значения из разных строк и хотите, чтобы строки совпадали?Если это так, используйте streamstats для этого

...