使用Fluentd监控Apache的访问日志,并将其传输到Elasticsearch

我想做的事情 (Wo xiang zuo de shiqing)

    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。

请参考这里并执行。

使用 DEB 软件包安装 Fluentd

$ 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

設置基本上是默認的,但允許外部網絡訪問,並進行單節點設置。

配置文件/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 设置为可以从外部访问。

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输入插件和Elasticsearch输出插件。

    • tail Input Plugin

 

    Elasticsearch Output Plugin

/etc/td-agent/td-agent.conf 可以被改写为:
/等/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访问日志的读取配置在这里,它会tail文件/var/log/apache2/access.log并将读取位置保存到/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解析器插件

读入的内容将被附加标签“apache2.access”。

当匹配到标签”apache2.access”时,将设置输出插件将数据发送到Elasticsearch。

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

Elasticsearch输出插件

连接对象和端口保持不变,但是”logstash_format”指的是在导入时将Elasticsearch的索引名称设置为”logstash-%Y.%m.%d”(如果设置为true,则索引名称将为”logstash-%Y.%m.%d”)。

Fluentd使用插件进行数据的提取、解析、转换和输出。

请查阅文档以了解有哪些插件可用。

    • Input Plugins

 

    • Output Plugins

 

    • Filter Plugins

 

    • Parser Plugins

 

    • Formatter Plugins

 

    • Buffer Plugins

 

    Storage Plugins

设定完上述内容后,重新启动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

只要能够参考,就可以了。

範囲を選択_006.png

从这里开始,让我们用Kibana根据自己的喜好进行可视化。

bannerAds