Symfoware

Symfowareについての考察blog

Logstashのインストールと簡単な設定方法

webサーバーやバッチサーバー、色々なサーバーに個別にログファイルが出力されていて
チェックするだけでも大変なので、ログ収集ツールについて調べてみます。

Fluentd、Logstashあたりがが有名だと思いますが、今回はLogstashを試してみます。
Logstash

Debian 8へインストールしてみました。


インストール



ドキュメントを参考にLogstash 2.3をインストールします。
Installing Logstash


OpenJDK 7以上が必要なので、インストールします。


# apt-get install openjdk-7-jre



※OpenJDK 8を使用したい場合はこちら。
Debian 8(jessie)にOpenJDK 8をインストールする


1.7.0_111がインストールできました。

# java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)




次にLogstash本体のインストールですが、aptでインストールすることにしました。

PGPキーを追加してリポジトリを追加。

# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
OK

# echo "deb https://packages.elastic.co/logstash/2.3/debian stable main" | tee -a /etc/apt/sources.list
deb https://packages.elastic.co/logstash/2.3/debian stable main




ここでapt-get updateを実行するとこんなエラーが発生しました。

# apt-get update
E: メソッドドライバ /usr/lib/apt/methods/https が見つかりません。
N: パッケージ apt-transport-https はインストールされていますか?




パッケージのURLにhttpsを使用する場合は、apt-transport-httpsが必要になるようです。
インストールしておきます。

# apt-get install apt-transport-https




改めて、apt-get updateとLogstashのインストールを行います。

# apt-get update
# apt-get install logstash




これでLogstashのインストールは完了です。

ドキュメントにある手順で動作確認してみます。
/opt/logstashにインストールされるので、以下のコマンドでサーバーを起動

# /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'




こんな感じで起動しました。

# /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default pipeline workers: 2
Pipeline main started



703_01.png


hello worldと入力すると、hello worldとログに出力されます。

# /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default pipeline workers: 2
Pipeline main started
hello world
2016-08-07T04:34:41.506Z php5 hello world



703_02.png

Ctrl + Cでサーバーを終了しました。






設定ファイルの記載方法



aptでインストールした場合、起動用のスクリプトが配置されます。


/etc/init.d/logstash



内容を確認すると、設定ファイルは
/etc/logstash/conf.d/
に配置するのが作法でした。

先ほど手動で試したのと同じ内容の設定ファイルを記載してみます。

・/etc/logstash/conf.d/test.conf


  1. input {
  2. }
  3. output {
  4. }




設定ファイルのチェックはconfigtestで行えます。

# /etc/init.d/logstash configtest
Configuration OK




最初の設定ファイルのサンプルとして、


指定のログファイルを監視
行が追加されたら別のファイルに内容を出力する



ということをやってみます。

「指定のログファイルを監視」はinputのセクションに記載。
「行が追加されたら別のファイルに内容を出力する」はoutputのセクションに記載します。

・/etc/logstash/conf.d/test.conf


  1. input {
  2.     file {
  3.         path => "/var/dev/logstash/log-input"
  4.         start_position => beginning
  5.     }
  6. }
  7. output {
  8.     file {
  9.         path => "/var/dev/logstash/log-output"
  10.     }
  11. }




監視対象のファイルを作成します。
出力先のフォルダにlogstashユーザーに対して書き込み権限がないとエラーになります。


# mkdir -p /var/dev/logstash
# chmod -R 777 /var/dev/logstash
# touch /var/dev/logstash/log-input



サービスを起動

# /etc/init.d/logstash start




適当に監視対象のファイルに行を追加します。

# echo 'test' >> /var/dev/logstash/log-input




すぐにはログファイルに出力されず、バッファリングされるようです。
結果を確認したい場合は、一旦サービスを停止すれば良さそうです。

# /etc/init.d/logstash stop




/var/dev/logstash/log-outputにこんな感じでログが出力されました。
※実際は1行


  1. {
  2.     "message":"test",
  3.     "@version":"1",
  4.     "@timestamp":"2016-08-07T05:45:15.107Z",
  5.     "path":"/var/dev/logstash/log-input",
  6.     "host":"php5"
  7. }








プラグインの追加



データの保存先はElasticsearchを指定するのが王道のようですが、
MariaDBに作成したテーブルに結果を追加する方法を調べてみます。

デフォルトoutputプラグインにはJDBCドライバを使用するものは含まれていないようです。
Output plugins


このプラグインを追加でインストールし、使ってみます。
logstash-output-jdbc

プラグインの追加については、こちらを参考にしました。
Working with plugins


先にログを保存するテーブルをMariaDBに作成しておきます。


  1. CREATE table log (
  2.     id int not null auto_increment primary key,
  3.     host varchar(32) not null,
  4.     timestamp datetime not null,
  5.     message varchar(512) not null
  6. );




続いてLogstashの設定です。プラグインの追加コマンドを実行

# /opt/logstash/bin//logstash-plugin install logstash-output-jdbc
Validating logstash-output-jdbc
Installing logstash-output-jdbc
Installation successful




無事追加できました。

MariaDBのJDBCドライバをこちらからダウンロード。
※会員登録が必要です。
https://downloads.mariadb.org/connector-java/

mariadb-java-client-1.4.6.jarをダウンロードしました。
/opt/logstash/vendor/jar/jdbcというフォルダを作成し、そこに保存しておきます。


# mkdir -p /opt/logstash/vendor/jar/jdbc
# mv mariadb-java-client-1.4.6.jar /opt/logstash/vendor/jar/jdbc




こちらを参考に設定ファイルを編集します。
Example: MariaDB


  1. input {
  2.     file {
  3.         path => "/var/dev/logstash/log-input"
  4.         start_position => beginning
  5.     }
  6. }
  7. output {
  8.     jdbc {
  9.         connection_string => "jdbc:mariadb://localhost/sample?user=root&password=P@ssw0rd"
  10.         statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
  11.     }
  12.     
  13. }




設定ファイルを変更したら、logstashを再起動

# /etc/init.d/logstash restart




監視対象のファイルに1行追加します。

# echo 'test' >> /var/dev/logstash/log-input




ちゃんとログテーブルにレコードが作成されました。

MariaDB [sample]> select * from log;
+----+------+---------------------+---------+
| id | host | timestamp         | message |
+----+------+---------------------+---------+
| 1 | php5 | 2016-08-07 07:05:28 | test    |
+----+------+---------------------+---------+
1 row in set (0.00 sec)








データベース停止時の挙動



データベースに接続できなかった時どうなるのか気になったので、試してみます。
一旦データベースを停止。


# /etc/init.d/mysql stop




監視対象のファイルに行を追加します。


# echo 'test' >> /var/dev/logstash/log-input
# echo 'test' >> /var/dev/logstash/log-input




データベース起動


# /etc/init.d/mysql start




テーブルの内容を確認したところ、ちゃんとログが追記されていました。


MariaDB [sample]> select * from log;
+----+------+---------------------+---------+
| id | host | timestamp         | message |
+----+------+---------------------+---------+
| 1 | php5 | 2016-08-07 07:05:28 | test    |
| 2 | php5 | 2016-08-07 07:07:15 | test    |
| 3 | php5 | 2016-08-07 07:07:15 | test    |
+----+------+---------------------+---------+
3 rows in set (0.00 sec)





関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2016/08/07(日) 16:18:21|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Logstash CodeIgniterで出力したログを収集する | ホーム | Debian 8(jessie)にOpenJDK 8をインストールする>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1910-7081c5a7
この記事にトラックバックする(FC2ブログユーザー)