d##概述
前文,讲述了使用fluentd driver来管理docker的日志。尽管,docker的日志被导出了,或者采用fluent的集中收集方式将所有的agent的日志都集中到了集群中的某一台或者两台机器上,但是要从如果庞大的日志结合中过滤出有用的信息还是难度比较大的。
本文将介绍如何安装elasticsearch及配置fluent将日志转储到elasticsearch中。至于,elasticsearch的完整介绍将在另外的文章中另行介绍。
由于本人近期在研究docker的使用,所以将使用docker容器来部署elasticsearch。要使用docker部署elaticsearch,首先需要构建elasticsearch的镜像。下面将给出我使用的dockerfile文件。

部署elasticsearch和kibana

elk-base

FROM centos:latest
RUN cd ~ && \
    yum install -y wget && \
    wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm" && \
    yum -y localinstall jdk-8u73-linux-x64.rpm && \
    rm ~/jdk-8u73-linux-x64.rpm && \
    rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

elasticsearch使用的仓库文件

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

docker file

FROM elk-base
COPY ./elasticsearch.repo /etc/yum.repos.d/elasticsearch.repo
RUN yum -y install elasticsearch

ENV ES_HOME /usr/share/elasticsearch
ENV CONF_DIR /etc/elasticsearch
ENV DATA_DIR /var/lib/elasticsearch
ENV LOG_DIR /var/log/elasticsearch
ENV PID_DIR /var/run/elasticsearch

COPY ./start.sh start.sh
RUN chmod +x /start.sh
CMD sh /start.sh

###启动脚本start.sh

#!/bin/bash
userdel elasticsearch
groupadd elasticsearch
useradd elasticsearch -g elasticsearch
for dir in /usr/share/elasticsearch /etc/elasticsearch  /var/lib/elasticsearch /var/log/elasticsearch /var/run/elasticsearch ;
do
   test ! -d $$dir && mkdir -p $dir
   chown elasticsearch:elasticsearch  -R  $dir
done
su - elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch -Des.pidfile=${PID_DIR}/elasticsearch.pid -Des.default.path.home=${ES_HOME} -Des.default.path.logs=${LOG_DIR} -Des.default.path.data=${DATA_DIR} -Des.default.path.conf=${CONF_DIR}"

启动elastcisearch

docker run -d --name=elasticsearch --net=host --restart=always  elasticsearch

elasticsearch默认监听的http ip为localhost,如果集群中有多个agent需要把日志往elasticsearch中存储,可修改elasticsearch.yml中network.host监听ip为0.0.0.0。

#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200

kibana仓库文件

[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

kibana Dockerfile

FROM elk-base
COPY ./kibana.repo /etc/yum.repos.d/kibana.repo
RUN yum -y install kibana
CMD /opt/kibana/bin/kibana

启动kibana

docker rm kibana;docker run -d --net=host  --name kibana kibana

kibana部署完毕之后,可通过http://your-domain-name:5601端口访问。
如果elasticsearch于kibana部署在不同的物理机器上,需要修改kibana的配置文件,指定elasticsearch机器的地址。


# The URL of the Elasticsearch instance to use for all your queries.
# elasticsearch.url: "http://localhost:9200"

配置fluent将日志存储到elasticsearch中

安装fluent的elasticsearch插件,

/usr/sbin/td-agent-gem  install  fluent-plugin-elasticsearch

配置td-agent

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

<match docker.**>
  type elasticsearch
  host $elasicsarchhost
  port 9200
  index_name docker
  type_name docker
  logstash_format true
  logstash_prefix docker
  logstash_dateformat %Y.%m.
  time_key vtm
  utc_index true
  flush_interval 5
</match>

指定一logstash格式存储,主要为了方便使用kibana进行分析。同时,配置文件中需要增加timestamp。否则,kibana无法建立时序的索引,会影响查询速度。重启td-agent。

systemctl restart td-agent

如果配置成功,在/var/log/td-agent/td-agent/log下能看到如下日志:

    time_key vtm
    utc_index true
    flush_interval 5
  </match>
  <match debug.**>
    type stdout
  </match>
  <source>
    type forward
  </source>
  <source>
    type http
    port 8888
  </source>
  <source>
    type debug_agent
    bind 127.0.0.1
    port 24230
  </source>
</ROOT>
2016-03-27 21:56:45 +0800 [info]: listening fluent socket on 0.0.0.0:24224
2016-03-27 21:56:45 +0800 [info]: listening dRuby uri="druby://127.0.0.1:24230" object="Engine"
2016-03-27 21:58:15 +0800 [info]: Connection opened to Elasticsearch cluster => {:host=>"$elasticsearchhost", :port=>9200, :scheme=>"http"}
[root@niao-node-1 td-agent]#

登录,上述流程走完,便可以通过kibana查看日志了。

参考:
[1] http://docs.fluentd.org/articles/config-file
[2] https://github.com/uken/fluent-plugin-elasticsearch

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐