收集日志是为了做进一步的分析。收集是第一步,收集到日志后还需要进行存储、索引,以便进行快速查询分析。我们还需要一个友好的查询界面,来方便用户使用日志。
本文介绍一个免费的开源软件组合,正好可以实现上述目的。它们就是Fluentd + Elasticsearch + Kibana,简称EFK。
Fluentd用于采集日志。Elasticsearch是一个开源的搜索引擎,以使用方便而著称。Kibana是一个开源的Web UI,为Elasticsearch提供了一个友好的使用界面。
使用EFK的日志系统,一般采用如下架构:
elasticsearch和kibana安装过程不说
- 安装td-agent
- 为Fluentd安装elasticsearch插件
$ sudo /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch --no-document
- 在td-agent.conf中使用elasticsearch
# get logs from syslog
<source>
@type syslog
port 42185
tag syslog
</source>
# get logs from fluent-logger, fluent-cat or other fluentd instances
<source>
@type forward
</source>
<match syslog.**>
@type elasticsearch
logstash_format true
<buffer>
flush_interval 10s # for testing
</buffer>
</match>
这里syslog会经由Fluentd写入elasticsearch,并在elasticsearch中以logstash-%Y.%m.%d的命名方式创建索引。
4. 配置rsyslogd
需要在/etc/rsyslog.conf中添加如下配置,这样系统日志就可以从rsyslogd转发到Fluentd(端口为42185),并由Fluentd转发到elasticsearch中。
*.* @127.0.0.1:42185
重启rsyslogd:
sudo /etc/init.d/rsyslog restart
- 存储并搜索日志
一旦Fluentd接收到了rsyslogd发送来的日志,并将这些日志写入到elasticsearch,就可以通过kibana进行可视化的数据查询了。
打开kibana(http://localhost:5601),创建索引,设置索引模式为logstash-*,选择@timestamp作为Time Filter字段名称。然后就可以在“Discover”面板看到rsyslogd发送过来的日志了。