4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LogstashでApacheのログをElasticsearchに投入する方法

Last updated at Posted at 2016-11-02

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

/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/lo‌​gstash.log

##設定ファイルの作成
次に、logstashの設定ファイルを作成する。
このファイルには、読み込み先のソース(ファイルの場合はファイルパス)、フィルタ、出力先の情報等を記述する。作成した設定ファイルは下記のファイルパスに.confの拡張子付きで保管する。名前はなんでも良い。

1 2
保管先パス /etc/logstash/conf.d

コマンド例
vi /etc/logstash/conf.d/01-httpdlog.conf

設定ファイルの中身の例は下記の通り。
下記の例では、Apacheによって出力されたログを読み込み、それをElasticsearchに保管している。

/etc/logstash/conf.d/01-httpdlog.conf
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

logstash.conf
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のログ出力設定

/etc/httpd/conf/httpd.conf
 ...
 LogFormat "%h %l %u %t \"%r\" %s %b %D \"%{Referer}i\" \"%{User-agent}i\"" new_format
 ...

logstashはデフォルトではlogstash:logstashで実行される。
/etc/init.d/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 }
4
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?