【図解あり】Sumo Logic入門:クエリの書き方の基本

 2025.09.05  株式会社テリロジー 技術統括部

こんにちは、初めまして。技術本部のY.T.です。
初のブログ執筆になります。よろしくお願いします。
さて突然ですが、今回はSumo Logicのクエリの書き方について書こうと思います。現在Sumo Logicに興味を持って下さっている方や、クエリを使ったログ分析のイメージを掴みたいという方の参考になれば幸いです。

 

クエリとは

Sumo Logicのクエリとは、ログデータやメトリクスなどを検索、分析するために記述する命令文のことです。クエリを書くことでログの絞り込みを行い、ダッシュボードとして可視化したり、アラートを発報することができます。
クエリは、オペレーターという命令語をいくつも組み合わせて作られています。

 

クエリの書き方

ここではよく使われるオペレーターを3つほど紹介し、書き方や動作をご紹介します。
以下のようなCSV形式のログデータが、Sumo Logicに取り込まれているという前提で見ていきます。(今回の例では、あらかじめフィールド化(パース処理)されている前提でご紹介していきます。本来は必要に応じてパース文を書く必要があります。)

ログデータ(_sourceCategory="test")

#

time

event_type

log_type

logon_user

access_group

1

2025/5/15 16:06:22

ファイル削除

ファイル操作

ユーザーA

営業2課

2

2025/5/15 15:29:30

ファイル削除

ファイル操作

ユーザーA

営業2課

3

2025/5/15 15:01:05

ダウンロード

Webアクセス

ユーザーB

営業2課

4

2025/5/15 14:41:38

閲覧

Webアクセス

ユーザーC

サポート2課

5

2025/5/15 13:08:49

ファイル作成

ファイル操作

ユーザーA

営業2課

6

2025/5/15 10:56:52

閲覧

Webアクセス

ユーザーD

営業2課

7

2025/5/15 10:23:57

ダウンロード

Webアクセス

ユーザーB

営業2課

8

2025/5/15 10:11:21

アップロード

Webアクセス

ユーザーD

営業2課

9

2025/5/15 09:02:33

ダウンロード

Webアクセス

ユーザーD

営業2課

10

2025/5/15 09:00:52

ドライブ追加

ファイル操作

ユーザーA

営業2課

 

・count

該当するログの数を数える際はcountオペレーターを使用します。
count
オペレーターには様々な使い方がありますが、これが最も基本の形になります。
_sourceCategory="test"
| count

結果

#

_count

1

10

 

特定のカラムにグルーピングしてログを数えたい場合は以下のように記述します。
_sourceCategory="test"
| count by event_type

結果

#

event_type

_count

1

ファイル削除

2

2

ダウンロード

3

3

閲覧

2

4

ファイル作成

1

5

アップロード

1

6

ドライブ追加

1

  

・where

特定の条件に沿ってログを絞り込むにはwhereオペレーターを使用します。
今回はlog_typeフィールドが ファイル操作のログのみに絞り込んでいます。
_sourceCategory="test"
| where log_type = “ファイル操作"

結果

#

time

event_type

log_type

logon_user

access_group

1

2025/5/15 16:06:22

ファイル削除

ファイル操作

ユーザーA

営業2課

2

2025/5/15 15:29:30

ファイル削除

ファイル操作

ユーザーA

営業2課

3

2025/5/15 13:08:49

ファイル作成

ファイル操作

ユーザーA

営業2課

4

2025/5/15 09:00:52

ドライブ追加

ファイル操作

ユーザーA

営業2課

 

また、エクスクラメーションマーク(!)を使用することで、余事象を絞り込むことができます。
_sourceCategory="test"
| where !(log_type = “ファイル操作")

結果

#

time

event_type

log_type

logon_user

access_group

1

2025/5/15 15:01:05

ダウンロード

Webアクセス

ユーザーB

営業2課

2

2025/5/15 14:41:38

閲覧

Webアクセス

ユーザーC

サポート2課

3

2025/5/15 10:56:52

閲覧

Webアクセス

ユーザーD

営業2課

4

2025/5/15 10:23:57

ダウンロード

Webアクセス

ユーザーB

営業2課

5

2025/5/15 10:11:21

アップロード

Webアクセス

ユーザーD

営業2課

6

2025/5/15 09:02:33

ダウンロード

Webアクセス

ユーザーD

営業2課

 

・timeslice

時間ごとにログを区切って絞り込みたい場合、timesliceオペレーターを使用します。
timeslice
オペレーターを使用することで、ログを指定した期間で区切り、それぞれの期間内のログごとに処理を行います。
ここでは例としてtimesice1時間の範囲で区切り、countで集計してみます。
_sourceCategory="test"
| timeslice 1h
| count by _timeslice

結果

#

time

_count

1

2025/5/15 16:00:00

1

2

2025/5/15 15:0:00

2

3

2025/5/15 14:00:00

1

4

2025/5/15 13:00:00

1

5

2025/5/15 10:00:00

3

6

2025/5/15 09:00:00

2

1時間で区切りカウントすることで、1時間範囲ごとのそれぞれのログの数を出してくれます。
ここでは9時台が2件、10時台が3件、13時台が1件…のように、それぞれの時間でログ数をカウントしてくれています。

 

実例

先程紹介したオペレーターを使い、実際に使われるようなクエリを書いてみたいと思います。
今回は、内部監査用のダッシュボードに使用することを目的として、ダウンロード数の1時間ごとの推移をグラフで可視化してみようと思います。

使用するログは先程と同じものを使います。

ログデータ(_sourceCategory="test")

#

time

event_type

log_type

logon_user

access_group

1

2025/5/15 16:06:22

ファイル削除

ファイル操作

ユーザーA

営業2課

2

2025/5/15 15:29:30

ファイル削除

ファイル操作

ユーザーA

営業2課

3

2025/5/15 15:01:05

ダウンロード

Webアクセス

ユーザーB

営業2課

4

2025/5/15 14:41:38

閲覧

Webアクセス

ユーザーC

サポート2課

5

2025/5/15 13:08:49

ファイル作成

ファイル操作

ユーザーA

営業2課

6

2025/5/15 10:56:52

閲覧

Webアクセス

ユーザーD

営業2課

7

2025/5/15 10:23:57

ダウンロード

Webアクセス

ユーザーB

営業2課

8

2025/5/15 10:11:21

アップロード

Webアクセス

ユーザーD

営業2課

9

2025/5/15 09:02:33

ダウンロード

Webアクセス

ユーザーD

営業2課

10

2025/5/15 09:00:52

ドライブ追加

ファイル操作

ユーザーA

営業2課

 

 

手順1

クエリを書く際、まず使用したい情報が含まれるログのみに絞り込みます。
今回はダウンロードのログのみを使用するので、whereオペレーターでevent_typeをダウンロードのログのみに絞り込みます。
_sourceCategory="test"
| where event_type = "ダウンロード"

結果

#

time

event_type

log_type

logon_user

access_group

1

2025/5/15 15:01:05

ダウンロード

Webアクセス

ユーザーB

営業2課

2

2025/5/15 10:23:57

ダウンロード

Webアクセス

ユーザーB

営業2課

3

2025/5/15 09:02:33

ダウンロード

Webアクセス

ユーザーD

営業2課

これで、今回使用するログが絞り込めました。

 

手順2

使用するログが絞り込めたので、次は可視化するための整形を行います。
1時間ごとの変化を見たいため、1時間ごとでカウントするクエリを書きます。_sourceCategory="test"
| where event_type = "ダウンロード"
| timeslice 1h
| count by _timeslice

結果

#

time

_count

1

2025/5/15 15:00:00

1

2

2025/5/15 10:00:00

1

3

2025/5/15 09:00:00

1

10時の次が15時…? 11時~14時台が抜けていますね。
これは11時~14時台に該当するログが無いためです。
本来11時~14時はダウンロードのログがないため「0」を表示したいです。
しかしcountオペレーターでは、該当するログが1つ以上ある場合しか表示されないため、このような結果になってしまいます。

ちなみに、この状態を折れ線グラフで表示すると以下のようになります。
howtowritequery_1

ただの横這いですね。これでは推移のグラフとは言えません。
そこで次は、ダウンロードのログが無い時間帯を「0」で表示する作業を行います。

 

手順3

ダウンロードのログがない時間帯を含むすべてを結果に出すというクエリを書きます。
fillmissingオペレーターを使用することで、0を含む全てを結果に出すようになります。
_sourceCategory="test"
| where event_type = "ダウンロード"
| timeslice 1h
| count by _timeslice
| fillmissing timeslice

結果

#

time

_count

1

2025/5/15 16:00:00

0

2

2025/5/15 15:00:00

1

3

2025/5/15 14:00:00

0

4

2025/5/15 13:00:00

0

5

2025/5/15 12:00:00

0

6

2025/5/15 11:00:00

0

7

2025/5/15 10:00:00

1

8

2025/5/15 09:00:00

1

結果(折れ線グラフ)
howtowritequery_2
当てはまるログがない時間も結果に出るようになり、増減の推移が分かるようになりました。
今回は元のログが少ないため値の小さいグラフでしたが、実際のログを用いた際はより値が大きく、より増減の推移が分かりやすく出るようになります。

 

最後に

いかがでしたでしょうか。本記事ではクエリの書き方の基本についてご紹介させていただきました。
今回は例として、オペレーターを3つほどご紹介させていただきましたが、実際のダッシュボードでは数多くのオペレーターを使用しています。

Sumo Logicでは、オペレーターを使用することで、取り込んだログを多様なニーズに合った形で可視化することができます。この記事を読んでくださった方が、少しでもSumo Logicのログ分析に興味を持って下されば幸いです。


RECENT POST「Sumo Logic」の最新記事


Sumo Logic

数週間から数分へ:SumoLogicの履歴ベースライン処理がUEBAをいかに強化するか

Sumo Logic

セキュリティインシデントの検知・調査・対応を迅速化するには? ~Sumo LogicのクラウドネイティブSIEMが変えるSOC運用~

Sumo Logic

初めてのSIEM購入で失敗しないために

Sumo Logic

脅威インテリジェンスフィード:サイバーセキュリティにおける必須の武器

【図解あり】Sumo Logic入門:クエリの書き方の基本

RECENT POST 最新記事

RANKING人気記事ランキング

ブログ無料購読のご案内