Docker集群日志收集之EFK实践

docker集群中日志收集采用EFK(elasticsearch、fluent、kibana)方案。

  • Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。
  • Fluentd:由于docker的logdriver默认支持Fluentd,所以发送端默认选定Fluentd.
  • Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

首先保证每台docker宿主机上装有Fluentd,docker启动镜像时,使用docker run --log-driver Fluentd.将容器里面控制台的信息转发给Fluentd,由Fluentd转发给elasticsearch存储。再通过kibana展示和分析。

访问https://www.elastic.co/cn/,下载最新的Elasticsearch和Kibana,需注意两者版本要一致。直接解压运行即可,不需要配置什么环境变量(Elasticsearch依赖jdk环境)。注意修改Elasticsearch和kibana的配置文件 server.host=0.0.0.0,可通过外网访问。

下载elasticsearch

$wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz

下载Kibana

$wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz

解压安装

$tar -zxvf elasticsearch-6.0.0.tar.gz
$tar -zxvf kibana-6.0.0-linux-x86_64.tar.gz

运行

$./elasticsearch-6.0.0/bin/elasticsearch
$./kibana-6.0.0-linux-x86_64/bin/kibana

然后直接安装fluentd。
前奏,查看当前最大打开文件数:

$ ulimit -n
1024

如果查看到的是1024,那么这个数值是不足的,则需要修改配置文件提高数值

vi /etc/security/limits.conf

设置值如下

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

修改network参数

vi /etc/sysctl.conf

设置值如下

net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240    65535

然后重启系统
安装fluentd

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

启动fluentd

$ /etc/init.d/td-agent start 
Starting td-agent: [  OK  ]
$ /etc/init.d/td-agent status
td-agent (pid  21678) is running...

安装必要的插件

$ /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch
$ /usr/sbin/td-agent-gem install fluent-plugin-typecast
$ /usr/sbin/td-agent-gem install fluent-plugin-secure-forward

$ systemctl restart td-agent

配置td-agent,使docker生成的日志输出到elasticsearch

$ vi /etc/td-agent/td-agent.conf

修改内容为如下(这里我没有填写端口,默认使用9200端口)


  @type forward
  port 24224
  bind 0.0.0.0



  @type elasticsearch
  logstash_format true
  flush_interval 10s # for testing
  host 127.0.0.1

重启td-agent

 systemctl restart td-agent

你可能感兴趣的:(Docker集群日志收集之EFK实践)