2021年2月14日日曜日

ピタゴラスイッチ的SPL

 リストを監視して空になったらマスターに戻すというSPLと

| makeresults count=100 | streamstats count

| eval something="Loop-" . tostring(count)

| inputlookup append=true list.csv

| stats count by something

| inputlookup append=true counter.csv

| reverse

| filldown counter

| eval counter=if(counter=0,"1","0")

| eval count=count+counter

| where isnotnull(count) AND count=2

| outputlookup list.csv


そのリストに基づいて一行ずつ何かを実行するSPL

|makeresults | eval exec=[| inputlookup list.csv | sort count | head 1 | fields something | stats values(something) as search | eval search="\"". search ."\""]

|inputlookup append=true list.csv

|filldown exec

|where NOT exec==something AND isnotnull(something)

|fields count something

|outputlookup list.csv

|stats count as counter

|outputlookup counter.csv


を組み合わせたら面白いことができるのではないかと思ったのですが、それが何に使えるのかアイデアが出てきませんでした。

2020年7月22日水曜日

英語版WindowsなのにSplunkに取り込んだイベントログが日本語に

ことのはじまり

タイトルの通りで、Windows 2016で英語版使っているはずなのにSplunkにとりこんだイベントが日本語でとりこまれます、と問い合わせを受けて調査をしていました。
結論からいうとUIロケールとシステムロケールで言語設定が違っていたというものなので、そのあたり詳しい方は読んで頂く必要はありません。

どういうことだったのか?

「イベントビューワーでみると英語なのに、Splunkで見ると日本語です」ということでした。そんなことあるわけないでしょ、と思いながらも実機を確認したら本当でした。(※画像は再現環境)


何が原因だったのか?

WindowsはUIロケールとシステムロケールが別れています。特に深いことを考えずにインストーラーからSplunkをインストールすると、Splunkは、Local Systemで実行されます。そのため、Splunkが取得するイベントはシステムロケールに依存します。

対して、イベントビューワーはログオンしているアカウントのロケールに依存するため、たとえAdministratorで開いたイベントビューワーが英語で表示されているとしても、Splunkが読み込む言語とは関係ありません。
確認したポイントはリージョン設定の管理タブのところです。
今回、事象が発生したWindows 2016ではCurrent userのところとWelcome screen のところとで内容が異なっていました。
Welcome screenがシステムロケールとなんの関係があるか疑問に思うかもしれませんが、下部のチェックボックスを見ると、"Welcome screen and system account"となっていて、ここをチェックするとCurrent Userの設定が、Welcome screenにコピーされます。見た目はWelcome screenですが、ここにはsystem account (Local System含む)が含まれるようです。非常に分かりづらいです。
ちなみに、この設定をして"OK"をクリックすると、もう再起動するかキャンセルするかの選択しかないので、事前に設定しておいて、いつの日か再起動するタイミングで反映できればいいや的な対応はできませんでした。

結果

Windows 2016の再起動後に、無事に英語で取り込まれるようになりました。


そもそもなぜ、このような設定になっていたかは不明ですが、おそらく英語版Windowsに日本語パックをインストールしてがちゃがちゃやってしまったのだろうなと推測しています。今回、MSから転職してきた同寮のおかげでサクッと解決しましたが、自分ひとりだったらとりあえず日本語パックをアンインストールしていただろうな、と思いました。Windowsは難しいですね。手伝ってくれた同寮には感謝の気持ちでいっぱいです。

最後に大事なところですが、日本語で取り込まれることで何が問題かというところですが、日本語で取り込んでしまうとフィールド名も日本語になってしまいます。Splunkでフィールド名を日本語にしてしまうと動くことは動くのですが、サポート外となります。あまり意識されない部分なので注意が必要です。



2020年5月13日水曜日

日本企業固有の「月度」で集計したい

ことのはじまり

日本企業では月末締めじゃなくて、途中に締める習慣がある企業があります。思い起こせば、前職でも「20日締め」という仕組みで給料が支払われていました。Splunkでこの月度の考えを入れるときはいつも頭を悩まします。



そんなに悩むことはないかもしれない

timechart コマンドで集計するときに月の始まりと月の終わりを指定できたらいいのですが、そんなOptionはありません。ただし、そもそもそんなに複雑に考えなくとも 月度に収まるように_timeをいじってしまえばいいのだと思います。

以下のようなSPL差し込んで、締め日の前のデータは先月に放り込んでしまえばいいでしょう。20日締めだとしたら、20日以内のデータは20日前にずらしてしまうという考えです。あくまで、span=1mon で時系列を崩しても問題ない集計する前提です。

 | eval date_day=strftime(_time,"%d")
 | eval _time=if(date_day<=20,_time-(86400*20),_time)
 | timechart span=1mon count

date_mday 使っても良いと思いますが、date_mday は抽出されないときがあるので汎用的なevalを入れました。 

2020年2月1日土曜日

CSVにおける括弧の中のカンマ

ことの始まり

CSVの中のStringに,(カンマ)が含まれているが""でくくられていなくて、{}で囲まれている場合で、その{}内のカンマだけを置換したいとときに正規表現でかくとしたらどうなりますか?と聞かれまして、やりかたを探しました。

Stringの例

aaa,bbb,{ccc,ccc,ccc,,,},ddd

正規表現

(?:{|\G(?!^))[^,}]*\K,

感想

アンカー問題だということはわかったのですが、結局自分で考えるより、stackoverflowを探した方が早かったです。
検索ワードはこちら
regex all commas between brackets

2019年12月25日水曜日

ダッシュボードのタイムレンジピッカーをさっぱりさせたい

ことの始まり

タイムレンジピッカーはとても便利なのですが、選択肢が多いためにダッシュボードの利用しかしない一般ユーザーにとってはとっつきにくいものと感じられる場合もあると思います。
そこでダッシュボードに表示させるタイムレンジピッカーの選択肢を減らすべく
https://answers.splunk.com/answers/222650/limit-choices-in-default-timepicker.html
をベースに非表示にさせるエレメントを探してみました。


やりかた

以下のXMLから表示させたいエレメントを削除してダッシュボードに埋め込めばよさそうです。途中に ^= で設定しているところがありますが(answersからコピペしているため)、これは前方一致なので、将来的に事故るかもしれません。あしからず。



  <row>
    <panel depends="$never$">
      <title>Hidden Embedded CSS</title>
      <html>
        <style>
           button[data-test^='Today'],
           button[data-test^='Yesterday'],
           button[data-test^='Business week to date'],
           button[data-test^='Week to date'],
           button[data-test^='Year to date'],
           button[data-test^='Month to date'],
           button[data-test^='Previous week'],
           button[data-test^='Previous business week'],
           button[data-test^='Previous month'],
           button[data-test^='Previous year'],
           button[data-test^='Last 15 minutes'],
           button[data-test^='Last 60 minutes'],
           button[data-test^='Last 4 hours'],
           button[data-test^='Last 24 hours'],
           button[data-test^='Last 7 days'],
           button[data-test^='Last 30 days'],
           div[data-test^='real-time-column'],
           div[data-test^='past'],
           div[data-test^='other-column'],
           div[data-test-panel-id^='presets'],
           div[data-test-panel-id^='advanced'],
           div[data-test-panel-id^='relative'],
           div[data-test-panel-id^='real'],
           div[data-test-panel-id='date']
           {
           display: none !important;
           }
        </style>
      </html>
    </panel>
  </row>

2019年11月22日金曜日

標準正規分布をSPLで


| makeresults count=801
| streamstats count
| eval x= (count - 401) /100
| eval y=1/(sqrt(2*pi())) * exp(-pow(x,2)/2)
| fields - _time count

参考
https://bellcurve.jp/statistics/blog/15344.html

2019年7月26日金曜日

SplunkとNetFlow その2

ことのはじまり

Splunk Add-on for NetFlowを使ってSplunkで直接NetFlowを取り込む方法を書きましたが、2019/03のSplunk社のBlogにてEnd of Supportが発表されていました。
https://www.splunk.com/blog/2019/03/18/end-of-availability-splunk-built-apps-and-add-ons.html

代替手段はStreamらしいので、今回はStreamを使って取り込んてみます。

設定

何も考えず(Docmentも読まずに)にStream をインストールして、Appを開くととりあえず怒られしまいます。環境はec2のAmazon Linuxで非rootユーザーでsplunkを動作させています。
shellを叩く必要があるとのことで、とりあえず叩きます。(Defaultでsplunkユーザーはsudoersに入ってないので事前に visudo で追加しておきます。)

shell実行後、Stream App上で「Redetect」をクリックすると正常であれば以下のような画面になります。

設定に移り、NetFlowを有効にします。



NetFlowコレクタとして動作させるための追加設定については如何に記載があります。
https://docs.splunk.com/Documentation/StreamApp/latest/DeployStreamApp/ConfigureFlowcollector

Documentに従って、/opt/splunk/etc/apps/Splunk_TA_stream/local/streamfwd.conf を以下のように設定して、splunkを再起動します。

[streamfwd]
netflowReceiver.0.ip = 172.31.27.223
netflowReceiver.0.port = 2055
netflowReceiver.0.decoder = netflow

Ciscoルーターの設定は前回と同じなので、port番号は2055を使ってます。

できあがり

途中、何度か再起動してたりするので何か気づいていないハマりどころがある気がしますが、StreamをFlowコレクタとして使うことで、NetFlowの可視化ができました。
フィールドもSplunk Add-on for NetFlowとくらべるとこちらの方がみやすい気がします。