SSB 検索画面 |
螺子です。今回の記事はSSBのRPC APIについて紹介します。
RPC APIを使用すると、既存のWebシステムなどと連携、あるいは統合ができるのでユーザーは使い慣れたユーザーインターフェースを利用できます。また、SSBのIPアドレスやパスワードをバックエンドで使用させることでセキュリティを強化することもできます。
あるいは、コマンドを実行することでログ検索を自動化(検索した結果をcsv形式で保存)することもできます。
ここでは、「RPC APIクイックスタート ガイド」の内容から、”ログイン”、”ログスペースリスト出力”、”ログ件数とリスト出力”、”検索期間の指定”、”ログアウト”をwgetコマンドを使用して実行し、取得してみます。
wgetコマンド、およびjqコマンドを使用しますので、必要に応じてインストールしてださい。
- syslog-ng Store Box大活用連載企画第1回「syslog-ng Store Boxを知る」
- syslog-ng Store Box大活用連載企画第2回「syslog-ng Store Boxを仮想環境にインストールする」
- syslog-ng Store Box大活用連載企画第3回「syslog-ng Store Boxで出来ることまとめ」
- syslog-ng Store Box大活用連載企画第4回「Wiresharkでsyslogプロトコルパケットを覗く」
- syslog-ng Store Box大活用連載企画第5回「ciscoスイッチ、fortigateファイアウォールログをSSBで受信!よりログを検索しやすく」
wgetとjqのインストール
まず、下記のコマンドを実行して、wgetおよびjqをインストールします。
$ sudo apt -y install wget
$ sudo apt -y install jq
図2 wgetインストール例 |
ログイン
これで、準備ができました。それでは、早速始めてみましょう。
まず、変数にSSBのIPアドレスを設定します。ここでは、SSBのIPアドレスは”192.168.91.127″です。
$ SSB_IP=192.168.91.127
wgetコマンドで、SSBのRCP APIにアクセス(ログイン)してみます。
最初のコマンドでは、ログインのレスポンスがJSON形式で返されているのが分かります。jqコマンドを使用してJSONレスポンスを見やすくするように整形しています。
次のコマンドでは、ログイン時の識別キー(セッションID)を変数に保存します。ログインごとに異なる識別キーが発行され、認証されたセッションを一意に管理します。
最後のコマンドは、echoコマンドでセッションIDを確認しています。セッションIDが異なっていることが分かります。
$ wget -q --no-check-certificate -O - "https://$SSB_IP/api/4/login" --post-data='username=admin&password=a' | jq '.'
{
"result": "44555634fcadd1f2dab94a79446b0fbb",
"error": {
"code": null,
"message": null
},
"warnings": []
}
$ SESSID=`wget -q --no-check-certificate -O - "https://$SSB_IP/api/4/login" --post-data='username=admin&password=a' | jq '.result' -r`
$ echo $SESSID
48cf1e5a8788808b226097e7687c3527
図5 SSBログイン実行画面例 |
ログスペースリスト出力
次に、ログスペースのリストを取得します。リクエストにセッションIDを含めていることに注意してください。
$ wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/list_logspaces" | jq '.result'
[
"Space69",
"center",
"cisco2970_default",
"cisco2970_noparse",
"filtered",
"fortigate",
"fortigate_default",
"fortigate_noDelimiter",
"fortigate_noparse",
"fortigate_parse",
"local",
"multi",
"ssb-internal",
"ssb-local",
"ssblocal",
"winevent"
]
図7 ログスペースリスト表示画面例 |
ログ件数とリスト出力
次は、ログの件数とリストを出力します。検索式に”starting up program:syslog-ng”を指定してsyslog-ngの起動ログメッセージを検索しています。
$ wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/number_of_messages/local?from=0&to=9999999999&search_expression=starting up program:syslog-ng" | jq '.result'
43
図9 ログ件数表示画面例 |
ログをリストを出力します。”offset”と”limit”を使用して出力件数を制限しています。
$ wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/filter/local?from=0&to=9999999999&search_expression=starting up program:syslog-ng&offset=0&limit=10" | jq '.result'
[
{
"id": "810594056856928268",
"timestamp": 1561093646,
"processed_timestamp": 1561093646,
"priority": 5,
"facility": 5,
"host": "ssb1",
"message": "syslog-ng starting up; version='6.0.16', cfg-fingerprint='a4c2562c072569960ae14f87514fe0784550a841', cfg-nonce-ndx='0', cfg-signature='209cc73839fcf78dfc4c44c7a3fe816687b424a5'",
"program": "syslog-ng",
"pid": "957",
"dynamic_columns": {},
"tags": [],
"delimiters": " nrt:&~?![]=,;()'""
},
{
"id": "810598454903449747",
"timestamp": 1561453524,
"processed_timestamp": 1561453524,
"priority": 5,
"facility": 5,
"host": "ssb1",
"message": "syslog-ng starting up; version='6.0.16', cfg-fingerprint='2217df7826aeacc4d32e8309a5a4151dc442eb2f', cfg-nonce-ndx='0', cfg-signature='687784af547f3befbd26f296704cdd339b7f4658'",
"program": "syslog-ng",
"pid": "923",
"dynamic_columns": {},
"tags": [],
"delimiters": " nrt:&~?![]=,;()'""
},
:
:
図11 ログリスト表示画面例 |
SSBの検索ページで、検索式に”starting up program:syslog-ng”と入力して実行すると、ログ件数がRPC APIで取得した件数と同じであることがわかります。
図12 SSBログ検索実行時画面(検索式指定)例 |
検索期間の指定
次に検索期間を指定してログ件数を取得してみます。期間の指定にはUNIXタイムスタンプを使用するため、検索期間をdateコマンドでUNIXタイムスタンプに変換しています。
$ date +%s -d"Oct 11, 2019 10:00:00"
1570755600
$ date +%s -d"Oct 11, 2019 10:05:00"
1570755900
$ wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/number_of_messages/local?from=1570755600&to=1570755900" | jq '.result'
179
図14 検索期間を指定したログ件数表示画面例 |
SSBの検索ページで、検索期間を指定して実行すると、ログ件数がRPC APIで取得した件数と同じであることがわかります。
図15 SSBログ検索実行時画面(検索期間指定)例 |
ログアウト
最後に、ログアウトしてセッションを終了します。
$ wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/logout" | jq '.'
{
"result": true,
"error": {
"code": null,
"message": null
},
"warnings": []
}
図17 ログアウト画面例 |
SSB RPC APIドキュメント
SSBのRPC APIのドキュメントは”https://<ip-address-of-ssb>/api/4/documentation”のURLで、web I/Fから閲覧できます。
図18 RPC APIドキュメント表示例 |
csv形式保存
最後に、検索したログをcsv形式に保存してみます。JSON形式で出力されているので、わざわざcsv形式に変換する必要がないのでは?とのツッコミはあると思いますが、まだcsvの需要があるようなので(笑)..
// 再度ログインします。
$ SESSID=`wget -q --no-check-certificate -O - "https://$SSB_IP/api/4/login" --post-data='username=admin&password=a' | jq '.result' -r`
// UNIXタイムスタンプで期間を指定(過去7日間)します。
$ START=`date -d '7 day ago' +%s`
$ END=`date +%s`
// 検索結果数を変数に格納します。
$ NUMBER=`wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/number_of_messages/center?from=$START&to=$END&search_expression=program:microsoft_windows_security_auditing." | jq '.result'`
// 念のため検索結果数を確認します。
$ echo $NUMBER
883
// 検索結果数までループ処理します。offsetオプションで出力する検索位置を指定しています。
$ for ((i=0; i<$NUMBER; i+=100));
> do
> wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/filter/center?from=$START&to=$END&&offset=$i&search_expression=program:microsoft_windows_security_auditing." | jq '.result';
> done
:
: (JSON形式で検索ログがターミナルに出力されます)
:
// もう一度、検索を実行します。今度はjqコマンドでメンバーとcsv形式に変換して出力をファイルにリダイレクトしています。
$ for ((i=0; i<$NUMBER; i+=100));
> do
> wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/search/logspace/filter/center?from=$START&to=$END&offset=$i&search_expression=program:microsoft_windows_security_auditing." | jq -r '.result[] | [.host, .message] | @csv' >> test.csv;
> done
// 最後にログアウトして終了です。
$ wget -q --no-check-certificate -O - --header "Cookie: AUTHENTICATION_TOKEN=$SESSID" "https://$SSB_IP/api/4/logout" | jq '.'
保存したcsvファイルをエクセルを開きます。
図20 csv形式の出力例 |
いかがでしたでしょうか?
RPC APIを使用して、SSBに保存されているログを取得するイメージがつかめたのではないでしょうか。
それでは、次回の連載記事をお楽しみに!
SSBは、高信頼ログ管理アプライアンスです。様々なデバイスおよびアプリケーションからログメッセージを収集、分類、フィルタリング、正規化して安全に保存可能です。ログデータの信頼性を担保し、膨大なログが発生する高負荷環境、あるいはログロストが許されない企業・組織のログ管理に最適です。