前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker实践(七): EFK Stack搭建日志管理系统

Docker实践(七): EFK Stack搭建日志管理系统

作者头像
loong576
修改2019-10-23 10:55:08
1.4K0
修改2019-10-23 10:55:08
举报
文章被收录于专栏:运维ABC运维ABC

环境说明:

主机名

操作系统版本

IP地址

docker版本

Vmware版本

docker01

Ubuntu 16.04.5

172.27.9.71

18.09.2

12.5.2

ubuntu安装详见:Ubuntu16.04.5以lvm方式安装全记录

docker安装详见:Ubuntu16.04安装Docker

docker-compose安装详见:Docker Compose实践

一、ELK

在介绍EFK之前先介绍下ELK

1. ELK简介

Logstash

Logstash: 是一个灵活的数据传输和处理系统,Logstash的任务读取原始日志,并对其进行分析和过滤,然后将其转发给其他组件(比如 Elasticsearch)进行索引或存储。在beats出来之前,还负责进行数据收集。logstash基于JRuby实现,可以跨平台运行在JVM上。模块化设计,有很强的扩展性和互操作性,不过性能一直是被诟病的问题。

Elasticsearch

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Kibana

Kibana可以为 Logstash、Beats和ElasticSearch提供的日志分析友好的Web界面,可以帮助汇总、分析和搜索重要数据日志。

2. ELK日志处理流程

二、Fluentd

1. Fluentd简介

Fluentd是一个免费和开源的日志收集器,目前支持超过600种输入源,可以连接各种数据源和数据输出组件。fluentd基于CRuby实现,并对性能表现关键的一些组件用C语言重新实现,整体性能不错。Fluentd有很强的的扩展性,最大支持超过500000台服务器。

本文使用Fluentd替换Logstash搭建EFK日志管理系统。

Fluentd特点:

  • 安装方便
  • 占用空间小
  • 半结构化数据日志记录
  • 灵活的插件机制
  • 可靠的缓冲
  • 日志转发

2. Fluentd日志处理流程

三、日志管理系统搭建

本文采用Docker Compose方式搭建EFK Stack

1. 目录结构

代码语言:txt
复制
root@docker01:~# tree efk/
efk/
├── docker-compose.yml
└── fluentd
    ├── conf
    │   └── fluent.conf
    └── Dockerfile

2 directories, 3 files

新建项目目录efk

2. docker-compose.yml

代码语言:txt
复制
root@docker01:~/efk# more docker-compose.yml 
version: '2'
services:
  web:
    image: httpd
    ports:
      - "80:80"
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access

  fluentd:
    build: ./fluentd
    volumes:
      - ./fluentd/conf:/fluentd/etc
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
      - "24224:24224/udp"

  elasticsearch:
    image: elasticsearch:5.3.0
    expose:
      - 9200
    ports:
      - "9200:9200"

  kibana:
    image: kibana:5.3.0
    links:
      - "elasticsearch"
    ports:
      - "5601:5601"

该yml用于创建服务Apache、Fluentd、Elasticsearch和Kibana,创建的web容器指定的Logging Driver为fluentd

注意, 镜像Elasticsearch和Kibana版本需保持一致

3. Fluentd镜像

代码语言:txt
复制
root@docker01:~/efk/fluentd# more Dockerfile 
# fluentd/Dockerfile
FROM fluent/fluentd:v0.12-debian
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-rdoc", "--no-ri", "--version", "1.9.7"]

准备Fluentd镜像,安装Elasticsearch plugin,通过插件fluent-plugin-elasticsearch可以直接将日志发送给 Elasticsearch

4. fluent.conf

代码语言:txt
复制
root@docker01:~/efk/fluentd/conf# more fluent.conf 
# fluentd/conf/fluent.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>
<match *.**>
  @type copy
  <store>
    @type elasticsearch
    host elasticsearch
    port 9200
    logstash_format true
    logstash_prefix fluentd
    logstash_dateformat %Y%m%d
    include_tag_key true
    type_name access_log
    tag_key @log_name
    flush_interval 1s
  </store>
  <store>
    @type stdout
  </store>
</match>

在Fluentd中,配置文件非常重要,它定义了Fluentd应该执行的操作。

source:定义输入。type指定使用的input plugin,这里是in_forward,用于接收来自Docker logging driver即fluentd的日志。

match:定义输出的目标,如写入文件,或者发送到指定地点。out_elasticsearch插件用于将日志转发到elasticsearch。

Fluentd有6种插件: Input, Parser, Filter, Output, Formatter and Buffer。具体可参考:https://docs.fluentd.org/v0.12/articles/input-plugin-overview

5. 启动容器

代码语言:txt
复制
root@docker01:~/efk# docker-compose up

6. 查看容器

7. 产生httpd Access Logs

代码语言:txt
复制
root@docker01:~# for i in {1..10};do sleep 1; curl http://172.27.9.71:80; done   
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>
<html><body><h1>It works!</h1></body></html>

8. 配置Kibana

8.1 访问Kibana

http://172.27.9.71:5601/app/kibana

8.2 查看日志索引

登陆地址如图

8.3 配置index pattern

指定index pattern为fluentd-*,这与Elasticsearch中的index一致,Time-field name选择 @timestamp,点击Create创建index pattern。

8.4 日志发现

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ELK
    • 1. ELK简介
      • 2. ELK日志处理流程
      • 二、Fluentd
        • 1. Fluentd简介
          • 2. Fluentd日志处理流程
          • 三、日志管理系统搭建
            • 1. 目录结构
              • 2. docker-compose.yml
                • 3. Fluentd镜像
                  • 4. fluent.conf
                    • 5. 启动容器
                      • 6. 查看容器
                        • 7. 产生httpd Access Logs
                          • 8. 配置Kibana
                            • 8.1 访问Kibana
                            • 8.2 查看日志索引
                            • 8.3 配置index pattern
                            • 8.4 日志发现
                        相关产品与服务
                        Elasticsearch Service
                        腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档