Yami

メモとか、やったこととか。

Splunk ダミーデータ生成メモ【随時更新】

Splunk VisualizationやDashboardにパネルをおく際、とりあえず見た目を確認したりするために値を設定したいときがあると思います。
わざわざ生のログからデータを引っ張ってくるのも面倒な時は、ダミーデータを生成するのが手っ取り早いし、パネルに設定したい値も自由に決めれます。

本ポストは、そんなダミーデータを生成するSPLをまとめて書いておくメモページです。

任意の値を1つ

使途:Single Value panelなど。

| makeresults
| eval num=100
| table num

f:id:jrick:20220308002107p:plain

複数の値

使途:Table panelなど。
事前に文字列を用意し、指定した区切り文字で区切りテーブルにするという方法。

| makeresults
| eval data="a, b, c, d, e" 
| eval data=split(data,", ") 
| mvexpand data
| table data

f:id:jrick:20220309002241p:plain

複数の値(連番)

こちらは連番を作るやり方。

| makeresults count=5
| streamstats count
| table count

f:id:jrick:20220308002354p:plain

複数の値(ランダム)

1つ前のSPLに少し追加。「random()%数字」とすることで、0~(数字-1)の間でランダムな数字を生成できます。

| makeresults count=5
| streamstats count
| eval count=random()%100
| table count

f:id:jrick:20220308002600p:plain

フィールド2つの値(連番+ランダム)

1つ前のSPLに、idとなるフィールドを追加。

| makeresults count=5
| streamstats count as id
| eval count=random()%100
| table id,count

f:id:jrick:20220308002833p:plain

任意の値の表

append+サブサーチを利用することで、任意の値の行を追加できます。

| makeresults
| append [ | makeresults | eval id="abc" | eval data="abc123" ]
| append [ | makeresults | eval id="def" | eval data="456def" ]
| append [ | makeresults | eval id="ghi" | eval data="ghi789" ]
| search id=*
| table id,data

f:id:jrick:20220308003233p:plain

フィールドソートするとき特定のアイテムは常時一番上にくるようにする

ソートオーダ用の列を追加し、ソートオーダ列→値列の優先度でソートを実行。
以下のSPLでは、aaaが常に一番上に表示されます。

| makeresults
| eval name=split("aaa, bbb, ccc, ddd, eee", ", ")
| mvexpand name
| streamstats count | eval count=if(name=="aaa",1,2)
| eval val=random()%100
| search name=* 
| sort count, -val
| table name,val,count

f:id:jrick:20220309231340p:plain

SANS Sift Workstationのrip.plが実行できない問題の対応

フォレンジック解析を行う際は、必要なツールが最初から導入されており、かつ無料で利用できる「SIFT Workstation | SANS Institute」をよく利用しています。
ただ本日(2022/02/27)時点で公開されているOVAタイプのバージョンのものにインストールされているRegripper(rip.plコマンド)は、エラーが発生し正常に実行できません。
本ポストはその解決策のメモです。

導入したSift Workstationのバージョンは以下の通りです。

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

rip.plを実行するとエラーが発生

解析するためのプラグインレジストリファイルを指定し実行すると、以下のようなエラーが発生します。

$ rip.pl -p compname -r SYSTEM 
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 79.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 79.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 89.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 115.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 115.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 126.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 146.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 185.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 236.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 236.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 256.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 280.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 305.
Global symbol "$plugindir" requires explicit package name (did you forget to declare "my $plugindir"?) at /usr/local/bin/rip.pl line 408.
Execution of /usr/local/bin/rip.pl aborted due to compilation errors.

どうやら「$plugindir」という変数が定義されていない模様です。

解決策

スクリプトのバックアップを取ったうえで、以下のように修正します。

$ sudo cp /usr/share/regripper/rip.pl /usr/share/regripper/rip.pl.old

$ sudo vi /usr/share/regripper/rip.pl

$ diff -u /usr/share/regripper/rip.pl.old /usr/share/regripper/rip.pl
--- /usr/share/regripper/rip.pl.old 2022-02-27 15:11:57.426179430 +0000
+++ /usr/share/regripper/rip.pl 2022-02-27 15:16:45.562746556 +0000
@@ -63,6 +63,9 @@
 # Retrieves absolute path of parent directory 
 my $scriptdir = File::Basename::dirname($scriptpath);
 
+# Add: Define the variable plugindir
+my $plugindir = File::Spec->catfile($scriptdir, "plugins");
+
 my $VERSION = "3\.0";
 my @alerts = ();

具体的には、66行目に以下を追加します。

my $plugindir = File::Spec->catfile($scriptdir, "plugins");

f:id:jrick:20220228003749p:plain

動作確認

再度実行してみます。

$ rip.pl -p compname -r SYSTEM 
Launching compname v.20090727
compname v.20090727
(System) Gets ComputerName and Hostname values from System hive

ComputerName    = DESKTOP-********
TCP/IP Hostname = DESKTOP-********

正常に実行できるようになりました。

ネットワークスループットを調査するツール『iperf3』を使ってみる

LinuxWindowsビルドもあるようです)でネットワークスループットを調査するツールに「iperf3」というものがあります。

今回はこれを使ってみたメモです。

※実行環境はVMWare Workstation上に構築した、以下の仮想マシンで行います(同じものを2台用意)。

$ lsb_release  -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:            20.04
Codename:   focal

$ cat /proc/meminfo |grep MemTotal
MemTotal:        8105288 kB

$ cat /proc/cpuinfo | grep cpu.cores
cpu cores   : 1
cpu cores   : 1
cpu cores   : 1
cpu cores   : 1

$ ethtool ens160 | grep baseT
Cannot get wake-on-lan settings: Operation not permitted
    Supported link modes:   1000baseT/Full 
                                           10000baseT/Full

※なおホストマシンは、CPU 6Core/12Thread、Memory 64GB という構成です。

1. 導入

aptコマンドでインストールします。ついでに、ネットワーク使用帯域情報を見るコマンド「iftop」もインストールします。
※サーバ側、クライアント側の両方にインストールします。

sudo apt install iperf3
sudo apt install iftop

2. サーバ側の実行方法

サーバ側(待ち受ける方)は以下のように実行します。

iperf3 -s

3. クライアント側

クライアント側(データを送信する方)は以下のように実行します。

iperf3 -c 192.168.213.130 -P 10 -t 60 -b 1G

オプションの内容は以下の通りです。

オプション 意味
-c クライアントモードで実行。
192.168.213.130 サーバ側のIPアドレスを指定。
-P 10 同時並列処理数。
-t 60 処理を続ける時間(秒)。
-b 1G 1処理あたりにかける帯域。全体のトラフィックは、同時並列処理数との積になる。

4. iftopで帯域情報確認

iperf3を実行している横で、iftopコマンドを利用しどの程度の通信速度が出ているか確認します。
※実行には管理者権限が必要です。

sudo iftop

iperf3を前述のオプションで設定し実行した結果、処理中のあるタイミングでの帯域情報です。

f:id:jrick:20220223000826p:plain

iperf3でかけているネットワークの負荷は10Gbpsです。
またNICのリンクスピード(VMの設定値)が10Gbpsなので、8割~9割ほどの速度が出ていることになります。

参考

方法:IPERF3を使用してネットワークとディスクのスループットを測定する| 例とコマンド