Logstash
インストール
code:shell
brew install logstash
Logstash pipeline
https://www.elastic.co/guide/en/logstash/current/static/images/basic_logstash_pipeline.png
input Data Source からデータを取得する
filter データを変換する
output データを格納対象に格納する
pipeline の各種ステージごとに、豊富な plugin が用意されており、様々な input, output に対応できる。
input plugin
S3, MySQL, NoSQL, GitHub, ...
output plugin
Elasticsearch, S3, mail, Hadoop, Slack, ...
実行モデル
ディレクトリ構成
home
settings logstash.yml や jvm.options 等の設定ファイルが配置される
plugins ruby gem ではないローカルのプラグインが配置される。開発用でのみ使用が推奨
data logstash やそのプラグインに利用される、永続化の必要があるデータ群が配置される logs ログファイルが配置される
table:ディレクトリ構成
Type Docker Debian, RPM .zip, .tar.gz
home /usr/share/logstash /usr/share/logstash 解凍先
bin /usr/share/logstash/bin /usr/share/logstash/bin {home}/bin
settings /usr/share/logstash/config /etc/logstash {home}/config
conf /usr/share/logstash/pipeline /etc/logstash/conf.d/*.conf -
plugins /usr/share/logstash/plugins /usr/share/logstash/plugins {home}/plugins
data /usr/share/logstash/data /var/lib/logstash {home}/data
logs - /var/log/logstash {home}/logs
設定
設定ファイルの種類
logstash.yml
pipelines.yml
jvm.options
log4j2.properties
logstash.yml
pipeline config
plugin のタイプ毎 に設定を記述するセクションが別れている。各 input, filter, output セクションには、イベントを処理する Plugin とその設定を記述していく。
code:conf
# parts of your configuration.
input {
...
}
filter {
...
}
output {
...
}
例えば、データソースがファイルシステムの場合には、以下のように input セクションに設定を追加する。
code:conf
input {
file {
path => "/var/log/messages"
type => "syslog"
}
file {
path => "/var/log/apache/access.log"
type => "apache"
}
}
Plugin
input, filter, codec, output 用のプラグインが利用できる
gem として公開されている
code:bash
# インストール済みプラグインの表示
bin/logstash-plugin list
# インストール済みプラグインをバージョン込みで表示
bin/logstash-plugin list --verbose
# namefragment を含む全てのプラグインの表示
bin/logstash-plugin list '*namefragment*'
# 特定グループ (input, filter, codec, output) のプラグインの表示
bin/logstash-plugin list --group output
# インストール
bin/logstash-plugin install logstash-output-kafka
# ローカルのプラグインのインストール
bin/logstash-plugin install /path/to/logstash-output-kafka-1.0.0.gem
# ソースコードからインストール
bin/logstash --path.plugins /opt/shared/lib
# 全てのプラグインを更新
bin/logstash-plugin update
# 特定プラグインのみ更新
bin/logstash-plugin update logstash-output-kafka
# プラグインの削除
bin/logstash-plugin remove logstash-output-kafka
Docker
起動する
code:bash
$ docker pull docker.elastic.co/logstash/logstash:7.0.0
設定する
/usr/share/logstrash/pipeline に設定ファイルを配置する。~/pipeline/logstash.yml に配置した設定ファイルを読み込むことができるが、環境変数から設定をすることもできる。
code:bash
# ディレクトリごとマウント
$ docker run --rm -it \
-v ~/pipeline/:/usr/share/logstash/pipeline/ \
docker.elastic.co/logstash/logstash:7.0.0
# 単一ファイルのみマウント
$ docker run --rm -it \
-v ~/settings/logstash.yml:/usr/share/logstash/config/logstash.yml \
docker.elastic.co/logstash/logstash:7.0.0
イメージとして固めてしまうなら、以下のように記述する。
code:dockerfile
FROM docker.elastic.co/logstash/logstash:7.0.0
RUN rm -f /usr/share/logstash/pipeline/logstash.conf
ADD pipeline/ /usr/share/logstash/pipeline/
ADD config/ /usr/share/logstash/config/
MySQL との連携
JDBC インタフェースを介して様々なデータベースからデータを取得できる cron syntax で取得頻度を設定できる
JDBC ドライバ自体は同梱していないので、別途 DL し、そのパスを jdbc_driver_library に設定する必要がある code:config
input {
jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "mysql"
parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * * * *"
statement => "SELECT * from songs where artist = :favorite_artist"
}
}
Amazon Aurora の場合、SSL 接続の準備をする必要がある。