使用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安装的版本稍微新一点,但是…。

查看访问日志,以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上公开的内容时,

职位文件将被持续更新。
/var/log/td-agent/apache2-access.log.pos
/var/log/apache2/access.log 000000000000122b 000000000024981e
然后,数据将会进入Elasticsearch,接着我们需要在Kibana中进行Discovery的设置。如果成功设置数据进入,接下来会生成访问日志并且很快会变为可供参考的logstash-〜索引。

除此之外,只需要将其注册。


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

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