12
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.

Apacheのアクセスログを、FluentdでtailしてElasticsearchに放り込む

Posted at

やりたいこと

  • Apacheのアクセスログを、可視化・分析するための環境を作りたい

ということをお題に、

  • ApacheのアクセスログをFluentdでtailして
  • Elasticsearchに放り込み、Kibanaで参照可能な状態にする

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

環境

Ubuntu Linux 18.04 LTSで行っています。

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

なお、サーバーについては

  • ApacheおよびFluentd … 172.17.0.2
  • ElasticsearchおよびKibana … 172.17.0.3

で稼働させるものとします。

Apacheのインストール

なにはともあれ、まずはApacheのインストール、それから起動。

$ sudo apt install apache2
$ sudo service apache2 start

インストールされたApacheのバージョン。

$ /usr/sbin/apache2 -v       
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2018-10-10T18:59:25

表示するコンテンツがないので、とりあえずApacheのドキュメントを放り込んでみます。

$ cd /var/www/html
$ sudo -E wget https://archive.apache.org/dist/httpd/docs/httpd-docs-2.4.33.ja.zip
$ sudo unzip httpd-docs-2.4.33.ja.zip
$ sudo mv httpd-docs-2.4.33.ja/* ./.

選択しているApacheのバージョンは、aptでインストールしたものよりも、若干新しいですが…。

範囲を選択_001.png

tail対象にする、アクセスログの確認。

$ sudo tail -f /var/log/apache2/access.log
172.17.0.1 - - [11/Dec/2018:11:52:14 +0000] "GET /getting-started.html HTTP/1.1" 200 4746 "http://172.17.0.2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
172.17.0.1 - - [11/Dec/2018:11:52:16 +0000] "GET /filter.html HTTP/1.1" 200 2425 "http://172.17.0.2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
172.17.0.1 - - [11/Dec/2018:11:52:51 +0000] "GET /misc/security_tips.html HTTP/1.1" 200 7814 "http://172.17.0.2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
172.17.0.1 - - [11/Dec/2018:11:52:53 +0000] "GET /server-wide.html HTTP/1.1" 200 3075 "http://172.17.0.2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
172.17.0.1 - - [11/Dec/2018:11:53:01 +0000] "GET /vhosts/index.html HTTP/1.1" 200 2839 "http://172.17.0.2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
172.17.0.1 - - [11/Dec/2018:11:53:02 +0000] "GET /vhosts/index.html HTTP/1.1" 200 2838 "http://172.17.0.2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
172.17.0.1 - - [11/Dec/2018:11:53:03 +0000] "GET /vhosts/fd-limits.html HTTP/1.1" 200 3281 "http://172.17.0.2/vhosts/index.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"

Fluentdのインストール

続いて、Fluentdをインストールします。

こちらを参照して、実行。

Installing Fluentd Using deb Package

$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent3.sh | sh

起動。

$ sudo service td-agent start

設定は後でやりましょう。

ElasticsearchとKibanaのインストール

続いて、ElasticsearchとKibanaをインストールして起動します。

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.2.tar.gz
$ tar xf elasticsearch-6.5.2.tar.gz
$ cd elasticsearch-6.5.2
$ vim config/elasticsearch.yml     # 設定変更
$ bin/elasticsearch

設定はほぼデフォルトですが、外部からのネットワークアクセスの許可と、Single Node設定にします。

config/elasticsearch.yml

network.host: 0.0.0.0
discovery.type: "single-node"

続いて、Kibanaのインストールと起動。

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.2-linux-x86_64.tar.gz
$ tar xf kibana-6.5.2-linux-x86_64.tar.gz
$ cd kibana-6.5.2-linux-x86_64
$ vim config/kibana.yml      # 設定変更
$ bin/kibana

Kibanaについても、外部からアクセスできるように設定します。

config/kibana.yml

server.host: "0.0.0.0"

Fluentdの設定をする

では、Fluentdを設定していきましょう。

Apacheのアクセスログを、Elasticsearchに放り込むように構成します。

まず最初に、インストールしたApacheのデフォルトのログのパーミッションでは、Fluentdから読み込めないため権限変更…。

$ sudo chmod o+rx /var/log/apache2
$ sudo chmod o+r /var/log/apache2/*

では、Fluentdの設定を行います。ほぼドキュメント通りですが、tail Input PluginとElasticsearch Output Pluginを設定します。

/etc/td-agent/td-agent.conf

<source>
  @type tail
  path /var/log/apache2/access.log
  pos_file /var/log/td-agent/apache2-access.log.pos
  tag apache2.access
  format apache2
</source>

<match apache2.access>
  @type elasticsearch
  host 172.17.0.3
  port 9200
  logstash_format true
</match>

Apacheのアクセスログの読み込みの設定はこちらで、ファイル/var/log/apache2/access.logをtailし、読み込んだポジションを/var/log/td-agent/apache2-access.log.posに保存、ファイルフォーマットはapache2で設定します。

<source>
  @type tail
  path /var/log/apache2/access.log
  pos_file /var/log/td-agent/apache2-access.log.pos
  tag apache2.access
  format apache2
</source>

Apacheのアクセスログに関しては、パースがプラグインとして提供されていて良いですね。

apache2 Parser Plugin

読み込んだ内容は、「apache2.access」タグを付与します。

そして、タグ「apache2.access」にマッチしたら、Elasticsearchに放り込むようにOutput Pluginを設定します。

<match apache2.access>
  @type elasticsearch
  host 172.17.0.3
  port 9200
  logstash_format true
</match>

Elasticsearch Output Plugin

接続先とポートは見たままですが、logstash_formatというのは取り込む時のElasticsearchのインデックス名をlogstash-%Y.%m.%dにするかどうかですね(trueの場合、logstash-%Y.%m.%dとなります)。

このように、Fluentdはデータの取り込みやパース、変換、出力をプラグインを使用して行います。

どのようなプラグインがあるかは、ドキュメントを参照しましょう。

ここまで設定したら、Fluentdを再起動します。

$ sudo service td-agent restart

Apacheで公開しているコンテンツにアクセスすると、

範囲を選択_005.png

ポジションファイルが更新されていきます。

/var/log/td-agent/apache2-access.log.pos 
/var/log/apache2/access.log	000000000000122b	000000000024981e

すると、Elasticsearchにデータが入るようになるので、KibanaでDiscoveryの設定を行います。データが入るように設定できていれば、アクセスログが出力されて少しすると、logstash-〜というインデックスが参照可能になっているはずです。

範囲を選択_002.png

あとは、これを登録して

範囲を選択_003.png

範囲を選択_004.png

参照できるようにすればOKです。

範囲を選択_006.png

ここから先は、Kibanaで好きなようにVisualizeしましょう。

12
8
0

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
12
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?