【SPLK-1001】Splunk Core Certified User資格を取得するための勉強メモ

こんばんは。torippy1024です。
先日、SPLK-1001(Splunk Core Certified User試験)の受験体験記を書いたのですが、もうちょっと勉強する分野や内容について詳細を書いた方が良いと思い、自身の振り返りの意味も込めて勉強記事を書きます。

## SPLK-1001(Splunk Core Certified User)とは

### 公式サイト
以前の記事でも書いた通りですが、試験概要は以下のサイトを参照すればわかります。
日本語サイトだけでは不十分で、英語サイトも参照したほうが吉です。

概要：
https://www.splunk.com/ja_jp/training/certification-track/splunk-core-certified-user.html

トラックフローチャート：
https://www.splunk.com/en_us/pdfs/training/splunk-core-certified-user-track.pdf

blueprint：
https://www.splunk.com/en_us/pdfs/training/splunk-test-blueprint-user.pdf

### 出題分野と割合
出題範囲と割合は上記のblueprintに記載されています。以下の通りです。(合計して100%にならないことにはとりあえず突っ込みを入れない)
- 1.0 Splunk Basics 5%
- 2.0 Basic Searching 22%
- 3.0 Using Fields in Searches 20%
- 4.0 Search Language Fundamentals 15%
- 5.0 Using Basic Transforming Commands 15%
- 6.0 Creating Reports and Dashboards 12%
- 7.0 Creating and Using Lookups 6%
- 8.0 Creating Scheduled Reports and Alerts 5%

### 推奨研修
Splunkには、無償のe-Learningを含むSTEP(Splunk Training and Enablement Platform)と呼ばれる研修サイトが用意されています。
STEP内では、研修コースをまとめたものをカリキュラム(Learning Paths)として設定されており、「Splunk Core Certified User Learning Path (Exam Prep)」という名前のカリキュラムを受講することで、出題分野を網羅した研修を全て受講することができます。

#### Splunk Core Certified User Learning Path
- Intro to Splunk
- Using Fields
- Scheduling Reports and Alerts
- Visualizations
- Working with Time
- Statistical Processing
- Leveraging Lookups and Subsearches ※
- Search Optimization ※
https://www.splunk.com/en_us/training/course-catalog.html?filters=filterGroup1FreeCourses%2CfilterGroup2SplunkCoreCertifiedUser

※上記のうち、Leveraging Lookups and SubsearchesとSearch Optimizationは有償研修のみだったが、他は無償のe-Learningが受講可(2024/1/12時点)

![スクリーンショット 2024-01-12 133859.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/603f5f42-d659-3538-5a5b-044c09527dd8.jpeg)
ちょっとわかりづらいのですが、https://education.splunk.com/Saba/Web_spf/NA10P2PRD105/app/dashboard より、上記のリンクをたどるとカリキュラム(Learning Paths)の一覧を見つけることができます。

## その他参考になる資料
上記の無償研修の資料が最も参考になると思いますが、それ以上に詳細な情報が必要な場合は、公式サイトのドキュメントを参照するのが良いです。(基本は英語です。一部日本語訳されたドキュメントもあります)

### 公式ドキュメント
https://docs.splunk.com/Documentation/Splunk

### 日本語訳されたドキュメントの一覧
https://docs.splunk.com/Documentation/Splunk/9.1.2/Translated/Japanesemanuals

## 各分野の概要
### 1.0 Splunk Basics
概要としては、Splunkを構成する主なコンポーネントの名称と役割、Splunk Appとは何か、GUIのサーチ画面での操作などを理解すればよいと思われます。

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Overview/AboutSplunkEnterprise
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchTutorial/WelcometotheSearchTutorial

#### Splunkの構成コンポーネント
最も重要なものは以下の3つです。(オンプレであるSplunk Enterpriseの場合)
- Search Head：ユーザーがログインするGUI機能やサーチをIndexerに投げる機能を持ちます。
- Indexer：Forwarderから取得したデータをindexと呼ばれるバケットに保管し、サーチに対する結果をSearch Headに渡す機能を持ちます。
- Forwarder：ログの取得対象(サーバーやNW機器)に対して導入するエージェントです。Forwarderがindexerに対してログを転送しています。最低限の機能を持つUniversal Forwarderと機能が追加されているHeavy Forwarderがあります(Heavy Forwarderには別ライセンスが必要)

Splunk Cloudの場合、Search HeadやIndexerはSplunk Cloud管理となるため、ユーザーが意識する必要はなくなります。しかし、ログを転送するためのForwarderは対象機器に対してインストールする必要があります。

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Deploy/Distributedoverview

#### Splunk Appとは何か
Splunkの拡張機能にSplunk App(App)というものがあります。
Aplunk Appは、特定の用途向けにFieldやダッシュボードやレポートなどの設定を事前定義しているものです。
無償のAppと有償のAppがあり、SIEMであるSplunk IT Service Intelligence(ITSI)やAIOpsであるSplunk Enterprise Securityなどは有償のSplunk Appとして提供されています。
(実はサーチ画面などもAppとして定義されており、Splunkの機能を利用するための環境定義そのものがAppと言ってもいいかもしれません)

Appは、Splunkbaseから一覧を参照したりダウンロードすることができます。URLは以下です。試験対策として覚えておいた方がよいかもしれません。
https://splunkbase.splunk.com

#### ユーザーの種類
Splunkのユーザーの権限はRBAC(Role Based Access Control)で定義されます。
権限ロールは以下の通りです。
- Admin
- Power User
- User

#### GUIのサーチ画面での操作
実際に画面にログインして触ったほうが早いので割愛します。
公式サイト内の画像を見て説明読んで、数回触ればだいたい覚えられると思います。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchTutorial/Aboutthesearchapp

### 2.0 Basic Searching
サーチの基礎を理解しておけばよいです。Field(< Key >=< Value >)を指定してのサーチ、Boolean演算子(NOT、OR、AND等)やカッコ()、バックスラッシュ/によるエスケープの使い方などです。

Splunkには、サーチ文を入力する際に助けとなるオートコンプリート機能があります。これはSearch Assistantと呼ばれます。

サーチの結果を早く得るためには、Splunkのデータの構造を理解した上で適切なサーチ構文を作成する必要があります。が、それを現段階で深く理解する必要はありません。最初のうちは、以下を理解しておけば十分です。

- サーチを高速化するためには、まずデータの保管場所であるindexや、timestampで検索するデータ範囲をフィルタリングする
- デフォルトフィールド(後述で説明)であるhost、source、sourcetypeはなるべく指定する
- ワイルドカード(*)を使用すると遅くなりやすい。可能であればORやNOTを使用する

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Search/GetstartedwithSearch

### 3.0 Using Fields in Searches
Fieldについて概要と使い方を理解しておけばよいと思います。

#### Fieldとは
Fieldとは、データの抽出や分析を行うための< Key >=< Value >ペアのことです。Name = Taroとかのことですね。
FieldのKeyはCase Sensitive(大文字と小文字を区別する)ですが、ValueはCase Insensitive(区別なし)です。
つまり、user = Taroと、user = TAROは同じ検索結果となりますが、user = Taroと、User = Taroは異なる検索結果となるということです。

#### Field Discovery
Splunkは、Seachコマンドの実行時、indexに保管されているデータからFieldを自動抽出します。この機能をField Discoveryと呼びます。
Field Discoveryには、Search Modeと呼ばれる設定があり、Fast Mode/Smart Mode/Verbose Modeの3つがあります。Field Discoveryを設定しているとSearch実行時間が長くなってしまうため、デフォルトではSmart Modeが設定されています。

#### サーチ画面サイドバーについて
サーチ画面サイドバーにデフォルトで表示されている重要なFieldはhost(機器のホスト名やIPアドレス、FQDNなど)、source(ディレクトリパスやファイルパスなど)、sourcetype(splunkがデータを処理するための分類)です。
サーチ画面サイドバーには、Interesting Fieldと呼ばれる項目があります。サーチ結果として表示されているデータの中の20%以上に現れるFieldです。
これらFieldをクリックすることで更にサーチ結果を絞ることができます。

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Knowledge/Aboutfields

### 4.0 Search Language Fundamentals
SPL(Search Proccessing Lanaguge)についての基礎を理解しておけばよいです。SPLはSplunk Processing Languageではありませんのでご注意ください。(私はずっと間違えて覚えていました・・・)

パイプライン(|)、table、rename、fields、dedup、sortコマンドなどについて、概要と基本的な使い方を理解しておけばよいと思います。

table:
サーチ結果から表を作成し表示するコマンドです。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Table

fields:
サーチ結果からFieldを追加または削除するコマンドです。fieldではなくfield"s"です。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Fields

dedup:
サーチ結果に含まれるデータの重複を決めることができます。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Dedup

sort:
特定のFieldを指定し、サーチ結果を昇順や降順でソートします。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Sort

### 5.0 Using Basic Transforming Commands
Core Certified Userでは主なコマンドとしてtop、rare、statsの3つを理解しておけばよいと思います。
とはいえ、理解するのはコマンドの概要や意味だけでなく、望む結果を得られるサーチコマンドを構築できる力も必要と思います。

#### top
指定されたFieldに存在する値の中で、最も頻度が高い値を抽出するためのコマンド。
大量アラートが発生した際に、最も多くのアラートが発生している機器を特定する時などに使えると思います。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Top

#### rare
指定されたFieldに存在する値の中で、最も珍しい(レア)な値を抽出するためのコマンド。
大量のイベントログの中の異常を調べる時などに使えると思います。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Rare

#### stats
検索して得られたデータの統計情報を表示することができるコマンド。
平均や合計などをこのコマンドによって求めることができます。レポート出力などに使えば作業の自動化もできます。
https://docs.splunk.com/Documentation/Splunk/9.1.2/SearchReference/Stats

### 6.0 Creating Reports and Dashboards
サーチをレポートとして登録し、画面に表示する方法と、ダッシュボードの概要を理解しておけばよいと思います。

#### レポート機能とは
レポート機能とは、レポートデータを作成するという機能ではなく、サーチ文を保存し、後から呼び出すことができる機能です。
サーチを実行した後、サーチ文を保存し、後に定期的または手動で呼び出すことができるのがレポート機能です。
(一般的にイメージするレポート機能とは異なるので注意してください)
サーチ結果はデフォルトでは7日間しかSplunkで保存されません。7日間を越えてサーチ結果を保存したい場合、レポート化するのが便利です。

#### ダッシュボード機能とは
ダッシュボード機能とは、サーチを実行して得られた結果をダッシュボード画面として表示する機能です。
ユーザーが利用するGUI画面であるダッシュボードには、Classic DashuboardとSplunk Dashboard Studioの二種類があります。ダッシュボードを構成する要素にパネルがあります。
Classic Dashuboardは、xmlで定義された従来のダッシュボードです。
Splunk Dashboard Studioは、新しいダッシュボードのフレームワークで、jsonで定義されています。

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Viz/Aboutthismanual

### 7.0 Creating and Using Lookups
Lookupについて概要を理解し、使えるようになれば良いと思います。Lookupテーブルファイルの作成とインポートと利用ができる必要があります。
おそらく独学だとここで理解に苦しむのではないかと推測します。

#### Lookupとは何か
Lookup機能とは、Excelのvlookup関数/hlookup関数のように、ある値を指定し、その値を持っている別のテーブル(SplunkではこれをLookup Tableと言う)を参照してそれに関連する別の値を呼び出すことで、データに存在していない値をサーチ検索結果に同時表示させることができる機能です。

lookup Tableファイルに記述されるデータは、基本的に不変、またはめったに変更されないデータとしておくべきです。

lookup Tableファイルの中身を見る場合はinputlookupコマンドを使います。
`inputlookup < lookupfile >.csv`

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Knowledge/Aboutlookupsandfieldactions

### 8.0 Creating Scheduled Reports and Alerts
レポートとアラートのスケジューリング機能についてです。

Splunkにおけるレポート機能とは、一般的にイメージするレポートとは異なり、サーチ文を保存する機能であることは説明しました。
レポートのスケジューリング機能は、定期的にレポート(サーチ文)を実行する機能です。
アラート機能は、サーチの実行結果をトリガーとしてメール通知などのアラートアクションを行う機能です。

参考：
https://docs.splunk.com/Documentation/Splunk/9.1.2/Report/Aboutreports
https://docs.splunk.com/Documentation/Splunk/9.1.2/Alert/Aboutalerts


## 終わりに
全範囲を網羅はできていないのですが、私が勉強したのは上記のような範囲です。
参考になれば幸いです。(そしてどこか間違っていたら教えてください・・・・・・)