Logstashを使って、Elasticsearchにログを登録する方法を下記の通りまとめた。
再起動時のプロセスの自動起動についても手順の中に織り込み済み。
#インストール
ここを参考
https://www.elastic.co/guide/en/logstash/current/installing-logstash.html
#Yumリポジトリの登録
##GPG-Keyの登録
sudo rpm --httpproxy 129.168.0.1 --httpport 7777 --import https://packages.elastic.co/GPG-KEY-elasticsearch
##viコマンドでYumリポジトリURLを追加
sudo vi /etc/yum.repos.d/logstash.repo
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
##YumをつかってLogstashをインストール
sudo yum install logstash
###各ファイルのインストール先
Yumを使ってインストールした場合、それぞれ下記の場所が出力先に設定される
ファイル種類 | 保管パス | ファイル名 |
---|---|---|
実行ファイル | /opt/logstash/bin/ | logstash |
Logstash設定ファイル | /etc/init.d/logstash | |
監視設定ファイル場所 | /etc/logstash/conf.d | - |
Logstashログファイル | /var/log/logstash/logstash.log |
##設定ファイルの作成
次に、logstashの設定ファイルを作成する。
このファイルには、読み込み先のソース(ファイルの場合はファイルパス)、フィルタ、出力先の情報等を記述する。作成した設定ファイルは下記のファイルパスに.confの拡張子付きで保管する。名前はなんでも良い。
1 | 2 |
---|---|
保管先パス | /etc/logstash/conf.d |
コマンド例
vi /etc/logstash/conf.d/01-httpdlog.conf
設定ファイルの中身の例は下記の通り。
下記の例では、Apacheによって出力されたログを読み込み、それをElasticsearchに保管している。
input {
file {
path => "/etc/httpd/logs/access_log"
start_position => beginning
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => ["192.168.1.38:9200"]
index => "test1-%{+YYYY.MM.dd}"
}
stdout {}
}
コンフィグテスト
#4.x
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-httpdlog.conf --configtest
#5.x
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/01-httpdlog.conf --configtest
コレでConfig設定が正しいかどうかを確認できる
sudo service logstash configtest
input {
file {
path => "/var/log/httpd/access_log2"
start_position => "beginning"
}
}
filter {
grok {
#Apacheのログに併せて条件を指定
match => {
"message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{URIPATH:requestpath:string}%{URIPARAM:reqparam}(?: HTTP/%{NUMBER:httpversion})?|%{CISCO_REASON:verb}%{URIPATHPARAM:requestpath:string} HTTP/%{NUMBER:httpversion}?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes:int}|-) (?:%{NUMBER:response_time:int}|-) %{QS:referrer} %{QS:agent}"
} }
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
#ログに残したくないタイプのパスを指定し、除外する(指定は正規表現)
if [requestpath] =~ ".ttf$" or [requestpath] =~ ".woff$" {
drop { }
}
}
output {
elasticsearch {
hosts => ["192.168.1.38:9200"]
#作成日の年月日をつけてインデックスを作成する
index => "stacktrace-%{+YYYY.MM.dd}"
}
#標準出力に出力
stdout { codec => rubydebug }
}
(参考)Apacheのログ出力設定
...
LogFormat "%h %l %u %t \"%r\" %s %b %D \"%{Referer}i\" \"%{User-agent}i\"" new_format
...
logstashはデフォルトではlogstash:logstashで実行される。
/etc/init.d/logstashを参照
# Description: Starts Logstash as a daemon.
### END INIT INFO
...
LS_USER=logstash
LS_GROUP=logstash
...
5.xの場合は、下記のパスとなる。
vi /etc/logstash/startup.options
上記の設定ファイルを変更して、プロセスのオーナを変更するか、読むファイルの参照権限を変更する必要がある
chmod 775 /var/log/httpd/access_log2
このコマンドで、Logstashのログファイルを確認できる。エラーが起きている場合はここにメッセージが表示されるはず
tail -f /var/log/logstash/logstash.log
tail -f /var/log/logstash/logstash-plain.log #5.0以降はこちらに変更となった
##起動方法
systemctl start logstash.service
systemctl status logstash.service
##stacktraceを読み取る
file {
path => "/home/nagase/server.log.2016-06-30"
start_position => "beginning"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
}
filter {
mutate {
gsub => [ "message", "r", "" ]
}
grok {
match => [ "message", "(?m)%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:severity} %{GREEDYDATA:message}" ]
overwrite => [ "message" ]
}
date {
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output {
elasticsearch {
hosts => ["172.31.27.51:9200"]
index => "stacktrace-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }