Splunk Search

営業日・時間内のイベントのみカウント

satoshitonoike
Engager

現在、ヒストグラムにて業務の対応時間を集計しています。
実働時間の記載がないデータのため、2つの時間項目(受付日時 対応完了日時)を使用して対応時間を算出しております。
ですが、現状算出されるデータは受付日時と対応完了日時が土日以外の曜日で9-18の間にタイムスタンプが押されているイベントを取ってくるだけで、営業時間外の時間も対応工数として集計してしまっています。
できれば、該当イベントの営業時間内のみ対応工数として時間集計をして欲しいのです。
どのように設定すればよいでしょうか。
ご教示頂けますよう、よろしくお願いします。

searchは以下の様になっております。

【search文】
index=問合せ対応_index
|eval tnow=now(),受付=strptime('受付日時',"%Y/%m/%d %H:%M"),期限=strptime('対応完了日時',"%Y/%m/%d %H:%M")
|where (date_wday="saturday" OR date_wday="sunday")
|eval myHour=strftime(_time, "%H")
|eval myMinute=strftime(_time, "%M")
|where ( (myHour >= 9 AND myMinute >= 00) OR (myHour <= 18 AND myMinute <= 00) )
|eval 対応時間=('期限'-'受付')/3600
|eval 対応時間(H)=round('対応時間')
|search 対応時間<610
|search 対応時間>0
|bucket 対応時間(H) span=10
|stats count as 問合せ件数 by 対応時間(H)
|sort 対応時間(H)

0 Karma
1 Solution

melonman
Motivator

データ量にもよりますが、例えば以下のようなアプローチではどうでしょか。

1.何曜日の何時台に受付したか、何曜日の何時台に完了したかを分離して別々の情報とし、
2.上記の2つのデータを時間を軸に結合し、
3.どの問い合わせが何曜日の何時台に対応していたかを見つけ、
4.その時刻が営業時間かどうか判定して、
5.その後煮るなり焼くなりする

ちらっと勝手にデータ作ってやってみました。

業務id,受付日時,対応完了日時
id,started,completed
1,2017/1/22 18:00,2017/1/23 10:00
2,2017/1/22 15:00,2017/1/28 01:00
3,2017/1/23 09:00,2017/1/23 09:30
4,2017/1/23 15:00,2017/1/23 18:00
5,2017/1/23 15:00,2017/1/23 18:00
6,2017/1/27 15:00,2017/1/27 18:00
7,2017/1/27 17:00,2017/1/30 10:00

土日除く9am-6pmが営業だと、各id(問い合わせ)については:
id1が23日の9時から10時までの1時間だけ対応
id2が数日間に渡って対応はしているが、22日9時よりまえと27日の18時以降、その他の日の9時〜6時に入らない時間帯は除外
id3は30分で対応終了
とか、そんな感じでしょうか。(ここで理解が間違ってたら以下はおかしくなりますが参考までに書き続けます)

上記のcsvをlookupsディレクトリにtest.csvとして保存し、以下を実行すると、それっぽい表がでてきます。

| inputlookup test.csv
| eval _time=strptime('started',"%Y/%m/%d %H:%M"), data="started"
| fields _time id data
| append [
| inputlookup test.csv
| eval _time=strptime('completed',"%Y/%m/%d %H:%M"), data="completed"
| fields _time id data ]
| sort  _time
| timechart span=10m list(data) by id
| filldown
| foreach * [eval <<FIELD>>=if(match('<<FIELD>>', "started") AND mvcount('<<FIELD>>')=1,1,0)]
| untable _time id isWorking
| timechart span=1h max(isWorking) as isWorking by id
| eval H=strftime(_time,"%H"), W=strftime(_time,"%A")
| search NOT (W="Saturday" OR W="Sunday" OR H<9 OR H>=18)

おそらくこの時点で、どの問い合せ(id)が何時台に対応されているかが1と0で出てくると思います。
あとはidごとにsumを取れば(単純にaddtotalcolsをつけてもOK)、各問い合わせに業務時間内に何時間つかったか、がでてくるとおもいます。

ヒストグラムについては上記サーチの後に以下のようにすればでてくるかとおもいます。

| addcoltotals labelfield=H label="Total"
| where H="Total"
| fields - _time W H
| transpose 0
| rename "row 1" as H 
| bin H bins=10 
| stats count by H
| makecontinuous H
| fillnull count

alt text

ずれてるかもしれませんが、お役に立てれば幸いです。
サーチが無駄にながくなってしまってすみません、、

View solution in original post

0 Karma
Get Updates on the Splunk Community!

Adoption of RUM and APM at Splunk

    Unleash the power of Splunk Observability   Watch Now In this can't miss Tech Talk! The Splunk Growth ...

Routing logs with Splunk OTel Collector for Kubernetes

The Splunk Distribution of the OpenTelemetry (OTel) Collector is a product that provides a way to ingest ...

Welcome to the Splunk Community!

(view in My Videos) We're so glad you're here! The Splunk Community is place to connect, learn, give back, and ...