# [Splunk] SPL

## Introduction

Le SPL est le langage de requête propriétaire à Splunk. Il est extrêmement puissant mais utilise une syntaxe peu triviale.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2026-02/scaled-1680-/87himage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2026-02/87himage.png)

## Cheat-sheet

#### Index

Pour chercher dans un index :

```
index="main"
```

#### Opérateurs

<table border="1" id="bkmrk-op%C3%A9rateurs-%3D-%21%3D-%3E-%3E%3D" style="border-collapse: collapse; width: 100%; height: 208.578px;"><colgroup><col style="width: 100%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">**Opérateurs**</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">=</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">!=</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&gt;</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&gt;=</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&lt;</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&lt;=</td></tr></tbody></table>

#### Supprimer un champ de l'affichage

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | fields - User
```

#### Créer un tableau

```shell-session
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | table _time, host, Image
```

<p class="callout info">Ici un tableau sera affiché avec trois colonnes : \_time, host et Image.</p>

#### Renommer un champ

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | rename Image as Process
```

#### Supprimer les doublons

Vous pouvez supprimer les doublons en vous basant sur un champ :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | dedup Image
```

<p class="callout info">Ici, si un même process apparaît plusieurs fois dans les logs, il n'y aura quand même qu'un seul résultat affiché.</p>

#### Trier

Par exemple pour trier dans le temps :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | sort - _time
```

#### Statistiques

Pour avoir des statistiques, par exemple le **count** :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=3 | stats count by _time, Image
```

#### Graphiques

Vous pouvez faire une visualisation avec le mot clé **chart** :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=3 | chart count by _time, Image
```

#### Eval

Pour effectuer des opérations basiques comme mettre en minuscule un champ :

```shell-session
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | eval Process_Path=lower(Image)
```

#### Regex

Pour effectuer une regex :

```
index="main" EventCode=4662 | rex max_match=0 "[^%](?<guid>{.*})" | table guid
```

#### Lookup table

Après avoir importé votre CSV dans Splunk, vous pouvez effectuer des vérifications pour ajouter un champ :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | rex field=Image "(?P<filename>[^\\\]+)$" | eval filename=lower(filename) | lookup malware_lookup.csv filename OUTPUTNEW is_malware | table filename, is_malware
```

#### Time range

```
index="main" earliest=-7d latest=-1d EventCode!=1
```

#### Transaction

Permet de regrouper plusieurs events qui partagent un champ commun :

```
index="main" sourcetype="WinEventLog:Sysmon" (EventCode=1 OR EventCode=3) | transaction Image startswith=eval(EventCode=1) endswith=eval(EventCode=3) maxspan=1m | table Image |  dedup Image 
```

<p class="callout info">Le **maxspan** sert à spécifier une fenêtre de temps maximale entre les deux events.</p>

#### Subsearches

Permet de faire une sous-recherche comme filtre dans sa requête :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 NOT [ search index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | top limit=100 Image | fields Image ] | table _time, Image, CommandLine, User, ComputerName
```

#### Eventcount

Pour obtenir le nombre d'events de votre query :

```
| eventcount summarize=false index=* | table index
```

#### Metadata

```
| metadata type=sourcetypes
```

#### Sourcetype

Filtrer par sourcetype permet d'augmenter les performances de la query :

```
sourcetype="WinEventLog:Security" | table _raw
```

#### Fieldsummary

Pour avoir un récapitulatif de statistiques :

```
sourcetype="WinEventLog:Security" | fieldsummary
```