2015年4月23日木曜日

splunk java SDKのhttps接続でエラー

splunk java SDKを使おうとしたところ、https接続に関するエラーが発生してしまいました。

<環境>
Java:8.45
Splunk SDK:1.4.0
Splunk:6.2.2

原因は、splunk java SDKではhttps接続にSSLv3を使用しているようなのですが、最新のjava8(jre)ではセキュリティの理由によりSSLv3が使用不可となっているためのようです。
出力されるエラー内容は以下。

Exception in thread "main" java.lang.RuntimeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
 at com.splunk.HttpService.send(HttpService.java:371)
 at com.splunk.Service.send(Service.java:1280)
 at com.splunk.HttpService.post(HttpService.java:272)
 at com.splunk.Service.login(Service.java:1111)
 at com.splunk.Service.login(Service.java:1091)
 at com.splunk.Service.connect(Service.java:185)
 at splunk.sample.OneShotSearch.main(OneShotSearch.java:18)
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
 at sun.security.ssl.Handshaker.activate(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.kickstartHandshake(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
 at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
 at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
 at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(Unknown Source)
 at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
 at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
 at com.splunk.HttpService.send(HttpService.java:365)
 ... 6 more


対処方法があるみたいなのでまとめておきます。

  1. javaのhttps設定を変更する
  2. プロパティを指定する

1. javaのhttps設定を変更する

javaのセキュリティ設定が最新のJava8では以下に変更されているのが原因。

jar8/lib/security/java.security
  :
# Example:
#   jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
     ↓
  :
# Example:
#   jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=SSLv3

そのため、設定行をコメントアウトすることでSSLv3が使用可能となる。
※もちろん、セキュリティは低下する。

jar8/lib/security/java.security
  :
# Example:
#   jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
#jdk.tls.disabledAlgorithms=SSLv3


2. プロパティを指定する

サービスの接続時に指定するServiceArgsにSSL以外のものを指定することでアクセスできます。

        ServiceArgs loginArgs = new ServiceArgs();
         :
        loginArgs.setSSLSecurityProtocol(SSLSecurityProtocol.TLSv1);
         :

        Service service = Service.connect(loginArgs);

とりあえず「SSLSecurityProtocol.TLSv1」を指定しておけば大丈夫です。
※コミュニティを見ると、SDKのソースコードを修正して自分でビスドされている方もいるようですが、今はプロパティ指定で問題ないみたいです。 今後は、デフォルトを「SSL」以外にするか、ドキュメントで説明するよう対応してもらいたいです。。。









Splunkの無償ライセンスでREST APIを使う方法

Splunkの無償ライセンスでは外部からのリモートアクセスでの認証機能が抑止されているため、REST APIが使えません。
REST APIを使用しているSDKでも同じです。

Java SDKで実行したらこんなかんじでエラーが出ます。

[Fatal Error] :1:1: 途中でファイルの末尾に達しました。
Exception in thread "main" com.splunk.HttpException: HTTP 401 -- 

  
    Remote login disabled because you are using a free license which does not provide authentication. To resolve either switch to the forwarder-only license or the enterprise trial license included with the product. To override this and enable unauthenticated remote management, edit the 'allowRemoteLogin' setting in your server.conf file.
  


 at com.splunk.HttpException.create(HttpException.java:84)
 at com.splunk.HttpService.send(HttpService.java:411)
 at com.splunk.Service.send(Service.java:1280)
 at com.splunk.HttpService.post(HttpService.java:272)
 at com.splunk.Service.login(Service.java:1111)
 at com.splunk.Service.login(Service.java:1091)
 at com.splunk.Service.connect(Service.java:185)
 at splunk.sample.OneShotSearch.main(OneShotSearch.java:18)


リモートアクセスでの認証機能を無効にすることで、アクセス可能になります。
※セキュリティは低下します。

# vi /usr/local/splunk/etc/system/default/server.conf
 :
allowRemoteLogin=requireSetPassword
 ↓
allowRemoteLogin=
 :


あとは、再起動で反映されます。

2015年4月18日土曜日

Splunkを無償ライセンスで使う




Splunkはライセンス購入していない場合でも、インストールしてしばらくはフル機能が、使用できます。

「しばらくは、無償ライセンスで使う予定」 、「無償ライセンスの機能把握のために使ってみたい」という方は、インストール直後でも無償ライセンスに切り替えられますので、切り替えてしまうのもいいかと思います。
ライセンス切り替はインストールしたSplunkのWEB画面から変更が可能です。


まずは、ツールバーの Settings > Licensing を選択します。



次の画面で Change license Group に進みます。




から「」に変更し、保存します。







次の画面で再起動を行ったら、設定が反映されます。

起動後に再度ログインすると。。。

 検索画面のSave as からalertが消えています。






ユーザーコントロールからユーザ情報を変えようとしたら、警告が出ます。




これで完了です。

Splunk でApache httpdのアクセスログを監視してみる




Splunk では大きく分けて3のデータ入力方法があります。
① .既存ログファイルのアップロード
② 常時出力されるログの取得
③ フォワーダーから送られてくるログの取得

Splunk のインストールが終わったらとりあえず②の方法で手頃なログを登録してみます。
手頃なログということで、Apache httpdのアクセスログを監視対象として登録してみました。


まずは 、Add Dataからmonitorを選択します。




Select Sourceでは、監視対象のファイルパスを指定します。
UI上で選択することも出来ます。






Set Sourcetype では、インデックス化する情報(検索時に使用できる"日付"や"IP")の形式を指定できます。
とりあえず、変更せずにデフォルトのまま進めます。


Sourcetype名を聞かれるので"access_log"と入れておきます。




Input Settingsでは、複数サーバある場合に便利なサーバ名等の情報をしていできますが、
ここもとりあえず、変更せずにデフォルトで。








Reviewで入力確認をしたらサブミットして登録完了です。



完了するとStart Searchingから、そのまま検索画面に飛べます。




 検索画面に飛ぶと、先ほど入力したログの情報が検索画面に入力された状態で表示されます。
「source="/var/log/httpd/access_log" host="server030" sourcetype="access_log"」


 これで、access_logが監視されます。

Splunk Java SDK をビルドしてみる



Splunk Java SDK はオープンソースなので、ソースコードがだれでも入手可能です。
ビルドも簡単です。

アーカイブされているSDKをダウンロードするとソースコードもついてきますが、
GitHubからも入手可能です。


<splunk/splunk-sdk-javaのリポジトリ>
https://github.com/splunk/splunk-sdk-java

今回はGitHubから落としてビルドしてみます。

1. ソースをクローンする 

GitリポジトリのクローンでSplunk Java SDK のソースURLを指定し、クローンします。




 URI入力欄に「https://github.com/splunk/splunk-sdk-java」を指定して次へ。




「master」だけで十分なので、他のチェックを外します。






2.インポート

 クローンが終わったら、作業ディレクトリを選んで、プロジェクトとしてインポートします。






3.ビルド

 ビルドはbuild.xmlをant実行するだけです。

 





ビルドが成功すると、 ライブラリ「splunk-1.4.0.jar」ともろもろのファイルが生成されます。




 簡単ですね。

2015年4月14日火曜日

splunkインストール

splunk(Splunk Enterprise)は、ログ分析プラットフォームです。無償版で使えます。

インストールは簡単です。


<環境>
・CentOS 7
・splunk 6.2.2

ダウンロードの前に

ダウンロードの前にユーザ登録が必要です。

住所は入れなくても大丈夫です。
会社名は必須なので、個人使用の場合は適当に自分の名前等でも問題無いです。。。


ダウンロード


自分のOSにあうモジュールを選びます。

そのままダウンロードしてもいいですが、wgetコマンドが表示されるので、linux上でコマンド実行のほうが簡単です。

# wget -O splunk-6.2.2-255606-Linux-x86_64.tgz 'http://ja.splunk.com/page/download_track?file=6.2.2/splunk/linux/splunk-6.2.2-255606-Linux-x86_64.tgz&ac=&wget=true&name=wget&platform=Linux&architecture=x86_64&version=6.2.2&product=splunk&typed=release'



インストールと起動

落としたtarを解凍して、バッチを叩くだけです。

# ls
splunk-6.2.2-255606-Linux-x86_64.tgz
#
# tar xzvf splunk-6.2.2-255606-Linux-x86_64.tgz
# mv splunk /usr/local/.
# cd /usr/local/splunk/bin/
# ./splunk start --accept-license

※とりあえず「/usr/local」 にインストールしています。
※「--accept-license」をつけるとライセンス条項への同意を行った事となるので、同意入力が省けます。



起動確認とログイン


# ./splunk start --accept-license
     :
Done
                                                           [  OK  ]

Waiting for web server at http://127.0.0.1:8000 to be available. Done


If you get stuck, we're here to help.
Look for answers here: http://docs.splunk.com

The Splunk web interface is at http://server030:8000

起動が成功するとアクセス先URL(http://127.0.0.1:8000)が出力されます。
 127.0.0.1の部分をサーバIPに置き換えて、ブラウザからのアクセスが可能です。
※適宜 、8000の開放は必要です。


表示されているアカウントとパスワードでログインできます。

使い方はまた、今度。。。

splunkってなに?



splunk(Splunk Enterprise)は、ログ分析を行うための蓄積機能と解析用のUI(WEB画面)がセットになっているプラットフォームです。有償版と無償版が有ります。

何ができるの?

ログ、ネットワークトラフィック...などを収集しておいて、画面から分析を行うことができます。

無償版って使い続けられるの?

機能制限はあるが、期間制限の制限なく使えます。

・単体サーバ上のログを解析してユーザの傾向を確認することができる
・定期的にログの解析を行って(手動で)、不正アクセスがないか確認することができる
・「監視およびアラート」機能が使えないので、ログ監視は厳しい。。。
・1日のデータ取り込み量が500Mまで。。。(中・小規模サイトのログ解析では十分かな)

特徴は?

・インストールが簡単
APサーバ・DBサーバ等を用意する必要が無いためインストールはすごく簡単。tarを解凍して、シェルを叩くだけで、起動します。

・無償版で試して、そのまま有償版に移行できる
 無償版をまず導入して、再構築なしにそのまま有償版に移行できます。WEB画面からライセンス情報を入れるだけです。

 ・ データ取り込み制限をオーバーしても、データが失われない
  データ取り込み制限をオーバーしても、検索機能に制限がかかるだけなので、制限オーバーしているあいだも、データは取り込まれるため、その間のデータが失わ得れることはないです。



無償ライセンス登録と、インストールは次回。。。