Ответный запрос занимает много времени, чтобы вернуть значение, можем ли мы удалить

Первоначально я использовал 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 ответа

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

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

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

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

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

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

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

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

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